Book

[Effective Java] Item 6. 불필요한 객체 생성을 피하라

Jordy-torvalds 2021. 10. 6. 10:01
반응형

똑같은 기능의 객체를 매번 생성하기보다는 객체하나를 재사용하는 편이 나을 때가 많다. 재사용은 빠르고 세련되다. 특히 불변 객체는 언제든 재사용할 수 있다.

불변 객체
객체 내부의 변수값을 변경할 수 없는 객체

아래 코드를 보자.

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으로 선언해 재사용하는 것 또한 한 방법이다.

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

반응형