반응형
똑같은 기능의 객체를 매번 생성하기보다는 객체하나를 재사용하는 편이 나을 때가 많다. 재사용은 빠르고 세련되다. 특히 불변 객체는 언제든 재사용할 수 있다.
불변 객체
객체 내부의 변수값을 변경할 수 없는 객체
아래 코드를 보자.
String s = new String("jordy");
이 문장을 실행될 때마다 String 인스턴스를 새로 만든다.
이를 대신하여 직접 문자열을 할당할 경우에 기존 메모리에 저장되어있던 데이터를 재사용이 할 수 있다. hashcode(객체가 저장된 메모리 주소) 메서드를 사용하여 아래와 같이 비교해보면 확인 가능하다.
String jordy = "niniz";
String scappy = "niniz";
System.out.println(jordy.hashCode() == scappy.hashCode()); // true
이러한 불변 클래스를 생성하기 위해서 Item1 에서 소개되었던 정적 팩토리 메서드를 사용하는 것도 좋은 방법이다. 정적 팩토리 메서드를 사용할 시 생성자와 달리 새로운 객체를 생성해내지 않으며, 이는 불변 객체에 국한되지 않고 가변 객체 또한 변경되지 않고 재사용할 수 있다.
Map의 Set을 반환하는 keySet 메서드 또한 메서드 생성할 때마다 인스턴스를 재생성하지 않고 기존 인스턴스를 리턴하여 재사용한다.
이 방법은 생성 비용이 아주 비싼 객체일 수록 효과적이며 일부 객체를 static으로 선언해 재사용하는 것 또한 한 방법이다.
또한 박싱된 기본 타입보다는 기본 타입을 사용하고 의도치 않은 오토박싱이 숨어들지 않도록 주의하자.
반응형
'Book' 카테고리의 다른 글
[Real MySQL 8.0] 3장.사용자 및 권한 (1) | 2021.10.15 |
---|---|
[Effective Java] Item 7. 다 쓴 객체 참조를 해제하라 (0) | 2021.10.06 |
[Effective Java] Item 3. private 생성자나 열거 타입으로 싱글턴임을 보증하라 (0) | 2021.10.06 |
[Effective Java] Item 2. 생성자에 매개변수가 많다면 빌더를 고려하라 (0) | 2021.10.06 |
[Effective Java] Item 1. 생성자 대신 정적 팩토리 메서드를 고려하라 (0) | 2021.10.06 |