source

래퍼 클래스 및 프리미티브 유형을 사용해야 하는 경우

gigabyte 2022. 11. 18. 21:27
반응형

래퍼 클래스 및 프리미티브 유형을 사용해야 하는 경우

원시 유형보다 래퍼 클래스를 선택해야 할 때는 언제입니까?아니면 어떤 상황에서 래퍼 타입과 프리미티브 타입 중 하나를 선택해야 합니까?

사람들은 '보다하다'와 같은 특정한 되어 있다.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로 초기화된 상태로 유지할 수 있습니다.이로 인해 Null Pointer가 발생할 수 있습니다.예외이지만 SSN 필드를 초기화하지 않고 SSN을 사용하려고 할 때마다 데이터베이스에 SSN으로 기본값(0)을 무의식적으로 삽입하는 것보다는 낫습니다.

꼭 필요한 경우에만 포장지 타입을 사용하겠습니다.

득이 되지 .Objects.

또, 메모리 사용량과 박스/언박스에 소비하는 시간의 오버헤드가 없어집니다.

실제로 래퍼 클래스의 사용법을 설명할 수 있는 상황이 있었습니다.

서비스 클래스를 만들었습니다.long variable 형 type

  1. 가 유형인 long않은 GUI에 되는 경우 스러워집니다.GUI gui gui 、 [ GUI ] 。
  2. 가 유형인 Long- 초기화되지 않은 경우 다음과 같이 설정됩니다.null이 값은 되지 않습니다 GUI에 표시되지 않습니다.

이것은 에 적용됩니다.Boolean 원시적인 것을 사용할 이 더 스러울 수 .boolean거짓

컬렉션은 단순한 Java 래퍼 객체의 일반적인 경우입니다.그러나 코드(값 개체)에서 Wrapper에 좀 더 구체적인 의미를 부여하는 것이 좋습니다.

IMHO는 코드의 가독성과 유지보수로 요약될 때 가치 객체를 사용하는 것이 거의 항상 이점이 있습니다.오브젝트가 특정 책임을 지고 있을 때 오브젝트 내부에 단순한 데이터 구조를 랩핑하면 코드가 단순해지는 경우가 많습니다.이것은 도메인 중심 설계에서 매우 중요한 것입니다.

물론 성능 문제도 있지만, 적절한 데이터로 성능을 측정하고 문제가 있는 부분에 대해 더 지시적인 조치를 취할 수 있을 때까지 무시하는 경향이 있습니다.코드도 알기 쉬우면 퍼포먼스 문제도 이해하기 쉬워질 수 있습니다.

수치 계산에 의해 지배되는 애플리케이션의 성능은 원시 요소의 사용으로 큰 이점을 얻을 수 있습니다.

원시 유형은 == 연산자를 사용하지만 래퍼의 경우 equal() 메서드를 호출하는 것이 선호됩니다.

"primitive types"는 "procedure semantics"를 다른 균일한 객체 지향 모델에 혼합하기 때문에 "primitive types"는 유해하다고 간주됩니다.

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

컬렉션을 사용하려면 래퍼 클래스를 사용해야 합니다.

기본 유형은 배열에 사용됩니다.또한 카운터 또는 부울 조건과 같이 동작이 없는 데이터를 나타냅니다.

오토박싱 이후 "원시적 또는 래퍼 사용 시기" 프런티어는 상당히 모호해졌다.

그러나 Wrapper는 객체이기 때문에 멋진 Java 기능을 모두 사용할 수 있습니다.예를 들어 리플렉션을 사용하여 Integer 객체를 작성할 수 있지만 int 값은 작성할 수 없습니다.래퍼 클래스에는 valueOf 등의 메서드도 있습니다.

값 유형을 생성하는 경우.제품 같은 것SKU 또는 공항 코드.

기본 유형(이 예에서는 문자열)이 평등을 정의하는 경우 평등을 재정의해야 합니다.

Java의 원시 값은 객체가 아닙니다.이러한 값을 오브젝트로 조작하기 위해 java.lang 패키지는 각 원시 데이터 유형의 래퍼 클래스를 제공합니다.

모든 래퍼 클래스는 최종입니다.시작할 수 있는 모든 래퍼 클래스의 개체는 불변이며, 이는 래퍼 개체의 값을 변경할 수 없음을 의미합니다.

, void 클래스는 래퍼 클래스로 간주되지만 원시 값은 랩되지 않으며 시작할 수 없습니다.퍼블릭 컨스트럭터를 가지고 있지 않고 키워드 void를 나타내는 클래스 오브젝트를 나타냅니다.

프리미티브 타입을 사용하는 경우

  • 많은 양의 계산을 수행할 경우 원시 유형이 항상 더 빠릅니다. 즉, 오버헤드가 훨씬 적습니다.
  • 변수가 null이 될 수 없는 경우.
  • 기본값을 null로 하지 않는 경우.
  • 메서드가 값을 반환해야 하는 경우

래퍼 클래스를 사용하는 경우

  • Collections 또는 Generics를 사용하는 경우 - 필수
  • 유형의 MIN_SIZE 또는 MAX_SIZE를 원하는 경우.
  • 변수를 null로 할 수 있는 경우.
  • 기본값을 null로 하는 경우.
  • 경우에 따라서는 메서드가 null 값을 반환할 수 있습니다.

from https://medium.com/ @bpnorlander / https://medium.com/ - understand - understand - understand - types - and-time - a6798fb2afe 9

언급URL : https://stackoverflow.com/questions/1570416/when-to-use-wrapper-class-and-primitive-type

반응형