Item 69 - 예외는 진짜 예외 상황에만 사용하라
예외 처리를 제어 흐름 방식으로 사용했을 때 🙁 // 예외를 완전히 잘못 사용한 예 try { int i = 0; while(true) range[i++].climb(); } catch (ArrayIndexOutOfBoundsException e) { } 배열의 원소를 순회하면서 무한루프를 돌다가, 배열의 끝에 도...
예외 처리를 제어 흐름 방식으로 사용했을 때 🙁 // 예외를 완전히 잘못 사용한 예 try { int i = 0; while(true) range[i++].climb(); } catch (ArrayIndexOutOfBoundsException e) { } 배열의 원소를 순회하면서 무한루프를 돌다가, 배열의 끝에 도...
자바 언어의 명명 규칙 🎯 철자와 문법 두 범주로 나뉜다. 철자 규칙 ✔️ 패키지, 클래스, 인터페이스, 메서드, 필드, 타입 변수의 이름을 다룬다. 특별한 이유가 없는 한 반드시 따라야 한다. 패키지 명명법 .으로 구분하여 계층적으로 이름을 짓는다. 보통 인터넷 도메인 이름을 역순으로 사용한다. ...
최적화 격언 👨💻 (맹목적인 어리석음을 포함해) 그 어떤 핑계보다 효율성이라는 이름 아래 행해진 컴퓨터 죄악이 더 많다(심지어 효율을 높이지도 못하면서). 윌리엄 울프 (전체의 97% 정도인) 자그마한 효율성은 모두 잊자. 섣부른 최적화가 만악의 근원이다. 도널드 크루스 최적화를 할 때는 다음 두 규칙을 따르라. 첫 번째...
자바 네이티브 인터페이스(Java Native Interface, JNI)란? 자바 프로그램이 네이티브 메서드를 호출하는 기술 네이티브 메서드란, C나 C++같은 네이티브 프로그래밍 언어로 작성한 메서드 네이티브 메서드가 주로 쓰이는 곳 🔎 (1) 레지스트리 같은 플랫폼 특화 기능 자바가 성숙해지면서 (OS 같은) 하부 플랫폼...
리플렉션(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...