목록자바 (28)
생각해보기

새로운 날짜와 시간 API 이전의 Date 와 Calendar 문제점 DataFormat 같은 일부 기능은 Date 클래스에만 작동했다. DateFormat은 스레드에 안전하지 않다. 즉 , 두 스레드가 동시에 하나의 포매터로 날짜를 파싱할 때 예기친 못한 결과가 일어날 수 있다. (DateFormat : 언어의 종류와 독립적으로 날짜와 시간의 형식을 조절하고 파싱할때 사용) Data와 Calendar 모두 가변 클래스이다. 가변 클래스라는 설계 때문에 유지보수가 어려워 졌다. 따라서 자바8에서는 java.time 에 새로운 날짜와 시간 API를 제공하였다. LocalDate와 LocalTime LocalDate 인스턴스는 시간을 제외한 날짜를 표현하는 불변 객체이다. LocalDate 객체는 어떤 시간..
자바와 Optional 자바에서 null 참조를 사용하면서 발생할 수 있는 문제점 에러의 근원이다 : NullPointerExcepton은 자바에서 가증 흔히 발생하는 에러다 코드를 어지럽힌다 : 때로 중첩된 null 확인 코드를 추가해야 하므로 null 때문에 코드 가독성이 떨어진다 아무 의미가 없다 : null은 아무 의미도 표현하지 않는다. 값이 없음을 표현하는 방법으로 적절하지 않다 자바 철학에 위배된다 : 자바는 개발자로부터 모든 포인터를 숨겼다. 하지만 null 포인터가 있음으로 위배된다. 형식 시스텀에 구멍을 만든다 : null은 무형식이며 정보를 포함하고 있지 않으므로 모든 참조 형식에 null을 할당할 수 있다. null이 할당되었으며 다른 부분으로 null이 퍼졌을 때, 처음에 어떤 목..

람다, 메서드 참조, 스트림 등의 기능을 이용해 리팩터링하는 방법 코드의 가독성 개선 코드의 가독성이란 : 어떤 코드를 다른 사람도 쉽게 이해할 수 있는 것이다. 자바8 기능을 이용해 코드 가독성을 개선하는 방법 익명 클래스를 람다 표현식으로 리팩터링하기 람다 표현식을 메서드 참조로 리팩터링하기 명령어 데이터 처리를 스트림으로 리팩터링하기 * Java 멀티 쓰레드 더보기 싱글 스레드 애플리케이션에서는 메인 스레드가 종료하면 프로세스도 종료된다. 하지만 멀티 스레드 애플리케이션에서는 실행 중인 스레드가 하나라도 있다면, 프로세스는 종료되지 않는다. 메인 스레드가 작업 스레드보다 먼저 종료되더라도 작업 스레드가 계속 실행 중이라면 프로세스는 종료되지 않는다. 익명 클래스를 람다 표현식으로 리팩터링 // 익명..
컬랙션 팩토리 자바 9에서는 작은 컬랙션 객체를 쉽게 만들 수 있는 방법을 제공한다 자바 9 이전 // 일반 배열 만들기 // Set도 아래와 같다 List friendsList = new ArrayList(); friendsList.add("Raphael"); friendsList.add("Olivia"); friendsList.add("Thibaut"); // Array.asList 사용 // 요소를 갱신할 수 있지만 추가나 삭제는 못함 List friendsListArrayFactory = Arrays.asList("Raphael","Olivia","Thibaut"); // Array.asSet 이라는 팩토리 메서드는 없다 따라서 Set을 만들기 위해서는 다른 방법이 필요하다 // 이 경우 내부적으..

스트림 인터페이스를 이용하면 간단하게 요소를 병렬로 처리 할 수 있다. 컬렉션에 parallelStream을 호출하면 병렬 스트림이 생성된다. 병렬스트림이란 각각의 스레드에서 처리할 수 있도록 스트림 요소를 여러 청크로 분할한 스트림이다. 따라서 병렬 스트림을 이용하면 모든 멀티코어 프로세서가 각각의 청크를 처리하도록 할당할 수 있다. 순차 스트림에 parallel 메서드를 호출하면 기존의 연산이 병렬로 처리된다 반대로 sequential로 병렬 스트림을 순차 스트림을 바꿀 수 있다. 따라서 우리는 어떤 연산은 병렬로, 어떤 연산은 순차적으로 실행할지 제어할 수 있다. parallel 메서드 : 순차 스트림 -> 병렬 스트림 sequential 메서드 : 병럴 스트림 -> 순차 스트림 stream.par..

컬렉터 Collector 인터페이스 구현은 스트림의 요소를 어떤 식으로 도출할지 지정한다. Stream에 컬렉터 파라미터를 collect 메소드에 전달함으로써 원하는 연산을 간결하게 구할 수 있다. 컬렉터의 장점은 collect로 결과를 수잡하는 과정을 간단하면서도 유연한 방식으로 정의할 수 있게 한다. 구체적으로 스트림에 collect을 호출하면 스트림의 요소에 (컬렉터로 파라미터화된) 리듀싱 연산이 수행된다. 즉, collect에서는 리듀싱 연산을 이용해서 스트림의 각 요소를 방문하면서 컬렉터가 작업을 처리한다 ex) 트랜잭션이라는 객체 안에 통화라는 정책이 존재한다. 통화 별로 트랜잭션을 그룹화할 때 일어나는 일 Collectors 유틸리티 클래스는 자주 사용하는 컬렉터 인스턴스를 손쉽게 생성할 수..