티스토리 뷰
똑같은 기능의 객체를 매번 생성하기보다는 객체하나를 재사용하는 편이 나을 때가 많다. 재사용은 빠르고 세련되다. 특히 불변 객체는 언제든 재사용할 수 있다.
불변 객체
객체 내부의 변수값을 변경할 수 없는 객체
아래 코드를 보자.
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으로 선언해 재사용하는 것 또한 한 방법이다.
또한 박싱된 기본 타입보다는 기본 타입을 사용하고 의도치 않은 오토박싱이 숨어들지 않도록 주의하자.
'Essential Language Skill > Effective Java' 카테고리의 다른 글
Item 9. try-finally보다는 try-with-resource를 사용하라 (0) | 2019.12.08 |
---|---|
Item 7. 다 쓴 객체 참조를 해제하라 (0) | 2019.12.08 |
Item 5. 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라 (0) | 2019.12.05 |
Item 4. 인스턴스화를 막으려거든 private 생성자를 사용하라 (0) | 2019.12.05 |
Item 3. private 생성자나 열거 타입으로 싱글턴임을 보증하라 (0) | 2019.12.05 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- JVM
- 자바 메모리 구조
- POD
- kubernetes
- Java Memory Structure
- JMM
- Replication Controller
- k8s
- Delete
- Effective Java
- Java
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함