λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
etc/java

java OOP κΈ°λ³Έ κ°œλ…

by sh119 2024. 8. 21.

1. 클래슀(Class)

  • μ •μ˜: ν΄λž˜μŠ€λŠ” 객체λ₯Ό μƒμ„±ν•˜κΈ° μœ„ν•œ 청사진(섀계도)이닀. μžλ°”μ—μ„œ λͺ¨λ“  κ°μ²΄λŠ” 클래슀λ₯Ό 기반으둜 μƒμ„±λœλ‹€.
  • μ—­ν• : ν΄λž˜μŠ€λŠ” 속성(ν•„λ“œ)κ³Ό λ™μž‘(λ©”μ„œλ“œ)을 μ •μ˜ν•œλ‹€. 예λ₯Ό λ“€μ–΄, Car ν΄λž˜μŠ€λŠ” μžλ™μ°¨μ˜ 속성(예: 색상, 속도)κ³Ό λ™μž‘(예: 가속, 브레이크)을 μ •μ˜ν•  수 μžˆλ‹€.

2. 객체(Object)

  • μ •μ˜: κ°μ²΄λŠ” ν΄λž˜μŠ€λ‘œλΆ€ν„° μƒμ„±λœ μΈμŠ€ν„΄μŠ€μ΄λ‹€. ν΄λž˜μŠ€κ°€ 섀계도라면, κ°μ²΄λŠ” κ·Έ 섀계도λ₯Ό λ°”νƒ•μœΌλ‘œ λ§Œλ“€μ–΄μ§„ μ‹€μ œ 물체이닀.
  • μ—­ν• : κ°μ²΄λŠ” ν΄λž˜μŠ€μ—μ„œ μ •μ˜λœ 속성과 λ©”μ„œλ“œλ₯Ό κ°€μ§€λ©°, μ‹€μ œλ‘œ λ©”λͺ¨λ¦¬μƒμ—μ„œ μ‘΄μž¬ν•˜λ©° λ™μž‘ν•œλ‹€. μ—¬λŸ¬ 객체가 λ™μΌν•œ ν΄λž˜μŠ€λ‘œλΆ€ν„° 생성될 수 μžˆλ‹€.

3. μΊ‘μŠν™”(Encapsulation)

  • μ •μ˜: μΊ‘μŠν™”λŠ” 객체의 λ‚΄λΆ€ μƒνƒœ(ν•„λ“œ)λ₯Ό μ™ΈλΆ€λ‘œλΆ€ν„° 숨기고, ν•΄λ‹Ή 객체의 μƒνƒœλ₯Ό λ³€κ²½ν•˜λŠ” λ©”μ„œλ“œλ§Œμ„ 외뢀에 κ³΅κ°œν•˜λŠ” 것이닀.
  • μ—­ν• : 데이터 λ³΄ν˜Έμ™€ μ½”λ“œμ˜ μœ μ§€ 보수λ₯Ό μš©μ΄ν•˜κ²Œ ν•œλ‹€. μžλ°”μ—μ„œ 보톡 μ ‘κ·Ό μ œν•œμž(예: private, public, protected)λ₯Ό μ‚¬μš©ν•˜μ—¬ μΊ‘μŠν™”λ₯Ό κ΅¬ν˜„ν•œλ‹€.

4. 상속(Inheritance)

  • μ •μ˜: 상속은 κΈ°μ‘΄ 클래슀λ₯Ό 기반으둜 μƒˆλ‘œμš΄ 클래슀λ₯Ό μƒμ„±ν•˜λŠ” κΈ°λŠ₯이닀. μƒˆλ‘œμš΄ ν΄λž˜μŠ€λŠ” κΈ°μ‘΄ 클래슀의 속성과 λ©”μ„œλ“œλ₯Ό μƒμ†λ°›μœΌλ©°, ν•„μš”μ— 따라 μƒˆλ‘œμš΄ 속성과 λ©”μ„œλ“œλ₯Ό μΆ”κ°€ν•  수 μžˆλ‹€.
  • μ—­ν• : μ½”λ“œμ˜ μž¬μ‚¬μš©μ„±μ„ 높이고, 계측적인 클래슀 ꡬ쑰λ₯Ό λ§Œλ“€ 수 μžˆλ‹€. 예λ₯Ό λ“€μ–΄, Animal 클래슀λ₯Ό 상속받아 Dog와 Cat 클래슀λ₯Ό λ§Œλ“€ 수 μžˆλ‹€.

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

  • μ •μ˜: λ‹€ν˜•μ„±μ€ ν•˜λ‚˜μ˜ μΈν„°νŽ˜μ΄μŠ€λ‚˜ λΆ€λͺ¨ ν΄λž˜μŠ€μ— λŒ€ν•΄ μ—¬λŸ¬ ν˜•νƒœμ˜ 객체λ₯Ό κ°€μ§ˆ 수 μžˆλŠ” λŠ₯λ ₯이닀. λ©”μ„œλ“œ μ˜€λ²„λ‘œλ”©(같은 μ΄λ¦„μ˜ λ©”μ„œλ“œλ₯Ό μ—¬λŸ¬ 개 μ •μ˜)κ³Ό λ©”μ„œλ“œ μ˜€λ²„λΌμ΄λ”©(상속받은 λ©”μ„œλ“œλ₯Ό μž¬μ •μ˜)이 λ‹€ν˜•μ„±μ˜ μ£Όμš” μ˜ˆμ΄λ‹€.
  • μ—­ν• : λ‹€ν˜•μ„±μ€ 객체의 μ’…λ₯˜μ— 상관없이 λ™μΌν•œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ‚¬μš©ν•  수 있게 ν•˜μ—¬, μ½”λ“œμ˜ μœ μ—°μ„±κ³Ό ν™•μž₯성을 λ†’μ—¬μ€€λ‹€. 예λ₯Ό λ“€μ–΄, Animal 클래슀의 λ©”μ„œλ“œλ₯Ό Dog와 Catμ—μ„œ 각각 μ˜€λ²„λΌμ΄λ”©ν•  수 있으며, 이듀을 λ™μΌν•œ Animal νƒ€μž…μœΌλ‘œ μ²˜λ¦¬ν•  수 μžˆλ‹€.

6. 좔상화(Abstraction)

  • μ •μ˜: μΆ”μƒν™”λŠ” 객체의 λ³΅μž‘ν•œ λ‚΄λΆ€ κ΅¬ν˜„μ„ 감좔고, ν•„μš”ν•œ λΆ€λΆ„λ§Œμ„ 외뢀에 λ…ΈμΆœν•˜λŠ” 것이닀. 좔상 ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€λ₯Ό 톡해 κ΅¬ν˜„ν•  수 μžˆλ‹€.
  • μ—­ν• : λ³΅μž‘ν•œ μ‹œμŠ€ν…œμ„ λ‹¨μˆœν™”ν•˜κ³ , μ€‘μš”ν•œ κ°œλ…μ—λ§Œ 집쀑할 수 있게 ν•œλ‹€. 예λ₯Ό λ“€μ–΄, ShapeλΌλŠ” 좔상 ν΄λž˜μŠ€λŠ” draw()λΌλŠ” 좔상 λ©”μ„œλ“œλ₯Ό κ°€μ§ˆ 수 있으며, Circleκ³Ό Rectangle ν΄λž˜μŠ€μ—μ„œ 이λ₯Ό κ΅¬ν˜„ν•˜λ„λ‘ ν•  수 μžˆλ‹€.

7. μΈν„°νŽ˜μ΄μŠ€(Interface)

  • μ •μ˜: μΈν„°νŽ˜μ΄μŠ€λŠ” ν΄λž˜μŠ€κ°€ κ΅¬ν˜„ν•΄μ•Ό ν•˜λŠ” λ©”μ„œλ“œμ˜ 집합이닀. μžλ°”μ—μ„œ μΈν„°νŽ˜μ΄μŠ€λŠ” 닀쀑 상속을 μš°νšŒν•˜κΈ° μœ„ν•΄ μ‚¬μš©λœλ‹€.
  • μ—­ν• : ν΄λž˜μŠ€κ°€ λ°˜λ“œμ‹œ κ΅¬ν˜„ν•΄μ•Ό ν•˜λŠ” 계약을 μ •μ˜ν•˜λ©°, μ„œλ‘œ λ‹€λ₯Έ ν΄λž˜μŠ€κ°€ λ™μΌν•œ λ™μž‘μ„ ν•˜λ„λ‘ κ°•μ œν•  수 μžˆλ‹€. 예λ₯Ό λ“€μ–΄, Flyable μΈν„°νŽ˜μ΄μŠ€λŠ” fly() λ©”μ„œλ“œλ₯Ό ν¬ν•¨ν•˜κ³ , 이λ₯Ό Bird와 Airplane ν΄λž˜μŠ€μ—μ„œ κ΅¬ν˜„ν•  수 μžˆλ‹€.

μ΄λŸ¬ν•œ OOP κ°œλ…λ“€μ€ μžλ°” ν”„λ‘œκ·Έλž˜λ°μ˜ 근간을 이루며, 객체 μ§€ν–₯적으둜 문제λ₯Ό λΆ„μ„ν•˜κ³  ν•΄κ²°ν•˜λŠ” 데 μ€‘μš”ν•œ 역할을 ν•œλ‹€.

'etc > java' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

πŸ’«λžŒλ‹€μ‹ & Stream API  (0) 2024.08.21
java Collection  (0) 2024.08.21