2 λΆ„ μ†Œμš”

μžλ°”μ—μ„œμ˜ μžλ£Œν˜•μ΄λž€?

μžλ£Œν˜•μ΄λž€ 데이터 νƒ€μž…(type)을 μ˜λ―Έν•˜λ©°, ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ—μ„œλŠ” μ—¬λŸ¬ μ’…λ₯˜μ˜ 데이터λ₯Ό μ‹λ³„ν•˜λŠ” λΆ„λ₯˜λ₯Ό μ˜λ―Έν•œλ‹€. μžλ°”μ—μ„œ μ œκ³΅ν•˜λŠ” μžλ£Œν˜•μ€ 크게 2κ°€μ§€λ‘œ λΆ„λ₯˜ν•  수 μžˆλ‹€.

1. κΈ°λ³Έ μžλ£Œν˜•

μ‹€μ œ κ°’ λ§Œμ„ μ €μž₯ν•˜λŠ” κ³΅κ°„μœΌλ‘œ μŠ€νƒ λ©”λͺ¨λ¦¬ μ˜μ—­μ— μ €μž₯λ©λ‹ˆλ‹€.
기본값이 있기 λ•Œλ¬Έμ— Null이 쑴재 ν•˜μ§€ μ•Šκ³  λ§Œμ•½ κΈ°λ³Έν˜• νƒ€μž…μ— Null을 λ„£κ³  μ‹Άλ‹€λ©΄ 래퍼 클래슀λ₯Ό ν™œμš©ν•©λ‹ˆλ‹€.

  νƒ€μž… ν• λ‹Ήλ˜λŠ” λ©”λͺ¨λ¦¬ 크기 κΈ°λ³Έκ°’
λ…Όλ¦¬ν˜• boolean 1 byte false
μ •μˆ˜ν˜• byte 1 byte 0
short 2 byte 0
int 4 byte 0
long 8 byte 0L
μ‹€μˆ˜ν˜• float 4 byte 0.0F
double 8 byte 0.0
λ¬Έμžν˜• char 2 byte '\u0000'

2. μ°Έμ‘°ν˜• μžλ£Œν˜•

μŠ€νƒμ— μ €μž₯λ˜μ–΄ μžˆλŠ” μ‹€μ œ κ°’μ˜ μ£Όμ†Œλ₯Ό μ €μž₯ν•˜λŠ” 곳으둜 νž™ λ©”λͺ¨λ¦¬ μ˜μ—­μ— μ €μž₯λ©λ‹ˆλ‹€.

  μ˜ˆμ‹œ κΈ°λ³Έκ°’ ν• λ‹Ήλ˜λŠ” λ©”λͺ¨λ¦¬ 크기
λ°°μ—΄(Array) new λ₯Ό μ‚¬μš©ν•΄ μƒμ„±λœ 객체 Null 4 byte (객체의 μ£Όμ†Œκ°’ != μ‹€μ œ κ°’μ˜ μ£Όμ†Œκ°’μ΄ μ•„λ‹Œ 객체 μžμ²΄μ— λŒ€ν•œ μ£Όμ†Œκ°’)
μ—΄κ±°(Enum)
클래슀(Class)
μΈν„°νŽ˜μ΄μŠ€(Interface)


wrapper ν΄λž˜μŠ€λž€?

κΈ°λ³Έ μžλ£Œν˜•μ„ μ°Έμ‘°ν˜• μžλ£Œν˜•μ²˜λŸΌ μ‚¬μš©ν•˜κΈ° μœ„ν•œ ν΄λž˜μŠ€μ΄λ‹€.
μ΄λ¦„μ—μ„œλ„ μ•Œ 수 μžˆλ“―, wrapper ν΄λž˜μŠ€λŠ” κ°μ‹ΈλŠ” ν΄λž˜μŠ€μ΄λ‹€.
그럼 무엇을 κ°μ‹ΈλŠ”κ°€? 에 λŒ€ν•œ 닡은 κΈ°λ³Έ μžλ£Œν˜•μ΄λ‹€.
즉, κΈ°λ³Έ μžλ£Œν˜•μ˜ 값을 감싸 κ°μ²΄ν˜•νƒœλ‘œ λ§Œλ“  것이 λ°”λ‘œ wrapper ν΄λž˜μŠ€μ΄λ‹€.
wrapper 클래슀의 경우 string κ³Ό 같이 λΆˆλ³€μ„±μ„ κ°–κ³  μžˆλ‹€. λ”°λΌμ„œ wrapper 클래슀 μ•ˆμ— 객체의 값은 λ³€κ²½ λΆˆκ°€λŠ₯ν•˜λ‹€.

κΈ°λ³Έ μžλ£Œν˜• Wrapper Class
int Integer
byte Byte
char Charcter
double Double
float Float
long Long
short Short

wrapper 클래슀 μ‚¬μš©ν•˜λŠ” 이유

wrapper 클래슀λ₯Ό μ‚¬μš©ν•˜λŠ” μ΄μœ λŠ” μ°Έμ‘°ν˜• μžλ£Œν˜•μ„ μ‚¬μš©ν•˜λŠ” μ΄μœ μ™€ κ°™λ‹€.
κΈ°λ³Έ μžλ£Œν˜•μ˜ 값을 λ‹¨μˆœνžˆ κ°’μœΌλ‘œλ§Œ μ‚¬μš©ν•˜μ§€ μ•Šκ³  κ·Έ 값에 λŒ€ν•œ λ©”μ„œλ“œλ₯Ό μ‚¬μš© ν˜Ήμ€ null값을 μ΄μš©ν•˜κΈ° μœ„ν•΄ μ‚¬μš©λœλ‹€.
ν•˜μ§€λ§Œ μš°λ¦¬κ°€ wrapper 클래슀λ₯Ό ν”νžˆ μ‚¬μš©ν•˜λŠ” μ΄μœ λŠ” λ°‘μ˜ 두가지 이유일 것이닀.

1. Generics νƒ€μž…μ— κΈ°λ³Έ μžλ£Œν˜•μ€ μ‚¬μš©ν•  수 μ—†λ‹€.

// List<int> list = new ArrayList<>();  // Error! intν˜•κ³Ό 같은 κΈ°λ³Έν˜•μ€ Generics νƒ€μž…μ— μ‚¬μš©λΆˆκ°€
List<Integer> list = new ArrayList<>();

// Set<char> set = new HashSet<>();  // Error! charν˜• Genericsνƒ€μž…μ— μ‚¬μš©λΆˆκ°€
Set<Character> set = new HashSet<>();

// Map<String, int> map = new HashMap<>(); // Error! intν˜• μ‚¬μš©λΆˆκ°€
Map<String, Integer> map = new HashMap<>();

2. ν˜•λ³€ν™˜

wrapper 클래슀λ₯Ό μ‚¬μš©ν•˜λ©΄ μ‰½κ²Œ ν˜•λ³€ν™˜μ΄ κ°€λŠ₯ν•˜λ‹€.

Integer i = 12;
String str;
str = i.toString(); // 12λΌλŠ” 숫자λ₯Ό λ¬Έμžμ—΄ "12"둜 λ°˜ν™˜
int primaryInt = Integer.parseInt(str); // Integer클래슀 μ•ˆμ— μžˆλŠ” λ¬Έμžμ—΄ λ³€ν™˜ ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•΄ λ¬Έμžμ—΄μ„ μ •μˆ˜λ‘œ λ°”κΎΈλŠ” λͺ¨μŠ΅

λ°•μ‹±(Boxing)κ³Ό μ–Έλ°•μ‹±(UnBoxing)

  • λ°•μ‹±(Boxing) : κΈ°λ³Έν˜• 데이터 νƒ€μž…(primitive type) ➑️ 래퍼 클래슀(wrapper class)의 μΈμŠ€ν„΄μŠ€λ‘œ λ³€ν™˜
  • μ–Έλ°•μ‹±(Un-Boxing) : 래퍼 클래슀(wrapper class) ➑️ κΈ°λ³Έν˜• νƒ€μž…(primitive type)으둜 λ³€ν™˜
  • μ˜€ν† λ°•μ‹±(Auto Boxing) : μžλ°” μ»΄νŒŒμΌλŸ¬κ°€ primitive ➑️ wrapper class 둜 μžλ™ λ³€ν™˜
  • μ˜€ν† μ–Έλ°•μ‹±(Auto Un-Boxing) : μžλ°” μ»΄νŒŒμΌλŸ¬κ°€ wrapper class ➑️ primitve 둜 μžλ™ λ³€ν™˜

    • μ˜€ν†  λ°•μ‹±, μ˜€ν†  μ–Έλ°•μ‹± ➑️ Java5λΆ€ν„°

      List<Integer> list = new ArrayList<>();
      list.add(new Integer(100)); // 객체 μƒμ„±ν•΄μ„œ λ„£λŠ”λ‹€.
      list.add(100); // μ˜€ν† λ°•μ‹± (int -> Integer)
      
      int a = 10;
      Integer b = a; // μ˜€ν†  λ°•μ‹± (int -> Integer)
      int c = b;  // μ˜€ν†  μ–Έλ°•μ‹± (Integer -> int)
      

μΉ΄ν…Œκ³ λ¦¬:

μ—…λ°μ΄νŠΈ:

λŒ“κΈ€λ‚¨κΈ°κΈ°