[이펙티브 자바] 아이템6

hyng·2022년 11월 23일
0

이펙티브 자바

목록 보기
6/13

불필요한 객체 생성을 피하라

new String() 보다는 "" 을 사용

String str = new String("string") // 매번 새로운 인스턴스를 생성
String str2 = "string" // 하나의 객체만 생성하여 공유

생성자 대신 정적 팩터리 메서드를 제공하는 불변 클래스에서는 정적 팩터리 메서드를 사용


Boolean(String) 생성자의 경우 호출될 때마다 새로운 객체를 만들기 때문에 자바 9에서 deprecated로 지정되었다.

생성비용이 비싼 객체는 캐싱해서 재사용

주어진 문자열이 유효한 로마숫자인지 확인하는 메서드가 있다.
이 메서드에서는 정규 표현식을 사용하는데, 이 방법은 성능이 중요한 상황에서 반복해 사용하기엔 적합하지 않다.

메서드 내부에서 생성되는 Pattern 인스턴스의 경우 생성 비용이 크다. 그래서 성능을 위해 Pattern을 생성해서 캐싱 해두고 재사용하는 편이 좋다.

객체가 가변이더라도 재사용해도 되는 경우

Map 인터페이스의 keySet 메서드는 Map 객체 안의 키 전부를 담은 Set을 반환한다. 그리고 Set 인스턴스는 가변이지만 keySet 메서드는 호출할 때마다 동일한 Set 인스턴스를 반환한다.
가변이지만 객체를 재사용하는 이유는 Set 인스턴스가 모두 동일한 Map 인스턴스를 대변하기 때문이다.

박싱된 기본 타입보다는 기본 타입을 사용하고, 의도치 않은 오토박싱이 숨어들지 않도록 주의하자

Long 인스턴스가 2^31개나 만들어지기 때문에 불필요한 실행 시간이 추가된다.

Long 타입 사용

long 타입 사용

방어적 복사가 필요한 상황에서 객체를 재사용 했을 때의 피해가, 필요 없는 객체를 반복 생성했을 때의 피해보다 훨씬 크다는 사실을 기억하자.

profile
공부하고 알게 된 내용을 기록하는 블로그

0개의 댓글