반응형
[Effective Java] 박스화 기본형보다는 기본형을 사용하자. |
-
기본형과 박스화 기본형 간에는 크게 세 가지 차이점이 있다.
1. 기본형은 자신의 값만을 갖는 반면, 박스화 기본형은 식별성(identity)를 갖는다.
두 개의 박스화 기본형이 값은 같지만 == 로 비교하면 다를 수 있다는 것이다.
2. 기본형은 완전한 기능 값만을 갖는 반면, 박스화 기본형은 자신과 대응되는 기본형이 가질 수 있는 모든 기능 값에 추가하여 비 기능 값인 null 을 갖는다.
3. 기본형은 일반적으로 박스화 기본형에 비해 실행 시간과 메모리 사용 효율이 좋다.
-
== 비교 연산자를 박스화 기본형에 적용하면 대부분 틀린 결과가 나온다.
박스화 기본형을 비교할 떄는 두 개의 지역 변수를 추가하여 primitive 타입으로 변환한 후 비교하는 것이다.
-
!! 거의 모든 경우에 기본형과 박스화 기본형을 하나의 연산에 섞어 놓으면, 박스화 기본형이 오토언박싱된다.
-
박스화 기본형이 합당하게 사용될 수 있는 경우
1. 컬렉션의 요소, 키, 값으로 사용되는 경우.
2. 매개 변수화 타입의 타입 매개변수.
3. 리플렉션을 이용하여 재귀적인 메소드 호출을 할 때. ( invoke 가 Object 를 return )
Summary
박스화 기본형보다는 기본형을 사용하자.
기본형이 더 간단하고 실행 속도도 빠르다.
만일 박스화 기본형을 사용해야 한다면 조심하자!
오토박싱은 박스화 기본형을 사용할 때 코드를 줄여준다.
프로그램에서 두 개의 박스화 기본형을 == 연산자로 비교하면, 값이 아닌 객체 참조를 비교하므로 거의 대부분 false 가 된다.
하나의 연산에 박스화 기본형과 기본형이 섞여있으면, 박스화 기본형의 값이 오토언박싱된다.
따라서 박스형 기본형의 인스턴스를 우리가 생성하고 초기화하지 않으면 언박싱 할 때 NullPointerException 이 발생할 수 있다.
기본형 값이 오토박싱 될 때는 불필요한 객체가 생성되고 비용도 많이 발생한다.
반응형
'프로그래밍 놀이터 > 디자인 패턴, 리펙토링' 카테고리의 다른 글
[Effective Java] 문자열 결합의 성능 저하를 주의하자. (0) | 2017.02.07 |
---|---|
[Effective Java] 다른 타입을 쓸 수 있는 곳에서는 String 사용을 피하자. (0) | 2017.02.06 |
[Effective Java] 정확한 계산에는 float 이나 double 타입을 쓰지 말자. (0) | 2017.01.31 |
[Effective Java] 라이브러리를 배우고 사용하자. (0) | 2017.01.30 |
[Effective Java] 종전의 for 루프보다는 for-each 루프를 사용하자. (0) | 2017.01.26 |
댓글