본문 바로가기

분류 전체보기

(67)
[Effective-Java] Item 66, 67.네이티브 메소드는 신중히 사용하라, 네이티브 메소드는 신중히 사용하라 [아이템66 - 네이티브 메소드는 신중히 사용하라] JNI(자바 네이티브 인터페이스; Java Native Interface): 자바 프로그램이 네이티브 메소드를 호출하는 기술 네이티브 메소드(Native Method): C, C++ 같은(여기에 국한되는건 아니다) 네이티브 프로그래밍 언어로 작성한 메소드 네이티브 메소드의 주요 쓰임 1. 레지스트리 같은 플랫폼 특화 기능 자바 버전이 올라가며 OS같은 하부 플랫폼의 기능들을 점차 흡수하기에 네이티브 메소드 사용 필요는 점차 줄어든다. 자바9 부터는 process API를 추가해 OS 프로세스에 접근할 수 있어졌다. [참고] / [참고2] 추가로 대체할 자바 라이브러리가 없는 네이티브 라이브러리를 사용해야할 때도 사용한다. 2. 네이티브 코드로 작성된 기..
[Effective-Java] Item 64, 65.객체는 인터페이스를 사용해 참조하라, 리플렉션보다는 인터페이스를 사용하라 [아이템64 - 객체는 인터페이스를 사용해 참조하라] 인터페이스를 사용해 참조하자 적합한 인터페이스만 있다면 매개변수뿐 아니라 반환값, 변수, 필드를 전부 인터페이스 타입으로 선언하자. 프로그램이 유연해진다. 선언 타입과 구현 타입을 동시에 바꿀 수 있으니 변수를 구현 타입으로 선언해도 되지 않을까? 클라이언트에서 기존 타입에서만 제공하는 메소드를 사용했거나, 기존 타입을 사용해야하는 다른 메소드에 그 인스턴스를 넘긴다면 새로운 코드로 교체를 했을 경우, 컴파일 되지 않는다. 변수를 인터페이스 타입으로 선언하면 이럴 일이 전혀 없다. 객체의 실제 클래스를 사용해야할 상황은 오직 생성자를 생성할 때 뿐이다. 코드로 자세히 보면 아래와 같다. // 좋지않은 예, 클래스를 타입으로 사용 LinkedHashSe..
[Effective-Java] Item 62, 63.다른 타입이 적절하다면 문자열 사용을 피하라, 문자열 연결은 느리니 주의하라 참조에 나온 내용을 인지하고 있다는 가정하에 작성해서 두 레퍼런스를 참조했다! [참조1] / [참조2] [Effective-Java] Item 62.다른 타입이 적절하다면 문자열 사용을 피하라 문자열 String은 텍스트를 표현하도록 설계되었지만, 워난 흔하며 자바의 좋은 지원때문에 의도하지 않은 용도로 쓰이는 경향이있다. 올바르지 않게 사용된 사례 1. 문자열은 다른 값 타입을 대신하기 적합하지 않다. 다양한 입력으로부터 데이터를 받을 때 주로 문자열을 사용하는데, 자연스러워 보이지만 진짜 문자열일 때만 사용하는게 좋다. 기본 타입이든 참조 타입이든 적절한 값 타입이 있다면 그것을 사용하고 없다면 새로 만들자. 2. 문자열은 열거 타입을 대신하기 적합하지 않다. 상수를 열거할 땐 문자열보단 열거 타입..
[Effective-Java] Item 61.박싱된 기본 타입보다는 기본 타입을 사용하라 기본 타입과 박싱된 기본 타입의 차이 기본 타입은 값만 가지나, 박싱된 기본 타입은 식별성이라는 속성을 갖는다.(값이 같아도 서로 다르다고 식별될 수 있다) 기본 타입의 값은 언제나 유효하나 박싱된 기본 타입은 null일 수 있다. 기본 타입이 박싱된 기본타입보다 시간과 메모리 사용면에서 더 효율적이다. 박싱된 기본타입의 비교자 잘못 구현된 비교자 Comparator naturalOrder = (i, j) -> (i < j) ? -1 : (i == j ? 0 : 1); int result = naturalOrder.compare(new Integer(42), new Integer(42)); 위 코드의 result는 값이 같으므로 0을 출력해야하지만 1을 출력한다. 첫 번째 검사(i