본문 바로가기
프로그래밍 놀이터/디자인 패턴, 리펙토링

[Effective Java] 박스화 기본형보다는 기본형을 사용하자.

by 돼지왕 왕돼지 2017. 2. 2.
반응형

 [Effective Java] 박스화 기본형보다는 기본형을 사용하자.


==, ==false, autoboxing, Box, collection, Effective JAVA, identity, Invoke, Key, NPE, NullPointerException, object, Primitive, Primitive type, Value, [Effective Java] 박스화 기본형보다는 기본형을 사용하자., 값, 기능, 기본형, 리플렉션, 매개 변수화, 매개변수, 매개변수화 타입, 메모리 사용 효율, 박스화, 박스화 기본형, 변수화, 비 기능 값, 비교, 식별성, 실행 속도, 실행 시간, 언박싱, 연산, 오토박싱, 오토언박싱, 요소, 재귀 메소드 호출, 조심, 차이점, 추가, 컬렉션 요소, 코드, 키


-
기본형과 박스화 기본형 간에는 크게 세 가지 차이점이 있다.
    1. 기본형은 자신의 값만을 갖는 반면, 박스화 기본형은 식별성(identity)를 갖는다.
두 개의 박스화 기본형이 값은 같지만 == 로 비교하면 다를 수 있다는 것이다.
    2. 기본형은 완전한 기능 값만을 갖는 반면, 박스화 기본형은 자신과 대응되는 기본형이 가질 수 있는 모든 기능 값에 추가하여 비 기능 값인 null 을 갖는다.
    3. 기본형은 일반적으로 박스화 기본형에 비해 실행 시간과 메모리 사용 효율이 좋다.


-
== 비교 연산자를 박스화 기본형에 적용하면 대부분 틀린 결과가 나온다.
박스화 기본형을 비교할 떄는 두 개의 지역 변수를 추가하여 primitive 타입으로 변환한 후 비교하는 것이다.


-
!! 거의 모든 경우에 기본형과 박스화 기본형을 하나의 연산에 섞어 놓으면, 박스화 기본형이 오토언박싱된다.


-
박스화 기본형이 합당하게 사용될 수 있는 경우
    1. 컬렉션의 요소, 키, 값으로 사용되는 경우.
    2. 매개 변수화 타입의 타입 매개변수.
    3. 리플렉션을 이용하여 재귀적인 메소드 호출을 할 때. ( invoke 가 Object 를 return )



Summary


박스화 기본형보다는 기본형을 사용하자.
기본형이 더 간단하고 실행 속도도 빠르다.
만일 박스화 기본형을 사용해야 한다면 조심하자!
오토박싱은 박스화 기본형을 사용할 때 코드를 줄여준다.
프로그램에서 두 개의 박스화 기본형을 == 연산자로 비교하면, 값이 아닌 객체 참조를 비교하므로 거의 대부분 false 가 된다.
하나의 연산에 박스화 기본형과 기본형이 섞여있으면, 박스화 기본형의 값이 오토언박싱된다.
따라서 박스형 기본형의 인스턴스를 우리가 생성하고 초기화하지 않으면 언박싱 할 때 NullPointerException 이 발생할 수 있다.
기본형 값이 오토박싱 될 때는 불필요한 객체가 생성되고 비용도 많이 발생한다.





반응형

댓글