DEV ℧ Developer Diary

[EffectiveJava] item67 - 최적화는 신중히 하라

이 책에서는 최적화에 대한 세가지 격언을 소개한다.

(맹목적인 어리석음을 포함해) 그 어떤 핑계보다 효율성이라는 이름 아래 행해진 컴퓨팅 죄악이 더 많다.(심지어 효율을 높이지도 못하면서)

ㅡ 윌리엄 울프

(전체의 97% 정도인) 자그마한 효율성은 모두 잊자. 섣부른 최적화가 만악의 근원이다.
...

[EffectiveJava] item66 - 네이티브 메서드는 신중히 사용하라

자바 네이티브 인터페이스

자바 네이티브 인터페이스(Java Native Interface, JNI)는 자바 가상머신(JVM)위에서 실행되고 있는 자바코드가 네이티브 응용 프로그램 그리고 C, C++ 그리고 어샘블리 같은 다른 언어로 작성된 라이브러리를 호출하거나 호출되는 것을 가능하게 하는 프로그램 프레임 워크이다.

자바 네이티브 인터페이스의 쓰임새

  • 레지스트리...

[EffectiveJava] item65 - 리플렉션보다는 인터페이스를 사용하라

리플렉션 기능(java.lang.reflect)을 이용하면 프로그램에서 임의의 클래스에 접근할 수 있다.

리플렉션 API(Reflect API)

Class 객체가 주어지면 그 클래스의 생성자(Constructor), 메서드(Method), 필드(Field)에 해당하는 인스턴스를 가져 올 수 있고, 이 인스턴스들로는 그 클래스의 멤버 이름, 필드 타입, 메서드 시그니처등을 가져올 수 있다.

나아가 Constructor, Method, Field 인스턴스를...

[EffectiveJava] item64 - 객체는 인터페이스를 사용해 참조하라

Item51에서 매개변수 타입을 클래스가 아니라 인터페이스를 사용하라고 했다. 이 의미는 “객체는 클래스가 아닌 인터페이스로 참조하라”고 까지 확장할 수 있다.

적합한 인터페이스만 있다면 매개변수뿐 아니라 반환값, 변수, 필드를 전부 인터페이스 타입으로 선언하라. 객체의 실제 클래스를 사용해야 할 상황은 ‘오직’ 생성자로 생성할 때 뿐이다.

인터페이스...

[EffectiveJava] item63 - 문자열 연결은 느리니 주의하라

문자열 연결 연산자 (+)는 여러 문자열을 하나로 합쳐주는 편리한 수단이다.

한 줄짜리 출력값 혹은 작고 크기가 고정된 객체의 문자열 표현을 만들 때라면 괜찮지만, 본격적으로 사용하기 시작하면 성능 저하를 감내하기 어렵다.

문자열 연결 연산자로 문자열 n개를 잇는 시간은 n²에 비례한다. 문자열은 불변이라서 두 문자열을 연결할 경우...