null 과 null 로 인해 발생하는 문제 null pointer 와 null reference 널 포인터(null pointer)는 유효한 객체를 참조하지 않는 포인터를 나타내기 위해 예약된 값을 갖는다. 널 포인터는 널 값과는 다른 의미를 갖는다. 대부분의 프로그래밍 언어에서 널 포인터는 "값 없음"을 의미하지만, 관계형 데이터베이스에서 널 값은 "알려지지 않은 값"을 의미한다. 이것은 실질적으로 중요한 차이로 이끌어 진다: 대부분의 프로그래밍 언어들은 두 널 포인터를 같다고 여기지만, 관계형 데이터베이스 엔진은 두 널 값을 같다고 여기지 않는다 https://en.wikipedia.org/wiki/Null_pointer 자바의 null 참조 의미가 모호하다. 초기화 되지 않은 상태 정의되지 않은 ..
ParallelStream vs CompletableFuture 기본 적으로 퍼포먼스는 ParallelStream이 좀더 빠르나, CompletableFuture의 ThreadPool을 조정하면 퍼포먼스가 크게 향상됨 ParallelStream java8에서 추가된 병렬처리를 매우 쉽게 해주는 방식 ForkJoinFramework를 이용하여 작업들을 분할하고, 병렬적으로 처리하게 됨 가독성이 매우 좋다. 기본 사용 방법 LongStream.range(0, 1_000_000_000).parallel() .sum(); parallelStream은 개발자 모르게 내부 스레드풀을 만들어 작업을 하지만, Stream별도 스레드 풀을 만드는게 아닌 하나의 스레드 풀을 모든 parallelStream이 공유한다. 장..
애노테이션 프로세서 정리 애노테이션 프로세서 소스코드 레벨에서 소스코드에 붙어있는 애노테이션 정보를 읽어, 컴파일러가 컴파일 중에 새로운 소스를 생성하거나, 변경(권장하지않음)이 가능하다. 소스코드와 별개의 리소스 파일도 생성이 가능한 강력한 기능 롬복 AutoService java.utilServiceLoader용 파일 생성 유틸리티 리소스 파일을 만들어준다. @Override Java5에서 기본제공 되던 애노테이션 프로세서 실제로 인터페이스나 상위클래스를 구현하는지 판단해준다. Dagger2 컴파일 타임 DI 제공 장점 Java agent를 사용하는 바이트코드 조작은 런타임시 발생하는 일이기 때문에, 애플리케이션 구동 등의 시점에 추가적인 비용이 발생한다. 컴파일 시점에 조작하기 때문에 런타임시 비용..
애노테이션 프로세서 2 애노테이션 프로세서를 사용하여 @Magic 애노테이션을 가지고 있는 경우 Moja 타입의 인터페이스를 구현하는 MagicMoja 클래스를 생성해본다. JavaPoet 새로운 소스코드를 생성할때 매우 유용한 라이브러리가 있다. 매우 직관적인것이 장점. com.squareup javapoet 1.11.1 애노테이션 프로세서 구현하기 2 지난번에 이어 애노테이션 프로세서 구현해보자. ClassName Element를 TypeElement로 변환한뒤, JavaPoet을 사용하여 ClassName 타입의 객체로 변환한다. 이 타입의 객체는 클래스 정보들을 참조할 수 있다. MethodSpec 우리가 생성할 클래스의 메소드 스팩을 구현한다. methodBuilder(메소드명): 구현할 메소드..