아이템 83. 지연 초기화는 신중히 사용하라 지연초기화는 성능 최적화 기법중 하나다. 따라서 안하는게 일단은 최선임. 지연 초기화란? Object lazy; // 수많은 코드 이후. lazy = new Object(); 지연 초기화는 필드가 필요한 시점까지 초기화하는 기법이다. 위의 코드가 간단한 예시이다. 지연 초기화는 '성능 최적화'를 위해 사용되는 기법 중 하나다. 따라서 안하는게 더 좋을 가능성이 있으며, 가급적이면 하지 않는 것이 좋다. 지연 초기화가 도움이 되는 경우 지연 초기화는 실제 필드가 필요한 시점까지 인스턴스를 생성하지 않는다. 이것이 도움이 되는 경우는 다음 조건을 모두 만족할 때다. 물론 만족한다고 해서 성능 개선을 항상 보장하지는 않는다. 초기화 비용이 크다. 이 필드가 잘 호출..
아이템 67. 최적화는 신중히 하라 좋은 구조의 소프트웨어를 만들고, 필요하다면 최적화를 해라. 성능을 위해 견고한 구조를 희생하지 말자. 빠른 프로그램보다는 좋은 프로그램을 작성하라. 프로파일링 도구를 이용해 성능 병목 지점을 찾아서 해결하라. 공개 API 설계 시, 성능에 주는 영향을 고려하라. public 가변 객체의 경우 불필요한 방어적 복사를 요구함 (최적화 관점) Composition으로 해결가능한 것을 상속으로 해결할 경우, public 가변 객체의 단점을 그대로 안고 감. 최적화 시도 전후로 성능을 측정하라. 요약 최적화를 할 때는 다음 두 규칙을 따라야한다. 첫번째, 하지마라. 두번째, 아직 하지 마라. 다시 말해 완전히 명백하고 최적화되지 않은 해법을 찾을 때까지는 하지마라. 최적화는 ..
아이템 66. 네이티브 메서드는 신중히 사용하라. JNI는 사용 경우 : OS 플랫폼 특화 기능이 필요하거나, 네이티브 라이브러리를 대체할 자바 라이브러리가 없는 경우. JNI 사용하면 안되는 경우 : 성능 개선을 위해서 사용할 때. JNI 단점 : 네이티브 언어가 타입 안전하지 않아 자바가 타입 안전하지 않게 되고, 플랫폼 이식성이 낮아짐. JNI란? JNI(Java Native INterface)는 자바 프로그램이 네이티브 메서드를 호출하는 기술이다. 네이티브 메서드는 C, C++ 같은 네이티브 프로그래밍 언어로 작성된 메서드를 의미한다. JNI를 사용해야 할 필요가 있을 때 OS 플랫폼 특화 기능을 활용하고 싶을 때 네이티브 라이브러리를 대체할만한 자바 라이브러리가 없을 때 자바는 최근 성숙해가면서..
아이템 65. 리플렉션보다는 인터페이스를 사용하라. 리플렉션은 Class 객체를 이용해 특정 클래스의 생성자, 메서드, 필드 등을 가져와서 이런저런 작업을 실행해 볼 수 있음. 리플렉션이 필요한지 확신할 수 없다면, 대부분 사용할 필요가 없는 것이다. 리플렉션의 단점 컴파일타임의 타입 검사가 주는 이점을 누릴 수 없음. 코드가 장황해 짐 성능이 떨어짐. 리플렉션의 사용 시점 최대한 제한된 형태로 단순히 사용해야 함. 리플렉션은 객체를 생성하는데만 사용하고, 생성한 객체는 가장 최상위 인터페이스로 받아라. (예를 들면 Set) 리플렉션이란? Class 객체 (Clazz) 가 주어지면, 그 클래스의 생성자, 메서드, 필드에 해당하는 Constructor, Method, Field 인스턴스를 가져올 수 있다...
아이템 84. 프로그램의 동작을 스레드 스케쥴러에 기대지 말라 운영체제 쓰레드 스케쥴러에 의존하지 마라 자바 어플리케이션의 운영체제에 대한 이식성을 낮춘다. 쓰레드를 효율적으로 사용하는 방법은 실행 가능한 스레드가 프로세서보다 너무 많지 않도록 유지하는 것. 실행 가능한 스레드를 가능한 적게 유지하는 것은 컨텍스트 스위칭 비용을 적게 가져가고, Busy Waiting 하는 쓰레드를 줄이라는 의미임. 쓰레드는 바쁜 대기(Busy Waiting)을 하면 안됨. 아무 작업도 하지 않는데 CPU만 점유하는 꼴이 됨. 쓰레드의 상태는 다음으로 나눌 수 있음. 대기 쓰레드 : Object.wait()로 대기중 / synchronized 모니터락을 얻기 위해 대기중인 쓰레드 / Thread.sleep()을 만나 대기..
* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.