아이템6) 불필요한 객체 생성을 피해라
객체 재사용
String s = new String("data");
String s = "data";
private static final String REGEX = ...;
static boolean isRomanNumeral(String s) {
return s.matches(REGEX);
}
private static final String REGEX = ...;
private static final Pattern ROMAN = Pattern.compile(REGEX);
static boolean isRomanNumeral(String s) {
return ROMAN.matcher(s).matches();
}
불필요한 객체를 만들어내는 예
1. Adapter (view)
- 실제 작업은 뒷단 객체에 위임하고, 자신은 제2의 인터페이스 역할을 해주는 객체
- Map 인터페이스의 keySet 메서드
Map<String, Integer> serviceSinceMap = new HashMap<>();
serviceSinceMap.put("Kakao", 2010);
serviceSinceMap.put("Naver", 1999);
Set<String> test1 = serviceSinceMap.keySet();
Set<String> test2 = serviceSinceMap.keySet();
test1.remove("Kakao");
System.out.println(test1 == test2);
System.out.println(test1.size());
System.out.println(test2.size());
System.out.println(serviceSinceMap.size());
2. Auto Boxing
- 프로그래머가 기본 타입과 박싱된 기본 타입을 섞어 쓸 때 자동으로 상호 변환해주는 기술
- 박싱된 기본 타입(Long) 보다는 기본 타입(long) 을 사용한다.
Long sum = 0l;
for (long i = 0 ; i <= Integer.MAX_VALUE ; i++) {
sum += i;
}