일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- ioc컨테이너
- method refetence
- jpa no session
- spring formatter
- 자바 필터
- java predicate
- jpa lazy
- 도커 이미지 빌드
- 기능적 요구사항
- 스프링di
- 생성자주입
- 정적팩토리메서드
- 그래프큐엘
- 스프링 시큐리티 설정
- Atomicity
- 스프링 포매터
- 스프링부트 도커
- 스프링
- 스프링시큐리티
- fetch join
- kotlin 리팩터링
- Spring
- IOC
- open-session-in-view
- 토비의 스프링
- 수정자주입
- kotlin ::
- 비기능적 요구사항
- 소프트웨어의 품격
- 동적파라미터
Archives
- Today
- Total
공부기록
아이템6. 불필요한 객체 생성을 피하라. 본문
반응형
불필요한 객체 생성을 피하라
똑같은 기능의 객체를 매번 생성하기보다는 객체하나를 재사용하는 편이 낫다.
특히 불변 객체는 언제든 재사용할 수 있다.
대표적인 안티패턴
String str = new String("string");
- 실행될 때마다 새로운 String 인스턴스를 생성한다. 이 문장이 반복문 안이나 자주 호출되는 메소드 안에 있다면 쓸데없는 낭비다.
개선된 버전
String str = "string"
- 이 코드는 하나의 String 인스턴스를 사용한다.
- 자바스펙에 따르면 이와 똑같은 문자열 리터럴을 사용하는 모든 코드는 같은 객체를 재사용함을 보장한다.
- 생성자는 호출할 때마다 새로운 인스턴스를 만들지만, 아이템1에 나온 정적팩터리 메서드를 제공하는 불변클래스에서는 불필요한 객체 생성을 피할 수 있다.
Boolean(String) -> Boolean.valueOf(String)
오토박싱
private static long sum() { Long sum = 0L; for(long i =0; i <= Integer.MAX_VALUE; i++) { sum += i; } return sum; }
- long인 i가 Long타입인 sum에 더해질 때마다 새로운 Long타입의 인스턴스가 만들어진다.
- 기본형을 사용하자.
정리
- 재사용을 추천하지만, 위험할 수 있다. 다른 곳에서 참조해서 사용하고 있을 수도 있기 떄문. 따라서 불변객체라면 재사용에 안전하지만, 그게 아니라면 위험할 수도있으니 조심해서 사용해야한다.
반응형
'JAVA' 카테고리의 다른 글
아이템9. try-finally보다는 try-with-resources를 사용하라. (0) | 2019.11.29 |
---|---|
아이템7. 다 쓴 객체 참조를 해제하라 (0) | 2019.11.29 |
아이템5. 자원을 직접 명시하지 말고 의존객체주입을 사용하라. (0) | 2019.11.27 |
아이템4. 인스턴스화를 막으려거든 private 생성자를 사용하라. (0) | 2019.11.26 |
아이템3. private생성자나 열거타입으로 싱글턴임을 보증하라 (0) | 2019.11.26 |