기본 유형보다 래퍼 클래스를 사용해야 할 때가 있습니까? 또는 어떤 상황에서 래퍼 / 프리미티브 유형 중에서 선택해야합니까?
답변
다른 사람들은 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
유형 변수 가있는 서비스 클래스를 만들었습니다.
- 변수가 유형 인 경우
long
-초기화되지 않은 경우 0으로 설정됩니다. 이는 GUI에 표시 될 때 사용자에게 혼동을 줄 것입니다. - 변수 유형이
Long
초기화되지 않은 경우 다음 으로 설정됩니다null
.이 null 값은 GUI에 표시되지 않습니다.
이것은 기본 값을 Boolean
사용할 때 값이 더 혼란 스러울 수있는 경우 에도 적용됩니다 boolean
(기본값은 false이므로).
답변
컬렉션은 단순한 Java 래퍼 개체의 일반적인 경우입니다. 그러나 코드 (값 개체)에서 래퍼에보다 구체적인 의미를 부여하는 것을 고려할 수 있습니다.
IMHO는 코드의 가독성과 유지 관리로 귀결 될 때 값 객체를 사용하는 데 거의 항상 이점이 있습니다. 특정 책임이있는 객체 내부에 간단한 데이터 구조를 래핑하면 코드가 단순화되는 경우가 많습니다. 이것은 Domain-Driven Design 에서 매우 중요한 것입니다 .
물론 성능 문제가 있지만 적절한 데이터로 성능을 측정하고 문제 영역에 대한보다 직접적인 조치를 취할 수있을 때까지이를 무시하는 경향이 있습니다. 코드도 이해하기 쉬운 경우 성능 문제를 이해하는 것이 더 쉬울 수도 있습니다.
답변
수치 계산이 지배하는 응용 프로그램의 성능 은 프리미티브를 사용하여 큰 이점을 얻을 수 있습니다.
기본 유형 에서는 == 연산자를 사용하지만 래퍼의 경우 선호되는 선택은 equals () 메서드를 호출하는 것입니다.
“유해한 것으로 간주되는 원시 유형 “은 “절차 적 의미를 통일 된 객체 지향 모델로 혼합하기 때문입니다.”
많은 프로그래머가이를 나타 내기 위해 숫자를 0 (기본값) 또는 -1로 초기화하지만 시나리오에 따라 잘못되거나 오해의 소지가있을 수 있습니다.