Effective Java 3rd ITEM 66 67 68

ITEM 66. Use native methods judiciously

JNI(Java Native Interface)는 네이티브 메서드를 호출할 수 있게 해주는 기술이다. 네이티브 메서드란 C나 C++로 작성한 네이티브 프로그래밍 언어로 작성한 메서드를 말한다. 네이티브 메서드는 레지스트리같은 플랫폼 특화된 기능을 사용할때, 기존 라이브러리를 사용할때, 성능 개선을 목적으로 사용할때, 이렇게 3가지 경우에 주로 사용한다.

1. 플랫폼 특화된 기능 / 기존 라이브러리 사용

자바가 발전하면서 OS같은 하부 플랫폼의 기능들을 점차 사용할 수 있게 되었다. java9에서 process API가 추가되어 OS process에 접근할 수 있게 되었다. 대체할만한 자바 라이브러리가 없을 경우엔 네이티브 메서드를 사용해야 한다.

2. 성능 개선

성능 개선을 목적으로 사용하는건 권장하지 않는다. JVM의 발전으로 네이티브 구현보다도 빨라진 부분도 있다.


네이티브 메서드는 안전하지 않아 메모리 훼손 오류가 있을 수 있고 플랫폼을 많이 타서 이식성도 낮다. 디버깅도 어렵고 속도가 오히려 느려질 수 있다. 네이티브 메모리는 GC가 자동회수 하지 못하고 추적도 못해 위험할 수 있다. 네이티브 메서드와 자바 코드 사이의 접착 코드도 작성해야 하며, 넘나들때 비용도 추가된다.

=> 네이티브 메서드를 사용하려거든 다시 한번 더 생각해보자.

ITEM 67. Optimize judiciously

성능 최적화는 좋은 결과보다는 해로운 결과로 이어지기 쉽고 프로그램의 견고한 구조를 망가뜨릴 수 있다.
=> 빠른 프로그램보다는 좋은 프로그램을 작성하자.

아키텍처 - 성능

그렇다고 성능을 무시하라는 것이 아니다. 최적화는 나중에 해결할 수 있지만 아키텍처가 망가지면 선능을 제한할 수 있다. 또 성능을 위해 아키텍처 설계의 기본 틀을 변경하려다 보면 유지보수가 어려운 구조의 시스템이 만들어지기 쉽다. 따라서 아키텍처 설계 과정에서 성능을 반드시 염두해야 한다.

  1. 성능을 제한하는 설계를 피하라.
  2. API를 설계할 때 성능에 주는 영향을 고려하라.
  3. 신중한 설계로 멋진 구조를 갖춘 프로그램을 완성한 후에 성능 최적화를 생각하자.
  4. 각각의 최적화 시도 전후로 성능을 측정하라.


ITEM 68. Adhere to generally accepted naming conventions

패키지

  • 각 요소를 점(.)으로 구분하여 계층적으로 짓는다.
  • 모두 소문자 알파벳 혹은 숫자로 이뤄진다.
  • 8자 이하의 짧은 단어로 한다.

클래스와 인터페이스

  • 하나 이상의 단어로 이뤈진다.
  • 각 단어는 대문자로 시작한다.
  • 통용되는 줄임말을 제외하고는 줄여 쓰지 않는다.

메서드와 필드 이름

  • 첫글자를 소문자로 쓴다.
  • 나머지 규칙은 클래스와 같다.

상수 필드

  • 모두 대문자로 쓰며 단어 사이는 밑줄로 구분한다.

타입 매개변수

  • 보통 한문자로 표현한다.
  • T : Type / E : Element / K : Key / V : Value / X : eXception / R : Return