λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

빈 ꡬ멍 μ±„μš°κΈ°

[Java] μ›μ‹œ νƒ€μž…κ³Ό Wrapper ν΄λž˜μŠ€κ°€ μžˆλŠ” 이유

좜처

ChatGPT


μžλ°”μ—μ„œ μ›μ‹œ νƒ€μž…(primitive types)κ³Ό Wrapper ν΄λž˜μŠ€λŠ” μ„œλ‘œ λ‹€λ₯Έ 두 가지 νƒ€μž… μ‹œμŠ€ν…œμ„ μ œκ³΅ν•œλ‹€. μ›μ‹œ νƒ€μž…κ³Ό Wrapper ν΄λž˜μŠ€λŠ” μ„œλ‘œ 보완적이며, Wrapper ν΄λž˜μŠ€κ°€ μ‘΄μž¬ν•˜λŠ” μ΄μœ μ™€ κ·Έ ν•„μš”μ„±μ— λŒ€ν•΄ μ΄ν•΄ν•˜λŠ” 것이 μ€‘μš”ν•˜λ‹€.

 

1. μ›μ‹œ νƒ€μž… (Primitive Types)

μžλ°”μ—μ„œ μ›μ‹œ νƒ€μž…μ€ 기본적인 데이터 νƒ€μž…μœΌλ‘œ, λ‹€μŒκ³Ό 같은 8가지가 μžˆλ‹€:

  • byte
  • short
  • int
  • long
  • float
  • double
  • char
  • boolean

이듀은 λ©”λͺ¨λ¦¬μ™€ μ„±λŠ₯을 μ΅œμ ν™”ν•˜κΈ° μœ„ν•΄ μ„€κ³„λœ κΈ°λ³Έ 데이터 νƒ€μž…μ΄λ‹€. μ›μ‹œ νƒ€μž…μ€ κ°’λ§Œ μ €μž₯ν•˜λ©°, 객체의 λ©”μ„œλ“œλ‚˜ 속성을 κ°€μ§ˆ 수 μ—†λ‹€.

 

μ›μ‹œνƒ€μž…μ˜ 쑴재 이유 / μž₯점

1. μ„±λŠ₯κ³Ό λ©”λͺ¨λ¦¬ νš¨μœ¨μ„±

  • λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰: μ›μ‹œ νƒ€μž…μ€ 직접적인 κ°’ μ €μž₯ λ°©μ‹μœΌλ‘œ λ©”λͺ¨λ¦¬λ₯Ό 적게 μ‚¬μš©ν•œλ‹€. 예λ₯Ό λ“€μ–΄, int νƒ€μž…μ€ 4λ°”μ΄νŠΈλ§Œ μ‚¬μš©ν•˜μ—¬ μ •μˆ˜λ₯Ό μ €μž₯ν•©λ‹ˆλ‹€. 반면, Wrapper 클래슀 (Integer)λŠ” κ°μ²΄μ΄λ―€λ‘œ, 객체 헀더와 메타데이터λ₯Ό ν¬ν•¨ν•˜μ—¬ 더 λ§Žμ€ λ©”λͺ¨λ¦¬λ₯Ό μ°¨μ§€ν•œλ‹€.
  • μ„±λŠ₯: μ›μ‹œ νƒ€μž…μ˜ 연산은 μ§μ ‘μ μœΌλ‘œ CPU λͺ…λ Ήμ–΄λ‘œ μˆ˜ν–‰λ˜κΈ° λ•Œλ¬Έμ— λΉ λ₯΄λ‹€. 반면, Wrapper ν΄λž˜μŠ€λŠ” 객체λ₯Ό μƒμ„±ν•˜κ³  λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•˜λŠ” λ“± 좔가적인 μ˜€λ²„ν—€λ“œκ°€ λ°œμƒν•˜λ―€λ‘œ μ—°μ‚° 속도가 느릴 수 μžˆλ‹€.

2. κ°„λ‹¨ν•œ 데이터 처리

  • λ‹¨μˆœμ„±: μ›μ‹œ νƒ€μž…μ€ 데이터 처리 μ‹œ λ‹¨μˆœμ„±μ„ μ œκ³΅ν•œλ‹€. λ‹¨μˆœν•œ μ—°μ‚°μ΄λ‚˜ 비ꡐ μž‘μ—…μ„ μˆ˜ν–‰ν•  λ•Œ 객체 생성과 같은 λ³΅μž‘ν•œ 과정을 ν”Όν•  수 μžˆλ‹€.

3. 데이터 ꡬ쑰와 μ•Œκ³ λ¦¬μ¦˜

  • 고속 μ—°μ‚°: νŠΉμ • 데이터 κ΅¬μ‘°λ‚˜ μ•Œκ³ λ¦¬μ¦˜μ—μ„œλŠ” μ—°μ‚° 속도가 μ€‘μš”ν•œ κ²½μš°κ°€ μžˆλ‹€. μ›μ‹œ νƒ€μž…μ€ μ΄λŸ¬ν•œ μƒν™©μ—μ„œ μ΅œμ ν™”λœ μ„±λŠ₯을 μ œκ³΅ν•œλ‹€. 예λ₯Ό λ“€μ–΄, λ°°μ—΄μ˜ 경우 μ›μ‹œ νƒ€μž… λ°°μ—΄ (int[], char[] λ“±)은 객체 λ°°μ—΄ (Integer[], Character[])보닀 λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰κ³Ό μ„±λŠ₯ μΈ‘λ©΄μ—μ„œ νš¨μœ¨μ μ΄λ‹€.

2. Wrapper 클래슀 (Wrapper Classes)

Wrapper ν΄λž˜μŠ€λŠ” μ›μ‹œ νƒ€μž…μ„ 객체둜 λž˜ν•‘(wrapping)ν•˜λŠ” ν΄λž˜μŠ€μ΄λ‹€. μžλ°”μ—μ„œ μ œκ³΅ν•˜λŠ” Wrapper ν΄λž˜μŠ€λŠ” λ‹€μŒκ³Ό κ°™λ‹€:

  • Byte (for byte)
  • Short (for short)
  • Integer (for int)
  • Long (for long)
  • Float (for float)
  • Double (for double)
  • Character (for char)
  • Boolean (for boolean)

Wrapper ν΄λž˜μŠ€λŠ” μ›μ‹œ νƒ€μž…μ˜ 값을 객체둜 λ³€ν™˜ν•˜μ—¬ λ‹€μ–‘ν•œ κΈ°λŠ₯을 μ œκ³΅ν•œλ‹€.

 

Wrapper  클래의 쑴재 이유 / μž₯점

1. 객체와 κ΄€λ ¨λœ κΈ°λŠ₯ 제곡

Wrapper ν΄λž˜μŠ€λŠ” μ›μ‹œ νƒ€μž… 값을 객체둜 λ³€ν™˜ν•  수 있게 ν•΄μ£Όλ©°, 이λ₯Ό 톡해 λ‹€μŒκ³Ό 같은 κΈ°λŠ₯을 μ œκ³΅ν•œλ‹€:

  • λ©”μ„œλ“œ 호좜: κ°μ²΄λ‘œμ„œ λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•  수 μžˆλ‹€. 예λ₯Ό λ“€μ–΄, Integer 클래슀의 parseInt() λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•  수 μžˆλ‹€.
  • κΈ°λ³Έ 데이터 νƒ€μž…μ— λŒ€ν•œ μΆ”κ°€ κΈ°λŠ₯: 숫자λ₯Ό λ¬Έμžμ—΄λ‘œ λ³€ν™˜ν•˜κ±°λ‚˜, νŠΉμ • 숫자의 λ²”μœ„λ‚˜ λΉ„νŠΈλ₯Ό κ²€μ‚¬ν•˜λŠ” κΈ°λŠ₯ 등을 μ œκ³΅ν•œλ‹€.

2. μ»¬λ ‰μ…˜ ν”„λ ˆμž„μ›Œν¬μ™€μ˜ ν˜Έν™˜μ„±

μžλ°” μ»¬λ ‰μ…˜ ν”„λ ˆμž„μ›Œν¬λŠ” κ°μ²΄λ§Œμ„ μ €μž₯ν•  수 있기 λ•Œλ¬Έμ—, μ›μ‹œ νƒ€μž…μ„ μ‚¬μš©ν•  수 μ—†λ‹€. λ”°λΌμ„œ, ArrayList<Integer>와 같은 μ»¬λ ‰μ…˜μ— μ›μ‹œ νƒ€μž…μ„ μ €μž₯ν•˜λ €λ©΄ ν•΄λ‹Ή νƒ€μž…μ˜ Wrapper 클래슀λ₯Ό μ‚¬μš©ν•΄μ•Ό ν•œλ‹€.

3. μžλ™ λ°•μ‹±(Autoboxing)κ³Ό μžλ™ μ–Έλ°•μ‹±(Unboxing)

μžλ°” 5λΆ€ν„° λ„μž…λœ μžλ™ λ°•μ‹±κ³Ό μžλ™ μ–Έλ°•μ‹± κΈ°λŠ₯은 μ›μ‹œ νƒ€μž…κ³Ό Wrapper 클래슀 κ°„μ˜ λ³€ν™˜μ„ μžλ™μœΌλ‘œ μˆ˜ν–‰ν•΄μ€€λ‹€:

  • μžλ™ λ°•μ‹±: μ›μ‹œ νƒ€μž…μ„ μžλ™μœΌλ‘œ ν•΄λ‹Ή Wrapper 클래슀둜 λ³€ν™˜ν•œλ‹€.
  • μžλ™ μ–Έλ°•μ‹±: Wrapper 클래슀λ₯Ό μ›μ‹œ νƒ€μž…μœΌλ‘œ μžλ™ λ³€ν™˜λ‹€.

예

Integer intObject = 10; // μžλ™ λ°•μ‹±
int intValue = intObject; // μžλ™ μ–Έλ°•μ‹±

 

3.4. λΆˆλ³€μ„± (Immutability)

Wrapper ν΄λž˜μŠ€λŠ” λΆˆλ³€ 객체(immutable objects)둜 μ„€κ³„λ˜μ–΄ μžˆλ‹€. 즉, ν•œλ²ˆ μƒμ„±λœ Wrapper 객체의 값은 변경될 수 μ—†λ‹€. μ΄λŠ” λ°μ΄ν„°μ˜ 무결성을 μœ μ§€ν•˜κ³ , λ©€ν‹°μŠ€λ ˆλ”© ν™˜κ²½μ—μ„œμ˜ μ•ˆμ „μ„±μ„ 보μž₯ν•˜λŠ” 데 도움을 μ€€λ‹€.

3.5. 기타 μœ ν‹Έλ¦¬ν‹° λ©”μ„œλ“œ

Wrapper ν΄λž˜μŠ€λŠ” μœ μš©ν•œ μœ ν‹Έλ¦¬ν‹° λ©”μ„œλ“œλ₯Ό μ œκ³΅ν•œλ‹€.

  • Integer.parseInt(String s): λ¬Έμžμ—΄μ„ μ •μˆ˜λ‘œ λ³€ν™˜ν•œλ‹€.
  • Double.toString(double d): double 값을 λ¬Έμžμ—΄λ‘œ λ³€ν™˜ν•œλ‹€.
  • Character.isDigit(char ch): λ¬Έμžκ°€ μˆ«μžμΈμ§€ κ²€μ‚¬ν•œλ‹€.

 


ChatGPT의 좜처

μ œκ°€ μ œκ³΅ν•œ μžλ°”μ˜ μ›μ‹œ νƒ€μž…κ³Ό Wrapper ν΄λž˜μŠ€μ— λŒ€ν•œ μ„€λͺ…은 μžλ°” ν”„λ‘œκ·Έλž˜λ°μ— λŒ€ν•œ 기본적인 지식과 μžλ°” 곡식 λ¬Έμ„œ, ꡐ윑 자료λ₯Ό λ°”νƒ•μœΌλ‘œ μž‘μ„±λ˜μ—ˆμŠ΅λ‹ˆλ‹€. λ‹€μŒμ€ κ΄€λ ¨λœ μžλ£Œμ™€ μ°Έκ³ ν•  수 μžˆλŠ” μΆœμ²˜μž…λ‹ˆλ‹€:

  1. μžλ°” 곡식 λ¬Έμ„œ
    • Java Language Specification (JLS): μžλ°” μ–Έμ–΄ μ‚¬μ–‘μ—μ„œ μ›μ‹œ νƒ€μž…κ³Ό Wrapper 클래슀의 μ •μ˜μ™€ λ™μž‘μ— λŒ€ν•΄ 닀루고 μžˆμŠ΅λ‹ˆλ‹€.
    • Java Language Specification (JLS)
  2. μžλ°” 곡식 νŠœν† λ¦¬μ–Ό
    • Oracle Java Tutorials: μžλ°”μ˜ κΈ°λ³Έ 데이터 νƒ€μž…κ³Ό Wrapper ν΄λž˜μŠ€μ— λŒ€ν•œ μ„€λͺ…이 ν¬ν•¨λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.
    • Oracle Java Tutorials - Autoboxing and Unboxing
  3. μ±…
    • "Effective Java" by Joshua Bloch: μžλ°”μ˜ μ›μ‹œ νƒ€μž…, Wrapper 클래슀, 및 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ˜ κ°œλ…μ„ μ„€λͺ…ν•©λ‹ˆλ‹€. μžλ°” ν”„λ‘œκ·Έλž˜λ°μ˜ λͺ¨λ²” 사둀λ₯Ό 닀루고 μžˆμŠ΅λ‹ˆλ‹€.
    • "Java: The Complete Reference" by Herbert Schildt: μžλ°”μ˜ κΈ°λ³ΈλΆ€ν„° κ³ κΈ‰ κ°œλ…κΉŒμ§€ ν­λ„“κ²Œ 닀루며, μ›μ‹œ νƒ€μž…κ³Ό Wrapper 클래슀의 μš©λ„μ™€ 차이λ₯Ό μ„€λͺ…ν•©λ‹ˆλ‹€.
  4. 온라인 자료
    • Baeldung: μžλ°” ν”„λ‘œκ·Έλž˜λ° κ΄€λ ¨ λ‹€μ–‘ν•œ νŠœν† λ¦¬μ–Όκ³Ό κ°€μ΄λ“œλ₯Ό μ œκ³΅ν•˜λ©°, μ›μ‹œ νƒ€μž…κ³Ό Wrapper ν΄λž˜μŠ€μ— κ΄€ν•œ λ‚΄μš©μ„ λ‹€λ£Ήλ‹ˆλ‹€.
    • Baeldung - Java Primitive Types vs Wrapper Classes
  5. μžλ°” API λ¬Έμ„œ
    • Java SE API Documentation: java.lang νŒ¨ν‚€μ§€μ— μžˆλŠ” Wrapper ν΄λž˜μŠ€μ— λŒ€ν•œ μžμ„Έν•œ μ„€λͺ…을 μ œκ³΅ν•©λ‹ˆλ‹€.
    • Java SE API Documentation - Wrapper Classes

이 μžλ£Œλ“€μ€ μžλ°”μ˜ μ›μ‹œ νƒ€μž…κ³Ό Wrapper 클래슀의 κ°œλ…, κΈ°λŠ₯, 그리고 μ‚¬μš© 사둀에 λŒ€ν•œ μ‹ λ’°ν•  수 μžˆλŠ” 정보λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.