[java] 래퍼 클래스 및 기본 유형을 사용하는 경우

기본 유형보다 래퍼 클래스를 사용해야 할 때가 있습니까? 또는 어떤 상황에서 래퍼 / 프리미티브 유형 중에서 선택해야합니까?



답변

다른 사람들은 Collections객체가 필요하고 객체가 원시 대응 물 (메모리 및 권투)보다 오버 헤드가 더 많다는 것과 같은 특정 구조를 언급했습니다 .

또 다른 고려 사항은 다음과 같습니다.

객체를 초기화 null하거나 null메서드 / 생성자에 매개 변수를 보내 상태 또는 기능을 나타내는 것이 편리 할 수 ​​있습니다 . 이것은 프리미티브로는 할 수 없습니다.

많은 프로그래머가이를 나타 내기 위해 숫자를 0 (기본값) 또는 -1로 초기화하지만 시나리오에 따라 잘못되거나 오해의 소지가있을 수 있습니다.

이것은 또한 NullPointerException무언가가 잘못 사용되는 경우에 대한 장면을 설정합니다. 이것은 임의의 버그보다 훨씬 더 프로그래머 친화적입니다.


답변

일반적으로 (컬렉션에 넣는 등) 어떤 이유로 객체 가 필요 하지 않으면 기본 유형을 사용해야합니다 . 그럼에도 불구하고 수치 성능을 극대화하려면 객체가 필요하지 않은 다른 접근 방식을 고려하십시오. 이는 문서 에서 권장하며이 문서 는 자동 박싱이 어떻게 큰 성능 차이를 유발할 수 있는지 보여줍니다.


답변

내 생각에 클래스 멤버가 래퍼 변수이면 개발자 친화적 인 동작 인 기본값에 의존하지 않습니다.

1.

class Person {
   int SSN ; // gets initialized to zero by default 
}

2.

class PersonBetter {
  Integer SSN; //gets initialized to null by default
}

첫 번째 경우에는 SSN 값을 초기화하지 않은 상태로 유지할 수 없습니다. 사용하기 전에 값이 설정되었는지 확인하지 않으면 손상 될 수 있습니다.

두 번째 경우에는 SSN을 null로 초기화 할 수 있습니다. NullPointerException이 발생할 수 있지만 SSN 필드를 초기화하지 않고 사용하려고 할 때마다 무의식적으로 기본값 (0)을 SSN으로 데이터베이스에 삽입하는 것보다 낫습니다.


답변

필요한 경우에만 래퍼 유형을 사용합니다.

그것들을 사용함으로써 당신은 그들이 있다는 사실 외에 많은 것을 얻지 못합니다 Objects.

또한 메모리 사용량과 boxing / unboxing에 소요되는 시간의 오버 헤드를 잃게됩니다.


답변

실제로 나는 래퍼 클래스의 사용을 설명 할 수있는 상황에 직면했습니다.

long유형 변수 가있는 서비스 클래스를 만들었습니다.

  1. 변수가 유형 인 경우 long-초기화되지 않은 경우 0으로 설정됩니다. 이는 GUI에 표시 될 때 사용자에게 혼동을 줄 것입니다.
  2. 변수 유형이 Long초기화되지 않은 경우 다음 으로 설정됩니다 null.이 null 값은 GUI에 표시되지 않습니다.

이것은 기본 값을 Boolean사용할 때 값이 더 혼란 스러울 수있는 경우 에도 적용됩니다 boolean(기본값은 false이므로).


답변

컬렉션은 단순한 Java 래퍼 개체의 일반적인 경우입니다. 그러나 코드 (값 개체)에서 래퍼에보다 구체적인 의미를 부여하는 것을 고려할 수 있습니다.

IMHO는 코드의 가독성과 유지 관리로 귀결 될 때 값 객체를 사용하는 데 거의 항상 이점이 있습니다. 특정 책임이있는 객체 내부에 간단한 데이터 구조를 래핑하면 코드가 단순화되는 경우가 많습니다. 이것은 Domain-Driven Design 에서 매우 중요한 것입니다 .

물론 성능 문제가 있지만 적절한 데이터로 성능을 측정하고 문제 영역에 대한보다 직접적인 조치를 취할 수있을 때까지이를 무시하는 경향이 있습니다. 코드도 이해하기 쉬운 경우 성능 문제를 이해하는 것이 더 쉬울 수도 있습니다.


답변

수치 계산이 지배하는 응용 프로그램의 성능 은 프리미티브를 사용하여 큰 이점을 얻을 수 있습니다.

기본 유형 에서는 == 연산자를 사용하지만 래퍼의 경우 선호되는 선택은 equals () 메서드를 호출하는 것입니다.

“유해한 것으로 간주되는 원시 유형 “은 “절차 적 의미를 통일 된 객체 지향 모델로 혼합하기 때문입니다.”

많은 프로그래머가이를 나타 내기 위해 숫자를 0 (기본값) 또는 -1로 초기화하지만 시나리오에 따라 잘못되거나 오해의 소지가있을 수 있습니다.