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

πŸ“° μ–Έμ–΄/Java

μžλ°”, 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°(2)

<Java의 정석 κ°œμ •3판>을 기본으둜 배운 λ‚΄μš©μž…λ‹ˆλ‹€.

 

λͺ©μ°¨

  • 1. 상속 inheritance
  • 2. μ˜€λ²„λΌμ΄λ”© overriding
  • 3. package와 import
  • 4. μ œμ–΄μž modifier

 

1. 상속 inheritance

  • μž₯점 : μ½”λ“œμ˜ μΆ”κ°€, 변경이 쉽고, ν”„λ‘œκ·Έλž¨μ˜ 생산성과 μœ μ§€λ³΄μˆ˜μ— μ’‹λ‹€.
  • νŠΉμ§•
  • μƒμ„±μžμ™€ μ΄ˆκΈ°ν™” λΈ”λŸ­μ€ 상속할 수 μ—†κ³ , 멀버(λ³€μˆ˜, λ©”μ„œλ“œ)만 상속 κ°€λŠ₯ν•˜λ‹€. 
  • μ ‘κ·Ό μ œμ–΄μžκ°€ private, default인 λ©€λ²„μ˜ 상속은 κ°€λŠ₯ν•˜μ§€λ§Œ, μžμ†ν΄λž˜μŠ€λ‘œλΆ€ν„°μ˜ 접근은 μ œν•œλœλ‹€.
  • μžλ°”μ˜ 경우 λ‹¨μΌ μƒμ†λ§Œμ„ ν—ˆμš©ν•œλ‹€.
  μž₯점 단점
닀쀑 상속 볡합적인 κΈ°λŠ₯을 가진 클래슀λ₯Ό μ‰½κ²Œ μž‘μ„± κ°€λŠ₯ ν΄λž˜κ°„μ˜ 관계가 맀우 볡작
단일 상속(μžλ°”) ν΄λž˜μŠ€κ°„μ˜ 관계가 보닀 λͺ…ν™•  

 


2. overriding(=overwrite)

2-1) overriding

  • μ‘°μƒν΄λž˜μŠ€λ‘œλΆ€ν„° 상속받은 λ©”μ„œλ“œμ˜ λ‚΄μš©μ„ μžμ‹ ν΄λž˜μŠ€μ— 맞게 λ³€κ²½ν•˜λŠ” 것
  • 쑰건 
  1. μ„ μ–Ένƒ€μž…(이름, λ§€κ°œλ³€μˆ˜, λ°˜ν™˜νƒ€μž…)이 κ°™μ•„μ•Ό ν•œλ‹€.
  2. μ ‘κ·Ό μ œμ–΄μžλ₯Ό 쑰상 클래슀의 λ©”μ„œλ“œλ³΄λ‹€ 쒁은 λ²”μœ„λ‘œ λ³€κ²½ν•  수 μ—†λ‹€.
  3. 쑰상 ν΄λž˜μŠ€λ³΄λ‹€ μ˜ˆμ™Έλ₯Ό 많이 μ„ μ–Έν•  수 μ—†λ‹€.
  4. μΈμŠ€ν„΄μŠ€ λ©”μ„œλ“œμ™€ staticλ©”μ„œλ“œλ₯Ό μ„œλ‘œ λ³€κ²½ν•  μˆ˜λŠ” μ—†λ‹€.

 

2-2) overloading / overriding

overloading

ν•œ ν΄λž˜μŠ€μ— 같은 이름 μ—¬λŸ¬κ°œ μ •μ˜

overriding 상속 받은 λ©”μ„œλ“œμ˜ λ‚΄μš© λ³€κ²½

 

2-3) super와 super()

- super

  • λΆ€λͺ¨ ν΄λž˜μŠ€λ‘œλΆ€ν„° 상속받은 ν•„λ“œλ‚˜ λ©”μ†Œλ“œλ₯Ό μžμ‹ ν΄λž˜μŠ€μ—μ„œ μ°Έμ‘°ν•˜λŠ” 데 μ‚¬μš©ν•˜λŠ” μ°Έμ‘° λ³€μˆ˜
  • μΈμŠ€ν„΄μŠ€ λ³€μˆ˜μ˜ 이름과 지역 λ³€μˆ˜μ˜ 이름이 같을 경우 μΈμŠ€ν„΄μŠ€ λ³€μˆ˜ μ•žμ— thisν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ ꡬ뢄할 수 μžˆλŠ” 것과 λ§ˆμ°¬κ°€μ§€λ‘œ λΆ€λͺ¨ 클래슀의 멀버와 μžμ‹ 클래슀의 멀버 이름이 같을 경우 superν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ ꡬ별할 수 μžˆλ‹€.
  • this와 λ§ˆμ°¬κ°€μ§€λ‘œ μΈμŠ€ν„΄μŠ€μ—λŠ” μ‚¬μš©κ°€λŠ₯ν•˜μ§€λ§Œ, 클래슀 λ©”μ†Œλ“œμ—μ„œλŠ” μ‚¬μš©ν•  수 μ—†λ‹€.

- super()

  • this()λ©”μ†Œλ“œκ°€ 같은 클래슀의 λ‹€λ₯Έ μƒμ„±μžλ₯Ό ν˜ΈμΆœν•  λ–„ μ‚¬μš©λœλ‹€λ©΄ superλ©”μ†Œλ“œλŠ” λΆ€λͺ¨ 클래슀의 μƒμ„±μžλ₯Ό ν˜ΈμΆœν•  λ–„ μ‚¬μš©λœλ‹€.
  • μžμ‹ 클래슀의 μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•˜λ©΄, ν•΄λ‹Ή μΈμŠ€ν„΄μŠ€μ—λŠ” μžμ‹ 클래슀의 고유 λ©€λ²„λΏλ§Œ μ•„λ‹ˆλΌ λΆ€λͺ¨ 클래슀의 λͺ¨λ“  λ©€λ²„κΉŒμ§€λ„ ν¬ν•¨λ˜μ–΄ 있기 λ•Œλ¬Έμ—, λΆ€λͺ¨ 클래슀의 멀버λ₯Ό μ΄ˆκΈ°ν™”ν•˜κΈ° μœ„ν•΄μ„œλŠ” μžμ‹ 클래슀의 μƒμ„±μžμ—μ„œ λΆ€λͺ¨ 클래슀의 μƒμ„±μžκΉŒμ§€ ν˜ΈμΆœν•΄μ•Ό ν•œλ‹€. λ”°λΌμ„œ μžλ°” μ»΄νŒŒμΌλŸ¬λŠ” λΆ€λͺ¨ ν΄λž˜μŠ€μ˜ μƒμ„±μžλ₯Ό λͺ…μ‹œμ μœΌλ‘œ ν˜ΈμΆœν•˜μ§€ μ•ŠλŠ” λͺ¨λ“  μžμ‹ 클래슀의 μƒμ„±μž μ²« 쀄에 μžλ™μœΌλ‘œ λ‹€μŒκ³Ό 같은 λͺ…령문을 μΆ”κ°€ν•˜μ—¬, λΆ€λͺ¨ 클래슀의 멀버λ₯Ό μ΄ˆκΈ°ν™”ν•  수 μžˆλ„λ‘ ν•΄μ€€λ‹€.
this super
staticλ©”μ„œλ“œμ—μ„œλŠ” μ‚¬μš©ν•  수 μ—‡λ‹€.
상속받은 멀버(super)도 μžμ† 클래슀 μžμ‹ μ˜ 멀버(this)이닀.
  μ‘°μƒμ˜ 멀버와 μžμ‹ μ˜ 멀버λ₯Ό ꡬ별할 λ•Œ μ‚¬μš©λœλ‹€.

 


3. μ„ μ–Έ - package와 import

- package

package νŒ¨ν‚€μ§€λͺ…;  //첫번째 쀄에 μž‘μ„±
  • 물리적으둜 ν•˜λ‚˜μ˜ 클래슀 파일(.class)을 ν¬ν•¨ν•˜λŠ” ν•˜λ‚˜μ˜ 디렉토리이닀.
  • ν•˜λ‚˜μ˜ μ†ŒμŠ€νŒŒμΌμ—λŠ” package선언을 ν•œλ²ˆλ§Œ ν—ˆμš©ν•œλ‹€.

- import문

import νŒ¨ν‚€μ§€λͺ…;
import νŒ¨ν‚€μ§€λͺ….클래슀λͺ…;
  • package와 달리 μ—¬λŸ¬λ²ˆ μ„ μ–Έ κ°€λŠ₯ν•˜λ‹€.
  • import문으둜 μ‚¬μš©ν•˜κ³ μžν•˜λŠ” 클래슀의 νŒ¨ν‚€μ§€λ₯Ό 미리 λͺ…μ‹œν•΄μ£Όλ©΄ μ‚¬μš©λ˜λŠ” 클래슀 μ΄λ¦„μ—μ„œ νŒ¨ν‚€μ§€λͺ…은 μƒλž΅ν•  수 μžˆλ‹€.

 


4. μ œμ–΄μž modifier

μ œμ–΄μžλŠ” ν΄λž˜μŠ€λ‚˜, λ³€μˆ˜, λ©”μ„œλ“œμ— 선언뢀에 ν•¨κ»˜ μ‚¬μš©λ˜μ–΄ 뢀가적인 의미λ₯Ό λΆ€μ—¬ν•œλ‹€.

μ—¬λŸ¬ μ œμ–΄μžλ₯Ό μ‘°ν•©ν•˜μ—¬ μ‚¬μš©ν•˜λŠ” 것이 κ°€λŠ₯ν•˜λ‹€. (μ ‘κ·Όμ œμ–΄μžλŠ” 1개만 μ‚¬μš©κ°€λŠ₯)

μ ‘κ·Όμ œμ–΄μž : public, protected, default, private
κ·Έ μ™Έ μ œμ–΄μž : static, final, abstract, native ....

 

4-1) μ ‘κ·Ό μ œμ–΄μž : μ™ΈλΆ€λ‘œλΆ€ν„° 데이터λ₯Ό 보호(μΊ‘μŠν™”)ν•˜κΈ° μœ„ν•΄ μ‚¬μš©λ¨. 

λŒ€μƒ μ‚¬μš©κ°€λŠ₯ν•œ μ ‘κ·Ό μ œμ–΄μž
클래슀 public, (default)
λ©”μ„œλ“œ public, protected, (default), private
λ©€λ²„λ³€μˆ˜
μ§€μ—­λ³€μˆ˜  X

μ•„λž˜ν‘œλŠ” μ œμ–΄μžμ— λ”°λ₯Έ μ ‘κ·Ό κ°€λŠ₯ λ²”μœ„μ΄λ‹€.

μ œμ–΄μž 같은 클래슀 같은 νŒ¨ν‚€μ§€ μžμ† 클래슀  전체
public βœ” βœ” βœ” βœ”
protected βœ” βœ” βœ”  
(default) βœ” βœ”    
private βœ”      

 

4-2) κ·Έ μ™Έ μ œμ–΄μž

static λ©€λ²„λ³€μˆ˜ - λͺ¨λ“  μΈμŠ€ν„΄μŠ€μ— κ³΅ν†΅μ μœΌλ‘œ μ‚¬μš©λ˜λŠ” ν΄λž˜μŠ€λ³€μˆ˜κ°€ λœλ‹€.
- ν΄λž˜μŠ€λ³€μˆ˜λŠ” μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•˜μ§€ μ•Šκ³ λ„ μ‚¬μš© κ°€λŠ₯ν•˜λ‹€.
- ν΄λž˜μŠ€κ°€ λ©”λͺ¨λ¦¬μ— λ‘œλ“œλ  λ•Œ μƒμ„±λœλ‹€.
λ©”μ„œλ“œ - μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•˜μ§€ μ•Šκ³ λ„ 호좜이 κ°€λŠ₯ν•œ staticλ©”μ„œλ“œκ°€ λœλ‹€.
- staticλ©”μ„œλ“œ λ‚΄μ—μ„œλŠ” μΈμŠ€ν„΄μŠ€λ©€λ²„λ“€μ„ 직접 μ‚¬μš©ν•  수 μ—†λ‹€.(λ”°λ‘œ μƒμ„±ν•΄μ•Όν•œλ‹€.)
final 클래슀 변경될 수 μ—†λŠ” 클래슀, ν™•μž₯될 수 μ—†λŠ” ν΄λž˜μŠ€κ°€ λœλ‹€.
λ©”μ„œλ“œ 변경될 수 μ—†λŠ” λ©”μ„œλ“œ, final둜 μ§€μ •λœ λ©”μ„œλ“œλŠ” μ˜€λ²„λΌμ΄λ”©μ„ 톡해 μž¬μ •μ˜ 될 수 μ—†λ‹€.
λ©€λ²„λ³€μˆ˜ λ³€μˆ˜ μ•žμ— final이 λΆ™μœΌλ©΄, 값을 λ³€κ²½ν•  수 μ—†λŠ” μƒμˆ˜κ°€ λœλ‹€.
μ§€μ—­λ³€μˆ˜
abstract 클래슀 클래슀 내에 좔상 λ©”μ„œλ“œκ°€ μ„ μ–Έλ˜μ–΄ μžˆμŒμ„ μ˜λ―Έν•œλ‹€.
λ©”μ„œλ“œ μ„ μ–ΈλΆ€λ§Œ μž‘μ„±ν•˜κ³  κ΅¬ν˜„λΆ€λŠ” μž‘μ„±ν•˜μ§€ μ•Šμ€ 좔상 λ©”μ„œλ“œμž„μ„ μ•Œλ¦°λ‹€.

 

4-3) μ œμ–΄μžμ˜ μ‘°ν•©

- λŒ€μƒμ— λ”°λ₯Έ μ‚¬μš©κ°€λŠ₯ν•œ μ œμ–΄μž

λŒ€μƒ μ‚¬μš©κ°€λŠ₯ν•œ μ ‘κ·Ό μ œμ–΄μž μ‚¬μš©κ°€λŠ₯ν•œ κ·Έ μ™Έ μ œμ–΄μž
클래슀 public, (default) final, abstract
λ©”μ„œλ“œ public, protected, (default), private final, abstract, static
λ©€λ²„λ³€μˆ˜ final, static
μ§€μ—­λ³€μˆ˜ X final


- μ£Όμ˜ν•  점