Home
Dohyun's Blog
Cancel

Item67 (최적화는 신중히 하라)

최적화는 신중히 하라 우선 최적화에 관한 격언 3가지를 보자. (맹목적인 어리석음을 포함해) 그 어떤 핑계보다 효율성이라는 이름 아래 행해진 컴퓨팅 죄악이 더 많다. - 윌리엄 울프 - 자그마한 효율성은 모두 잊자. 섣부른 최적화가 만악의 근원이다. - 도널드 크누스 - 최적화를 할 때는 다음 두 규칙을 따르라 첫 ...

Item66 (네이티브 메서드는 신중히 사용하라)

네이티브 메서드는 신중히 사용하라 자바 네이티브 인터페이스(JNI)는 자바 프로그램이 네이티브 메서드를 호출하는 기술이다. 네이티브 메서드는 C나 C++같은 네이티브 프로그래밍 언어로 작성한 메서드를 뜻한다. 전통적으로 이러한 네이티브 메서드의 주요 쓰임은 아래와 같다. 레지스트리 같은 플랫폼 특화 기능을 사용하는 경우 네이티브 코드로...

Item65 (리플렉션보다는 인터페이스를 사용하라)

리플렉션보다는 인터페이스를 사용하라 리플렉션을 사용하면 임의의 클래스에 접근 가능하고, 해당 클래스의 멤버, 필드 등을 가져오고 조작이 가능하다. 심지어 컴파일 당시 존재하지 않던 클래스도 이용할 수 있다. 그러나 리플렉션에는 단점이 있다. 리플렉션의 단점 컴파일타임 타입 검사가 주는 이점을 누릴 수 없다. 프로그램이...

Item64 (객체는 인터페이스를 사용해 참조하라)

객체는 인터페이스를 사용해 참조하라 아이템 51에서 매개변수 타입으로 클래스가 아닌 인터페이스를 사용하라고 했다. 이것을 확장하면 객체는 인터페이스를 통해 참조하라 라고 할 수 있다. 적합한 인터페이스만 있다면 매개변수뿐 아니라 반환값, 변수, 필드를 전부 인터페이스 타입으로 선언하는 것이 좋다. 인터페이스를 타입으로 사용하는 습관을 길러둔다면 ...

Item63 (문자열 연결은 느리니 주의하라)

문자열 연결은 느리니 주의하라 문자열을 연결할 때 단순히 ‘+’를 사용해 아주 쉽게 여러 문자열을 하나로 합칠 수 있다. 하지만 한 줄 짜리 출력값 혹은 작고 크기가 고정된 객체의 문자열 표현을 만드는 정도라면 괜찮지만, 본격적으로 사용하게 된다면 성능 저하를 감내하기 어렵다. 문자열 연결 연산자로 문자열 n개를 잇는 시간은 n^2에 비례한다. ...

Item62 (다른 타입이 적절하다면 문자열 사용을 피하라)

다른 타입이 적절하다면 문자열 사용을 피하라 문자열은 Text를 표현하도록 설계되었다. 실제로도 잘 처리한다. 그런데 너무 흔하고, 너무 잘 처리해서 의도하지 않은 용도로 쓰이는 경우가 있다. 문자열은 다른 값 타입을 대신하기에 적합하지 않다. 많은 경우 파일, 네트워크, 키보드 입력으로부터 데이터를 받을 때 문자열을 사용한다. 그러나 입력받...

Item61 (박싱된 기본 타입보다는 기본 타입을 사용하라)

박싱된 기본 타입보다는 기본 타입을 사용하라 Java의 데이터 타입에는 기본 타입과 참조 타입이 있다. 각각의 기본 타입에 대응하는 참조 타입이 박싱된 기본 타입이라고 불린다. 우리가 무심코 사용하게 되는 Integer, Long, Double 등이 그 예이다. 이러한 박싱된 기본 타입과 기본 타입간에는 오토박싱과 오토언박싱이 이루어져 사용에는...

Item60 (정확한 답이 필요하다면 float와 double는 피하라)

정확한 답이 필요하다면 float와 double는 피하라 우리가 흔히 쓰는 float와 double는 과학과 공학 계산용으로 설계되었다고 한다. 이진 부동소수점 연산에 쓰이고, 넓은 범위의 수를 빠르게 정밀한 근사치로 계산하도록 설계 되었다. 따라서 정확한 결과가 필요할 때 사용하면 안된다. 특히 금융 관련 계산에서는 float와 double 타...

Item59 (라이브러리를 익히고 사용하라)

라이브러리를 익히고 사용하라 우리는 프로그램을 개발할 때 대부분 라이브러리를 이용해 코드를 작성한다. 그 편이 시간적으로나, 효율적으로나 이점이 크기 때문이다. 굳이 이미 있는 기능의 코드를 내가 새로 작성할 필요는 없다. 그러나 편리하고 양질의 코드를 사용할 수 있는 라이브러리는 충분히 익히고 사용해야 한다. List<String>...

Item58 (전통적인 for문보다는 for-each문을 사용하라)

전통적인 for문보다는 for-each문을 사용하라 List<Integer> list = new ArrayList<>(); for (Iterator<Integer> iterator = list.iterator(); i.hasNext();) { Integer number = i.next(); //... } for...