μ‚Ά/F-Lab

Week 2

osean 2021. 5. 13. 03:25

Week 2 
: λ‚˜λ¦„ κ³΅λΆ€λŠ” ν•œ 것 같은데


✍️ μ˜€λŠ˜μ€ μ €λ²ˆ 주에 잘 μ•Œμ§€ λͺ»ν–ˆλ˜ 것에 λŒ€ν•œ λ‹΅λ³€ μ‹œκ°„κ³Ό 책을 읽으며 μƒˆλ‘­κ²Œ κ³΅λΆ€ν•œ 것듀에 λŒ€ν•œ 이야기듀을 λ‚˜λˆ„μ—ˆκ³ , ν”Όλ“œλ°±μœΌλ‘œλŠ” μ–΄λ–€ ν•œ μ£Όλ₯Ό λ³΄λƒˆλŠ”μ§€, ν•œ μ£Όλ₯Ό 보낸 결과둜 λ©˜ν† λ§μ—μ„œ μ–΄λ–€ 것을 느끼고 μ–»μ—ˆλŠ”μ§€ κΈ°λ‘ν•˜λ € ν•œλ‹€.

Q : κ°€μŠ΄μ— 손을 μ–Ήκ³ , 이번 μ£ΌλŠ” μ—΄μ‹¬νžˆ μ‚΄μ•˜λŠ”κ°€? 
A : λΆ€λ„λŸ½μ§€λ§Œ μ—΄μ‹¬νžˆ 살지 λͺ»ν–ˆλ‹€. λ‹€μ³€λ‹€λŠ” ν•‘κ³„λ‘œ μ£Όλ§μ—λŠ” λ°˜λ‚˜μ ˆ 이상 μΉ¨λŒ€μ—μ„œ λ‚˜μ˜€μ§€ μ•Šμ•˜λ‹€.
λ‚˜λ¦„ λ°˜μ„±μ˜ 의미둜 μΆœν‡΄κ·Ό 쀑에 책을 읽으렀 λ…Έλ ₯ν–ˆμ§€λ§Œ ν•œ κΈ€μžλ„ μ½νžˆμ§€ μ•Šμ•˜λ‹€. 사싀상 μ‹€νŒ¨μ˜ ν•œ 주라고 μƒκ°λœλ‹€.

1. Reference Type / Primitive Type

- Reference Type
Reference Type 에 λŒ€ν•΄μ„œ μ œλŒ€λ‘œ μ„€λͺ…ν•˜μ§€ μ•Šκ³  κ°‘μžκΈ° String ν΄λž˜μŠ€μ— λŒ€ν•œ μ„€λͺ…을 μ‹œμž‘ν•¨. κ·Έλ ‡λ‹€κ³  String ν΄λž˜μŠ€μ— λŒ€ν•΄ μ œλŒ€λ‘œ μ„€λͺ…ν•˜μ§€λ„ λͺ»ν•¨. 빡점.

- Primitive Type
κ·Έλƒ₯ 'κΈ°λ³Έ μžλ£Œν˜•' 이라고만 ν‰μΉ˜κ³  Wrapper 클래슀λ₯Ό μ„€λͺ…ν•˜λŠ” 맀직을 μ„ μ‚¬ν–ˆλ‹€. κ·Έλ ‡λ‹€κ³  Wrapper 클래슀의 μ •μ˜λ„ μ •ν™•νžˆ λ§ν•˜μ§€ λͺ»ν–ˆλ‹€. -100점.

βœ”οΈ λ‹€μ‹œ μ •λ¦¬ν•˜κΈ°

πŸ“Œ Primitive Type

  • κΈ°λ³Έ μžλ£Œν˜•μœΌλ‘œ λ‹€μŒκ³Ό 같은 μœ ν˜•μ˜ νƒ€μž…λ“€μ΄ μ‘΄μž¬ν•œλ‹€.

    λ…Όλ¦¬ν˜• - boolean
    λ¬Έμžν˜• - char
    μ •μˆ˜ν˜• - byte, short, int, long
    μ†Œμˆ˜ν˜• - float, double
  • λ¦¬ν„°λŸ΄λ‘œ μ„ μ–Έλ˜λ©° 컴파일 μ‹œ, JVM에 μ˜ν•΄ Stack λ©”λͺ¨λ¦¬μ— μƒμ„±λœλ‹€.
  • 각 νƒ€μž…λ³„λ‘œ λ©”λͺ¨λ¦¬μ— μƒμ„±λ˜λŠ” 크기가 λ‹€λ₯΄λ©°, ν•΄λ‹Ή 크기λ₯Ό λ²—μ–΄λ‚  경우 λ©”λͺ¨λ¦¬μ—μ„œ 크기가 컀져 κ·Έ μ΄μƒμ˜ κ°’μœΌλ‘œ λ„˜μ–΄κ°€μ§€ μ•Šκ³  μ΅œλŒ€κ°’μ„ μ΄ˆκ³Όν•  경우 μ΅œμ†Œκ°’μœΌλ‘œ, μ΅œμ†Œκ°’ 미만일 경우 μ΅œλŒ€κ°’μœΌλ‘œ 값이 λ³€κ²½λ˜λŠ” Overflow / Underflow ν˜„μƒμ΄ λ°œμƒν•œλ‹€.
    λ•Œλ¬Έμ— μ •μˆ˜ν˜• νƒ€μž…μ˜ 크기λ₯Ό κ³ λ €ν•˜μ§€ μ•Šκ³  섀계할 경우 잘λͺ»λœ κ°’μœΌλ‘œ 인해 μ„œλΉ„μŠ€μ— λ¬Έμ œκ°€ λ°œμƒ ν•  수 μžˆλ‹€.
  • double κ³Ό float νƒ€μž…μ€ 근사값을 λ‚΄λ €μ£ΌλŠ” λΆ€λ™μ†Œμˆ˜νƒ€μž…μœΌλ‘œ ν•΄λ‹Ή νƒ€μž…μœΌλ‘œ μ—°μ‚° μ‹œ, μ •ν™•ν•œ 값이 λ„μΆœλ˜μ§€ μ•Šμ„ 수 μžˆλ‹€.
    λ•Œλ¬Έμ— μ •ν™•ν•œ μ‹€μˆ˜ 계산을 μœ„ν•΄μ„œλŠ” BigDecimal 클래슀λ₯Ό μ΄μš©ν•˜λŠ” 것이 μ’‹λ‹€.
  • κΈ°λ³Έ μžλ£Œν˜•μ€ λΆˆλ³€μ˜ 원칙이 μ μš©λ˜μ–΄ λ‹€λ₯Έ 값을 가진 λ³€μˆ˜λ‘œ μž¬μ •μ˜ν•˜κ±°λ‚˜ λ‹€λ₯Έ κ°’μœΌλ‘œ μ΄ˆκΈ°ν™”ν•˜μ§€ μ•ŠλŠ” 이상 처음 μ„ μ–Έλ˜μ—ˆμ„ λ•Œ κ°’μ—μ„œ λ³€ν•˜μ§€ μ•ŠλŠ”λ‹€.
    (Pass by Value 원칙이 μ μš©λ˜μ–΄ λ©”μ†Œλ“œμ˜ 맀개 λ³€μˆ˜λ‘œ μ „λ‹¬λ˜κ±°λ‚˜ ν•  λ•Œ, 호좜된 λ©”μ†Œλ“œκ°€ ν•΄λ‹Ή λ³€μˆ˜λ₯Ό μ°Έμ‘°ν•˜λŠ” 것이 μ•„λ‹ˆλΌ λ™μΌν•œ κ°’μ˜ λ³€μˆ˜λ₯Ό Stack λ©”λͺ¨λ¦¬μ— μŒ“λŠ”λ‹€. 즉, 인자둜 μ „λ‹¬λœ 원본 λ³€μˆ˜λ₯Ό λ³΅μ‚¬ν•œλ‹€λŠ” μ˜λ―Έλ‹€.)
  • Java 8 λΆ€ν„° Autoboxing / Unboxing 이 μ§€μ›λ˜μ–΄,
    (κΈ°λ³Έ μžλ£Œν˜• -> Wrapper Class), (Wrapper Class -> κΈ°λ³Έ μžλ£Œν˜•)으둜 μžλ™ν˜•λ³€ν™˜μ΄ μˆ˜ν–‰λœλ‹€.

πŸ“Œ Reference Type

  • μ°Έμ‘° μžλ£Œν˜•μœΌλ‘œ λͺ¨λ“  μ°Έμ‘° μžλ£Œν˜•μ€ java.lang.Object 클래슀λ₯Ό 상속 λ°›λŠ”λ‹€.
  • μ°Έμ‘° μžλ£Œν˜•μ€ 컴파일 μ‹œ, JVM에 μ˜ν•΄ Heap λ©”λͺ¨λ¦¬ μ˜μ—­μ— 값을 μ €μž₯ ν•  수 μžˆλŠ” μ˜μ—­μ„ ν• λ‹Ή λ°›μœΌλ©°, ν• λ‹Ή 받은 λ©”λͺ¨λ¦¬ μ£Όμ†Œλ₯Ό Stack λ©”λͺ¨λ¦¬μ— λ³€μˆ˜μ™€ ν•¨κ»˜ μ €μž₯ν•œλ‹€.
  • μ°Έμ‘° μžλ£Œν˜•μ€ κΈ°λ³Έ μžλ£Œν˜•κ³Ό λ‹€λ₯΄κ²Œ λ³€ν•˜λŠ” 속성을 가지며, κ°’이 μž¬μ •μ˜ λ˜κ±°λ‚˜ μ΄ˆκΈ°ν™” 될 경우 Heap λ©”λͺ¨λ¦¬μ— μ‘΄μž¬ν•˜λ˜ 기쑴의 값은 Stack λ©”λͺ¨λ¦¬μ—μ„œ 더이상 μ°Έμ‘°ν•˜μ§€ μ•Šμ„ λ•Œ, Garbage Collector(μ΄ν•˜ GC)에 μ˜ν•΄ λ©”λͺ¨λ¦¬ μƒμ—μ„œ 사라진닀.

    λ‹€λ§Œ, String ν΄λž˜μŠ€μ™€ Wrapper ν΄λž˜μŠ€λŠ” λΆˆλ³€μ˜ 원칙이 μ μš©λ˜λŠ”λ°, λ©€ν‹° μŠ€λ ˆλ“œ ν™˜κ²½μ—μ„œ 동일성을 보μž₯ν•˜κΈ° μœ„ν•΄μ„œμ΄λ©°, java.util에 μ†ν•œ ν΄λž˜μŠ€λ“€μ€ 맀개 λ³€μˆ˜λ‘œ κΈ°λ³Έ μžλ£Œν˜•μ΄ μ•„λ‹Œ μ°Έμ‘° μžλ£Œν˜•λ§Œμ„ 인자둜 λ°›κΈ° λ•Œλ¬Έμ΄λ‹€.
  • 호좜된 λ©”μ†Œλ“œμ˜ 맀개 λ³€μˆ˜λ‘œ 전달될 λ•Œ, Pass by Reference 원칙에 μ˜ν•΄ 값이 λ³΅μ‚¬λ˜λŠ” 것이 μ•„λ‹ˆλΌ ν•΄λ‹Ή 값이 ν• λ‹Ήλ˜μ–΄ μžˆλŠ” Heap λ©”λͺ¨λ¦¬ μ£Όμ†Œλ₯Ό κΈ°μ‘΄ λ³€μˆ˜μ™€ ν•¨κ»˜ μ°Έμ‘°ν•œλ‹€. 
    (즉, μ°Έμ‘° μžλ£Œν˜•μ΄ μƒˆλ‘œμš΄ λ³€μˆ˜λ‘œ 할당될 λ•Œ, Heap λ©”λͺ¨λ¦¬μ— μƒˆλ‘­κ²Œ 값이 μƒμ„±λ˜λŠ”κ²Œ μ•„λ‹ˆλΌ ν•΄λ‹Ή κ°’μœΌλ‘œ μ •μ˜λœ λͺ¨λ“  λ³€μˆ˜κ°€ 기쑴에 Heap λ©”λͺ¨λ¦¬μ— ν• λ‹Ήλœ κ°’μ˜ μ£Όμ†Œλ₯Ό μ°Έμ‘°ν•œλ‹€.)
  • String
    • String 클래슀의 경우 λ‹€λ₯Έ μ°Έμ‘° μžλ£Œν˜•κ³Ό 달리 λΆˆλ³€μ˜ 원칙이 μ μš©λœλ‹€. 
    • λ¦¬ν„°λŸ΄λ‘œ μ„ μ–Έλœ String 클래슀의 경우, String Pool에 ν•΄λ‹Ή 값이 μ €μž₯되며 λ§Œμ•½ 같은 λ¬Έμžμ—΄λ‘œ μƒˆλ‘œμš΄ λ³€μˆ˜κ°€ μ„ μ–Έλ˜λ©΄ intern() λ©”μ†Œλ“œκ°€ μžλ™μœΌλ‘œ ν˜ΈμΆœλ˜μ–΄ κ°€μž₯ λ¨Όμ € String Poolμ—μ„œ 같은 λ¬Έμžμ—΄μ΄ μ‘΄μž¬ν•˜λŠ”μ§€ νŒŒμ•…ν•˜κ³  
      λ§Œμ•½ μ‘΄μž¬ν•œλ‹€λ©΄ ν•΄λ‹Ή κ°’μ˜ λ©”λͺ¨λ¦¬ μ£Όμ†Œλ₯Ό, μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ”λ‹€λ©΄ String Pool에 μƒˆλ‘­κ²Œ 값을 ν• λ‹Ήν•˜κ³  ν• λ‹Ήλœ λ©”λͺ¨λ¦¬ μ£Όμ†Œλ₯Ό Stack에 μ €μž₯ν•œλ‹€. 
    • String ν΄λž˜μŠ€λŠ” μƒμ„±μžλ₯Ό ν†΅ν•΄μ„œλ„ μ΄ˆκΈ°ν™” ν•  수 μžˆλŠ”λ°, 이 λ•Œ λ¦¬ν„°λŸ΄λ‘œ μ΄ˆκΈ°ν™” 된 String ν΄λž˜μŠ€μ™€λŠ” 달리 Heap λ©”λͺ¨λ¦¬μ— ν•΄λ‹Ή 값을 ν• λ‹Ή λ°›κ³ , λ©”λͺ¨λ¦¬ μ£Όμ†Œλ₯Ό Stack에 μ €μž₯ν•œλ‹€.
    • μƒμ„±μžλ₯Ό 톡해 μ΄ˆκΈ°ν™”λœ String λ³€μˆ˜λ“€μ€ λ˜‘κ°™μ€ λ¬Έμžμ—΄μ΄λΌκ³  해도,
      Heap λ©”λͺ¨λ¦¬μ— ν• λ‹Ήλœ μ˜μ—­μ΄ 각 λ³€μˆ˜λ§ˆλ‹€ λ‹€λ₯΄κΈ° λ•Œλ¬Έμ— λ™λ“±λΉ„κ΅μ—°μ‚°μž(==)둜 비ꡐ ν–ˆμ„ λ•Œ falseκ°€ λ¦¬ν„΄λœλ‹€. 
      (즉, λ˜‘κ°™μ€ λ¬Έμžμ—΄μ΄ Heap λ©”λͺ¨λ¦¬μ— μ—¬λŸ¬ 개 μžˆλ‹€λŠ” μ˜λ―Έμ΄λ‹€.)
      μ΄λŠ” λ™λ“±λΉ„κ΅μ—°μ‚°μžκ°€ 객체λ₯Ό 비ꡐ ν•  λ•Œ 객체의 λ©”λͺ¨λ¦¬ μ£Όμ†Œλ₯Ό λΉ„κ΅ν•˜κΈ° λ•Œλ¬ΈμΈλ°, λ¬Έμžμ—΄ 자체λ₯Ό λΉ„κ΅ν•˜κΈ° μœ„ν•΄μ„œλŠ” String ν΄λž˜μŠ€μ—μ„œ μž¬μ •μ˜λœ equals() λ©”μ†Œλ“œλ₯Ό 호좜 ν•΄μ•Όν•œλ‹€.
    • String ν΄λž˜μŠ€λŠ” μ°Έμ‘° 클래슀 쀑 μœ μΌν•˜κ²Œ + 연산을 μˆ˜ν–‰ ν•  수 μžˆλ‹€.
      JDK 1.7 μ΄μ „μ—λŠ” + μ—°μ‚° μ‹œ, κΈ°μ‘΄ λ¬Έμžμ—΄ + μƒˆλ‘œμš΄ λ¬Έμžμ—΄μ„ Heap λ©”λͺ¨λ¦¬μ— μƒˆλ‘­κ²Œ ν• λ‹Ή λ°›μ•„ 기쑴의 λ¬Έμžμ—΄ 값은 μ“°λ ˆκΈ°κ°€ λ˜μ–΄ λ©”λͺ¨λ¦¬ 상 λ¬Έμ œκ°€ λ§Žμ•˜λŠ”λ°, ν•΄λ‹Ή 버전뢀터 컴파일 μ‹œ μžλ™μœΌλ‘œ + 연산을 StringBuilder 클래슀의 append() λ©”μ†Œλ“œλ‘œ μΉ˜ν™˜ν•΄ 기쑴에 Heap λ©”λͺ¨λ¦¬μ— μ‘΄μž¬ν•˜λŠ” 값을 μž¬μ‚¬μš©ν•˜λ„λ‘ λ³€κ²½λ˜μ—ˆλ‹€.
      (λ‹€λ§Œ forλ¬Έμ΄λ‚˜ if문의 μŠ€μ½”ν”„ μ•ˆμ—μ„œ + 연산을 ν•˜κ±°λ‚˜ μ€„λ°”κΏˆμ΄ μΌμ–΄λ‚œ + 연산은 기쑴의 λ°©μ‹μœΌλ‘œ μ—°μ‚°λœλ‹€.)

 

2. Garbage Collector

GCκ°€ Stack λ©”λͺ¨λ¦¬μ—μ„œ μ°Έμ‘°ν•˜μ§€ μ•ŠλŠ” Heap λ©”λͺ¨λ¦¬μ— ν• λ‹Ήλœ 값을 μ•Œμ•„μ„œ μ²˜λ¦¬ν•˜λŠ” μ •λ„λ‘œ μ•„μ£Ό κ°„λ‹¨νžˆλ§Œ μ•Œκ³  μžˆμ—ˆλ‹€.
Hλ‹˜κ»˜μ„œ μ—„μ²­λ‚˜κ²Œ μ„€λͺ…ν•˜μ‹€ λ•Œ, λ‚˜λŠ” μ™œ 정말 μ€‘μš”ν•œ GCλŠ” 찾아보지 μ•Šμ•˜μ„κΉŒ ν•˜λ©° ν›„νšŒν–ˆλ‹€.

πŸ’‍♂️ : Stringκ³Ό Reference Type κ³΅λΆ€ν•˜μ‹œλ©΄μ„œ GC에 λŒ€ν•΄μ„œλ„ κ³΅λΆ€ν•˜μ…¨κ² μ£ ?
🌊 : (μͺ½νŒ”λ¦Ό 80, λ¬΄μ„œμ›€ 20) 아뇨, κ·Έλƒ₯ Stack λ©”λͺ¨λ¦¬μ—μ„œ μ°Έμ‘°ν•˜μ§€ μ•ŠλŠ” 값듀을 GCκ°€ μ•Œμ•„μ„œ μ²˜λ¦¬ν•΄μ£ΌλŠ” μ •λ„λ‘œλ§Œ μ•Œκ³  μžˆμŠ΅λ‹ˆλ‹€.

사싀 GCλŠ” 정말 μ€‘μš”ν•œ λΆ€λΆ„μ΄μ˜€κ³ ,
μ–Έμ œκ°€ λ μ§€λŠ” λͺ¨λ₯΄μ§€λ§Œ μ„±λŠ₯ νŠœλ‹μ„ μœ„ν•΄μ„œλΌλ©΄ 무쑰건 μ•Œμ•„μ•Ό ν•˜λŠ” μ˜μ—­μΈλ°λ„ μ–΄λ ΅λ‹€λŠ” 이유둜 λ“±ν•œμ‹œ ν–ˆλ˜ λ‚˜, λ°˜μ„±ν•œλ‹€.

βœ”οΈ μ•„λž˜μ˜ 링크λ₯Ό 톡해 쑰금 더 심화 ν•™μŠ΅μ„ ν•΄λ³΄μž!

- Java Reference와 GC (d2.naver.com/helloworld/329631)
- Java Garbage Collection (d2.naver.com/helloworld/1329)

 

3. Polymorphism (λ‹€ν˜•μ„±)

μ™œ λ³Έμ§ˆμ„ λ§ν•˜μ§€ λͺ»ν•˜κ³  어디에 λΉ—λŒ€μ–΄ μ„€λͺ…ν•˜λ €κ³  ν•˜λŠ”κ±ΈκΉŒ!?
인간과 λ‚˜, Hλ‹˜ 그리고 λ©˜ν† λ‹˜μ„ λΆ€λͺ¨μ™€ μžμ‹ ν΄λž˜μŠ€μ— λΉ„μœ ν•΄μ„œ μ„€λͺ…ν–ˆλŠ”λ° λ‹€μ‹œ 듀어봐도 λ©μ²­ν•˜κΈ° 짝이 μ—†λ‹€!

ν•œμ€„ : νƒ€μž…μ— λ”°λΌμ„œ 행동이 λ°”λ€” 수 μžˆλŠ” 것을 μ˜λ―Έν•œλ‹€.
(μ˜€λ²„λ‘œλ”©κ³Ό μ˜€λ²„λΌμ΄λ”©μ„ μ–ΈκΈ‰ν•˜λ©° λ‹€ν˜•μ„±μ— λŒ€ν•΄ μ„€λͺ…)

βœ”οΈ λ‹€μ‹œ μ •λ¦¬ν•˜κΈ°

πŸ“Œ λ‹€ν˜•μ„±μ΄λž€

  • 객체 지ν–₯의 νŠΉμ§• 쀑 ν•˜λ‚˜λ‘œ, μ—¬λŸ¬ ν˜•νƒœλ‘œ μ„ μ–Έν•˜μ—¬ νƒ€μž…μ— 따라 행동이 λ°”λ€” 수 μžˆλŠ” 것을 μ˜λ―Έν•œλ‹€.
    μ΄λŸ¬ν•œ λ‹€ν˜•μ„±μ„ ν™œμš©ν•œ λŒ€ν‘œμ μΈ 예둜 OverLoading κ³Ό OverRiding 이 μ‘΄μž¬ν•˜λ©°, λ‹€ν˜•μ„±μ„ 톡해 κΈ°λŠ₯의 ν™•μž₯μ΄λ‚˜ μ„ μ–Έλœ νƒ€μž…μ˜ λ³€κ²½ 없이 객체의 μ£Όμž…λ§ŒμœΌλ‘œ μˆ˜μ •μ΄ κ°€λŠ₯ν•˜λ‹€. λ˜ν•œ, μƒμ†μ΄λΌλŠ” λ‹€ν˜•μ„±μ˜ νŠΉμ§• 쀑 ν•˜λ‚˜λ₯Ό μ΄μš©ν•˜μ—¬ 쀑볡 μ½”λ“œλ₯Ό 쀄일 수 μžˆλ‹€λŠ” 이점이 μ‘΄μž¬ν•œλ‹€.
 

λ‹€ν˜•μ„±(Polymorphism)μ΄λž€?

객체 지ν–₯ νŒ¨λŸ¬λ‹€μž„μ˜…

woowacourse.github.io

πŸ“Œ OverLoading

  • λ©”μ†Œλ“œ 생성을 예둜, 맀개 λ³€μˆ˜μ˜ κ°’λ§Œ λ‹€λ₯΄κ²Œ ν•˜μ—¬ 같은 이름을 가진 λ©”μ†Œλ“œμ§€λ§Œ 각각 λ‹€λ₯Έ 행동을 ν•˜κ²Œλ” κ΅¬ν˜„ν•˜λŠ” 것을 OverLoading이라 ν•œλ‹€.
  • μƒμ„±μžμ˜ κ²½μš°λ„ κ°€λŠ₯ν•œλ°, μƒμ„±μž 생성 μ‹œ 맀개 λ³€μˆ˜λ₯Ό λ‹€λ₯΄κ²Œ λ§Œλ“œλŠ” 것도 λ‹€ν˜•μ„±μ΄λΌκ³  λ³Ό 수 μžˆλ‹€.

πŸ“Œ OverRiding

  • 말 κ·ΈλŒ€λ‘œ μ˜¬λΌνƒ€λŠ” μ˜λ‹¨μ–΄μ²˜λŸΌ 상속 λ°›λŠ” λΆ€λͺ¨ ν΄λž˜μŠ€μ— μ„ μ–Έλœ λ©”μ†Œλ“œλ₯Ό μžμ‹ ν΄λž˜μŠ€μ—μ„œ μž¬μ •μ˜ν•˜λŠ” 것을 μ˜λ―Έν•œλ‹€.
    (+ μƒμ†μ˜ κ°œλ…κΉŒμ§€ 덀으둜 챙겨가면 μ’‹λ‹€.)

πŸ“Œ ν•¨μˆ˜ν˜• μΈν„°νŽ˜μ΄μŠ€

  • 아직 잘 λͺ¨λ₯΄λŠ” 뢀뢄이닀. μœ„ 링크λ₯Ό 톡해 κ³΅λΆ€ν•˜μž!

 

3. 객체λ₯Ό 생성 ν•  λ•Œ, λΆ€λͺ¨ ν˜Ήμ€ μžμ‹μœΌλ‘œ μƒμ„±ν•˜λŠ” 방법에 λŒ€ν•΄

ArrayList 와 LinkedList λ₯Ό 톡해 μ„€λͺ…ν–ˆλ‹€.
보톡 List<T> list = new ArrayList<>(); 와 같은 방식을 주둜 μ‚¬μš©ν•˜λŠ”λ°, κ°€μž₯ 큰 μ΄μœ λŠ” μ²˜μŒλΆ€ν„° μ΄λ ‡κ²Œ λ°°μ›Œμ„œ 손에 μ΅μ—ˆλ‹€.

ν•˜μ§€λ§Œ λ‹€ν˜•μ„±κ³Ό μ—°κ²°ν•΄μ„œ λ‹΅λ³€ λ“œλ¦¬μžλ©΄,
λΆ€λͺ¨ 클래슀둜 객체둜 생성 ν–ˆμ„ λ•Œ μ–»λŠ” 이점은 λ‹€λ₯Έ μžμ‹ 클래슀둜 변경이 μˆ˜μ›”ν•˜κΈ° λ•Œλ¬Έμ— μ΄λ ‡κ²Œ μ‚¬μš©ν•˜λŠ” 것 κ°™λ‹€.

βœ”οΈ SOLID 법칙 쀑,
λ¦¬μŠ€μ½”ν”„ μΉ˜ν™˜ 법칙이 μ‘΄μž¬ν•˜λŠ”λ° ν•΄λ‹Ή μ§ˆλ¬Έμ€ 이 λ¦¬μŠ€μ½”ν”„ μΉ˜ν™˜ 법칙에 μ–΄κΈ‹λ‚˜λŠ” 방법인가? 
(λ©˜ν† λ‹˜κ»˜μ„œ 꼬리 질문으둜 λ˜μ Έμ£Όμ…¨μŒ.)

 

4. System.out.println() / Log 

μ‹€λ¬΄μ—μ„œ System.out.println() μ‚¬μš©ν•˜λ‹€κ°€ μ—„μ²­λ‚˜κ²Œ μš•λ¨Ήμ€ κ²½ν—˜μ΄ μžˆλ‹€.
μ˜ˆμ „λΆ€ν„° μ™œ Log둜 찍어보라고 ν–ˆλŠ”μ§€ κΆκΈˆν–ˆμ§€λ§Œ κ²€μƒ‰κΉŒμ§€ κΆκΈˆν•˜μ§€ μ•Šμ•˜λ‹€.
κ·Έλž˜μ„œ μ΄μœ λŠ” μ—¬μ „νžˆ λͺ¨λ₯Έλ‹€!

그리고 ν•΄λ‹Ή μ§ˆλ¬Έμ—μ„œ μ“Έλͺ¨μ—†λŠ” 닡변을 ν–ˆλ‹€.
νšŒμ‚¬μ—μ„œ 쓰지 말라고 ν•΄μ„œ μ•ˆμΌλ‹€λŠ” λ‘₯.. μž…μ΄ 방정이닀.
질문의 μš”μ— ν•΄λ‹Ήν•˜λŠ” λ§λ§Œν•˜λŠ” μŠ΅κ΄€μ„ λ“€μ—¬μ•Όκ² λ‹€!

 

5. ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€μ˜ 차이

λͺ…μ„Έμ„œμ— λΉ—λŒ€μ–΄ λ‹΅λ³€ν–ˆλ‹€. (쒋은 λΉ„μœ κ°€ μ•„λ‹ˆλΌλ©΄ λ³„λ‘œ 쒋지 λͺ»ν•œ μŠ΅κ΄€)
μΈν„°νŽ˜μ΄μŠ€μ—λŠ” λ©”μ†Œλ“œ μ„ μ–Έλ§Œ ν•˜κ³ , μΈν„°νŽ˜μ΄μŠ€λ₯Ό implements ν•˜λŠ” ν΄λž˜μŠ€κ°€ μΈν„°νŽ˜μ΄μŠ€μ— λ§Œλ“€μ–΄μ§„ λ©”μ†Œλ“œλ₯Ό Override ν•˜μ—¬ μž¬μ •μ˜ν•œλ‹€.

κ·Έλž˜μ„œ ν΄λž˜μŠ€μ™€μ˜ 차이가 뭔데?
μ§ˆλ¬Έμ€ 두 개의 차이λ₯Ό 물어보고 μžˆλ‹€. μΈν„°νŽ˜μ΄μŠ€μ˜ νŠΉμ§•μ΄ μ•„λ‹ˆλΌ. μš”μ μ„ μ •ν™•νžˆ νŒŒμ•…ν•˜μž.

πŸ’‍♂️ : λ‘˜μ˜ 차이점은 μƒνƒœλ₯Ό κ°€μ§ˆ 수 μžˆλŠλƒ, μ—†λŠλƒμ˜ 차이인데 Java 8 이후에도 μΈν„°νŽ˜μ΄μŠ€λŠ” μƒνƒœλ₯Ό κ°€μ§ˆ 수 μ—†μ„κΉŒμš”?

세상에, 처음 μ•Œμ•˜λŠ”λ° 괜히 μͺ½νŒ”λ¦΄κΉŒ μ•„λŠ” μ²™ ν–ˆλ‹€.
또 정말 μ•ˆμ’‹μ€ μŠ΅κ΄€μ΄ λ‚˜μ™”λ‹€. λͺ¨λ₯΄λ©΄ λͺ¨λ₯Έλ‹€κ³  ν•΄μ•Ό ν•˜λŠ”λ° 무슨 겉멋이 λ“€μ–΄μ„œ 자꾸 거짓말을 ν•˜λŠ”μ§€ λͺ¨λ₯΄κ² λ‹€!

βœ”οΈ 클래슀, μΈν„°νŽ˜μ΄μŠ€, Abstract 클래슀의 μ‚¬μš© μš©λ„,
Java 8 μ—μ„œ Default Method,
μΈν„°νŽ˜μ΄μŠ€μ™€ ν”„λ‘μ‹œμ˜ 관계


πŸ’­ μ „λ°˜μ μœΌλ‘œ νš‘μ„€μˆ˜μ„€μ΄ λ§Žμ€ λ©˜ν† λ§ μ‹œκ°„μ΄λΌκ³  λŠκΌˆλ‹€. κ·Έ 만큼 λ‚΄κ°€ μ œλŒ€λ‘œ μ„€λͺ… ν•  수 μžˆμ—ˆλ˜ 질문이 μ—†μ—ˆλ‹€λŠ” μ˜λ―Έμ΄λ‹€.
또, 질문의 μš”μ μ„ μ •ν™•νžˆ νŒŒμ•…ν•˜μ§€ μ•ŠλŠ” λ‚΄ 고질적인 λ¬Έμ œκ°€ 자주 κ΄€μ°°λ˜μ—ˆλŠ”λ° μ–΄λ–»κ²Œ ν•˜λ©΄ 이λ₯Ό κ³ μΉ  수 μžˆμ„κΉŒ?

λ§Žμ€ 고민이 λ˜λŠ” 2μ£Όμ°¨ λ©˜ν† λ§μ΄λ‹€. μ˜€λŠ˜μ„ 기점으둜 더 λ§Žμ€ μ‹œκ°„μ„ 곡뢀에 νˆ¬μžν•΄μ•Όκ² λ‹€.

'μ‚Ά > F-Lab' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

Week 6  (0) 2021.06.11
Week 5  (0) 2021.06.03
Week 4  (0) 2021.05.27
Week 3  (0) 2021.05.20
Week 1  (0) 2021.05.13