Item 65 - 리플렉션보다는 인터페이스를 사용하라
리플렉션(java.lang.reflect)의 기능 특정 클래스의 생성자, 메서드, 필드 정보를 가져올 수 있다. 추가적으로 멤버 이름, 필드 타입, 메서드 시그니처 등을 가져올 수 있다. 실제 생성자, 메서드, 필드를 조작할 수 있다. Method.invoke()는 메서드를 호출할 수 있게 해준다. ...
리플렉션(java.lang.reflect)의 기능 특정 클래스의 생성자, 메서드, 필드 정보를 가져올 수 있다. 추가적으로 멤버 이름, 필드 타입, 메서드 시그니처 등을 가져올 수 있다. 실제 생성자, 메서드, 필드를 조작할 수 있다. Method.invoke()는 메서드를 호출할 수 있게 해준다. ...
객체는 클래스가 아닌 인터페이스 타입으로 선언하라 // 좋은 예. 인터페이스를 타입으로 사용했다. Set<String> set = new LinkedHashSet<>(); // 나쁜 예. 클래스를 타입으로 사용했다. LinkedHashSet<String> set = new LinkedHashSet<>();...
문자열 연결 연산자 (+) 문자열 연결 연산자(+)는 여러 문자열을 하나로 합쳐주는 편리한 수단이다. 하지만, 본격적으로 사용하면 성능 저하를 감내하기 어렵다. 문자열 연결 연산자(+)로 문자열 n개를 잇는 시간은 n^2에 비례한다. String 은 불변이라서 두 문자열을 연결할 경우, 양쪽 내용을 모두 복사해야 한다. 청구서의 ...
시작하면서 문자열은 텍스트를 표현하도록 설계되었다. 하지만 문자열은 원래 의도와 다른 용도로 쓰이는 경향이 있다. 이번 아이템에서 문자열을 쓰지 않아야 할 사례를 알아보자! 문자열은 다른 타입을 대신하기에 적절하지 않다. 🙅♂️ 파일, 네트워크, 키보드의 입력으로부터 데이터를 받을 때 String을 사용할 수 있다. 하지만...
자바의 데이터 타입 기본 타입 : byte, short, int, long, float, double, char, boolean 참조 타입 : 클래스 타입, 인터페이스 타입, 배열 타입, 열거 타입 (ex. String, List..) 기본 타입은 모두 대응되는 참조 타입이 하나씩 있으며, 이를 박싱된 기본 타입이라고 한다. ...
float과 double 타입을 피해야 하는 이유 @Test void 부동소수점_연산() { double a = 1.03, b = 0.42; double result = a - b; System.out.println(result); // 0.6100000000000001 assertThat(result).isNotEqua...
라이브러리에 미숙할 때 🕶️ 무작위 정수 생성 예제 public class RandomTest { // 흔하지만 문제가 심각한 코드! static Random rnd = new Random(); static int random(int n){ return Math.abs(rnd.nextInt()) % n; ...
for-each 문을 사용해야 하는 이유 전통적인 for 문의 아쉬운 점 🤔 List<String> fruits = List.of("Apple", "Orange", "Melon", "Lemon", "Banana"); int[] numbers = {1, 2, 3, 4, 5}; // Collection 순회 for (Iterator<...
item 15의 ‘클래스와 멤버의 접근 권한을 최소화하라’와 취지가 비슷하다. 지역변수의 유효 범위를 최소로 줄이면 코드 가독성과 유지보수성이 높아지고 오류 가능성은 낮아진다. 지역변수의 범위를 줄이는 방법 🚀 (1) 가장 처음 쓰일 때 선언하기 사용하는 시점보다 훨씬 이전에 미리 선언하면 가독성이 떨어지고, 실제로 사용하는 시점엔 타입...
자바독 (Javadoc) 이란? API 문서화 유틸리티 자바독은 소스코드 파일에서 문서화 주석(자바독 주석)이라는 특수한 형태로 기술된 설명을 추려 API 문서로 변환해준다. Javadoc 사용법 javadoc 명령어 사용 $ javadoc -d docs {file_name}.java 한글 사용시 UTF-8로 인코딩 필요 $ j...