[아이템 68] 일반적으로 통용되는 명명 규칙을 따르라
식별자 타입 예 패키지와 모듈 org.junit.jupiter.api, com.google.common.collect 클래스와 인터페이스 Stream, FutureTask, LinkedHashMap, HttpClient 메서드와 필드 remove, groupingBy, getCrc 상수 필드 MIN_VALUE, NEGATIVE_INFINITY 지역변수 i, denom, houseNum 타입 매개변수 T, E, K, V, X, R, U, V, T1, T2 자바 플랫폼은 명명 규칙이 잘 정립되어 있으며, 그중 많은 것이 자바 언어 명세에 기술되어 있다. 자바 명명 규칙은 크게 철자와 문법, 두 범주로 나뉜다. 철자 규칙은 패키지, 클래스, 인터페이스, 메서드, 필드, 타입 변수의 이름을 다룬다. 이 규칙들은..
[아이템 65] 리플렉션보다는 인터페이스를 사용하라
리플렉션이란? 리플렉션 기능(java.lang.reflect)을 이용하면 프로그램에서 임의의 클래스에 접근할 수 있다. Class 객체가 주어지면 그 클래스의 생성자, 메서드, 필드에 해당하는 Constructor, Method, Field 인스턴스를 가져올 수 있다. Constructor, Method, Field 인스턴스들로는 그 클래스의 멤버 이름, 필드 타입, 메서드 시그니처 등을 가져올 수 있다. Constructor, Method, Field 인스턴스를 이용해 각각에 연결된 실제 생성자, 메서드, 필드를 조작할 수도 있다. 단점 컴파일타임 타입 검사가 주는 이점을 하나도 누릴 수 없다. 예외 검사의 이점도 누릴 수 없다. 리플렉션 기능을 써서 존재하지 않는(접근할 수 없는) 메서드를 호출하려 ..