λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸ–₯️ λ°±μ—”λ“œ/Java

[ch.7] 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°

by OR15A 2023. 11. 11.

상속

  • 기쑴의 클래슀λ₯Ό μž¬μ‚¬μš©ν•΄μ„œ μƒˆλ‘œμš΄ 클래슀λ₯Ό μž‘μ„±ν•˜λŠ” 것
  • μžμ†ν΄λž˜μŠ€λŠ” μ‘°μƒν΄λž˜μŠ€μ˜ λͺ¨λ“  멀버λ₯Ό μƒμ†λ°›μŒ. (μƒμ„±μžμ™€ μ΄ˆκΈ°ν™”λΈ”λŸ­ μ œμ™Έ) κ·Έλž˜μ„œ μžμ†λ©€λ²„κ°œμˆ˜ >= μ‘°μƒλ©€λ²„κ°œμˆ˜

포함

  • ν•œ 클래슀의 λ©€λ²„λ³€μˆ˜λ‘œ λ‹€λ₯Έ ν΄λž˜μŠ€νƒ€μž…μ˜ μ°Έμ‘°λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜λŠ” 것
  • class Circle { Point p ; int r ; }
  • 같은 λ‚΄μš©μ˜ μ½”λ“œλ₯Ό ν•˜λ‚˜ μ΄μƒμ˜ ν΄λž˜μŠ€μ— μ€‘λ³΅μ μœΌλ‘œ μΆ”κ°€ν•΄μ•Ό ν• λ•Œμ—λŠ” 상속 관계λ₯Ό μ΄μš©ν•΄μ„œ μ½”λ“œμ˜ 쀑볡을 μ΅œμ†Œν™”ν•˜κΈ°.
  • 객체지ν–₯ ν”„λ‘œκ·Έλž¨μ—μ„œ κ°€μž₯ μ€‘μš”ν•œ 것: 전체 ν”„λ‘œκ·Έλž¨μ„ κ΅¬μ„±ν•˜λŠ” ν΄λž˜μŠ€λ“€μ„ λ©΄λ°€νžˆ μ„€κ³„λΆ„μ„ν•΄μ„œ, ν΄λž˜μŠ€κ°„μ˜ 상속관계λ₯Ό 적절히 λ§Ίμ–΄μ£ΌλŠ” 것.
  • μžμ†ν΄λž˜μŠ€μ˜ μΈμŠ€ν„΄μŠ€ 생성 μ‹œ μžμ‹ μ˜ 멀버와 μžμ‹ μ˜ 쑰상 클래슀의 λ©€λ²„λ§Œ 생성됨 = μ‘°μƒν΄λž˜μŠ€μ˜ μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•˜μ§€ μ•Šμ•„λ„ μ‘°μƒν΄λž˜μŠ€μ˜ 멀버λ₯Ό μ‚¬μš©ν•  수 있음.


Object클래슀

  • λͺ¨λ“  ν΄λž˜μŠ€λ“€μ˜ 쑰상. μžλ™μœΌλ‘œ μƒμ†λ°›μŒ.
  • κ·Έλž˜μ„œ 클래슀λ₯Ό λ§Œλ“€κ³  Object클래슀의 μœ μš©ν•œ μ—¬λŸ¬ λ©”μ„œλ“œλ₯Ό λ°”λ‘œ μ‚¬μš©ν•  수 있음.

μ˜€λ²„λΌμ΄λ”©

  • μ‘°μƒν΄λž˜μŠ€λ‘œλΆ€ν„° 상속받은 λ©”μ„œλ“œμ˜ λ‚΄μš©μ„ μžμ‹ μ— 맞게 λ³€κ²½ν•˜λŠ” 것.
  • 쑰건 3가지
    • β‘ λ©”μ„œλ“œμ˜ μ„ μ–ΈλΆ€ 일치(λ°˜ν™˜νƒ€μž…, λ©”μ„œλ“œμ΄λ¦„, λ§€κ°œλ³€μˆ˜)
    • β‘‘μ ‘κ·Όμ œμ–΄μžλŠ” μ‘°μƒλ©”μ„œλ“œλ³΄λ‹€ 쒁게 X
    • β‘’μ‘°μƒλ©”μ„œλ“œλ³΄λ‹€ λ§Žμ€ 수의 μ˜ˆμ™Έμ„ μ–Έ X. μ˜ˆμ™Έμ˜ μ’…λ₯˜λ₯Ό μ€„μ΄κ±°λ‚˜ λ™μΌν•˜κ²Œ 선언해야함.

ν—·κ°ˆλ¦¬μ§€ 말기

  • μ˜€λ²„λ‘œλ”©
    • 같은 μ΄λ¦„μ˜ λ©”μ„œλ“œλ₯Ό λ‹€λ₯Έ λ§€κ°œλ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ μ—¬λŸ¬ 개 μ •μ˜
  • μ˜€λ²„λΌμ΄λ”©
    • 상속받은 λ©”μ„œλ“œμ˜ λ‚΄μš© λ³€κ²½


super.

  • μ‘°μƒν΄λž˜μŠ€λ‘œλΆ€ν„° 상속받은 멀버λ₯Ό μ°Έμ‘°ν•˜λŠ”λ° μ‚¬μš©λ˜λŠ” μ°Έμ‘°λ³€μˆ˜.
  • μ‘°μƒν΄λž˜μŠ€ 멀버와 μžμ†ν΄λž˜μŠ€λ©€λ²„κ°€ μ€‘λ³΅μ •μ˜λ˜μ–΄μžˆμ„ λ•Œ μ„œλ‘œ ꡬ별해야 ν•˜λŠ” κ²½μš°μ— μ‚¬μš©ν•¨.

μƒμ„±μž this, super

  • this( )
    • κ°™μ€ν΄λž˜μŠ€μ˜ λ‹€λ₯Έμƒμ„±μž 호좜
  • super( )
    • μ‘°μƒν΄λž˜μŠ€μ˜ μƒμ„±μž 호좜
  • 상속받은 μžμ†ν΄λž˜μŠ€λŠ” μƒμ„±μž μ΄ˆκΈ°ν™” μ‹œ μ‘°μƒν΄λž˜μŠ€ λ©€λ²„λ³€μˆ˜λŠ” μ‘°μƒν΄λž˜μŠ€μ˜ μƒμ„±μžκ°€ μ΄ˆκΈ°ν™” ν•  수 μžˆλ„λ‘ μžμ†ν΄λž˜μŠ€ μƒμ„±μžλŠ” μ²«μ€„μ—μ„œ μ‘°μƒν΄λž˜μŠ€μ˜ μƒμ„±μž(super( ))λ₯Ό ν˜ΈμΆœν•΄μ•Ό 함.
  • Object클래슀λ₯Ό μ œμ™Έν•œ λͺ¨λ“  클래슀의 μƒμ„±μžλŠ” 첫쀄에 λ°˜λ“œμ‹œ μžμ‹ μ˜ λ‹€λ₯Έ μƒμ„±μž λ˜λŠ” μ‘°μƒμ˜ μƒμ„±μžλ₯Ό ν˜ΈμΆœν•΄μ•Όν•¨. 그렇지 μ•ŠμœΌλ©΄ μ»΄νŒŒμΌλŸ¬κ°€ 첫쀄에 super( );λ₯Ό μžλ™μœΌλ‘œ μΆ”κ°€ν•΄μ€Œ.

νŒ¨ν‚€μ§€

  • 클래슀 λ¬ΆμŒμž„.
  • μ–Έμ œλ‚˜ μ†ŒμŠ€νŒŒμΌμ˜ 첫쀄에
  • pakage νŒ¨ν‚€μ§€λͺ…;
  • λͺ¨λ“  ν΄λž˜μŠ€λŠ” λ°˜λ“œμ‹œ ν•˜λ‚˜μ˜ νŒ¨ν‚€μ§€μ— ν¬ν•¨λ˜μ–΄μ•Ό 함.

import문

  • μ»΄νŒŒμΌλŸ¬μ—κ²Œ μ†ŒμŠ€νŒŒμΌμ— μ‚¬μš©λœ ν΄λž˜μŠ€νŒ¨ν‚€μ§€μ—
    λŒ€ν•œ 정보λ₯Ό μ œκ³΅ν•˜λŠ” 것.
  • import νŒ¨ν‚€μ§€.클래슀λͺ… ;
  • import문은 μ»΄νŒŒμΌμ‹œμ— μ²˜λ¦¬λ˜λ―€λ‘œ ν”„λ‘œκ·Έλž¨ μ„±λŠ₯κ³Ό κ΄€λ ¨μ—†μŒ
  • static importλ¬Έ: static멀버 호좜 μ‹œ 클래슀 이름 μƒλž΅ κ°€λŠ₯해짐


μ œμ–΄μž

μ œμ–΄μžν‘œ

static (클래슀의, 곡톡적인)

  • ν•΄λ‹Ή 클래슀의 μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•˜μ§€ μ•Šμ•„λ„ μ‚¬μš©ν•  수 있음.
  • μΈμŠ€ν„΄μŠ€ 생성 없이 μ‚¬μš©κ°€λŠ₯ν•  λ•Œ λΆ™μž„.
  • 뢙이면 클래슀 멀버됨.(λ³€μˆ˜, λ©”μ„œλ“œ)

final (λ§ˆμ§€λ§‰μ˜, 변경될 수 μ—†λŠ”)

  • final클래슀의 λŒ€ν‘œ μ˜ˆμ‹œ: String, Math
  • final이 뢙은 μΈμŠ€ν„΄μŠ€λ³€μˆ˜μ˜ 경우 μƒμ„±μžμ—μ„œ μ΄ˆκΈ°ν™”ν•  수 있음. 클래슀 λ‚΄μ—μ„œ λ§€κ°œλ³€μˆ˜λ₯Ό κ°–λŠ” μƒμ„±μžλ₯Ό μ„ μ–Έν•˜μ—¬μ„œ μΈμŠ€ν„΄μŠ€λ₯Ό 생성할 λ•Œ, final이 뢙은 λ©€λ²„λ³€μˆ˜λ₯Ό μ΄ˆκΈ°ν™”ν•˜λŠ”λ° ν•„μš”ν•œ 값을 μƒμ„±μžμ˜ λ§€κ°œλ³€μˆ˜λ‘œ μ œκ³΅λ°›μŒ. μ΄λ ‡κ²Œ ν•˜λ©΄ 각 μΈμŠ€ν„΄μŠ€λ§ˆλ‹€ final이 뢙은 λ©€λ²„λ³€μˆ˜κ°€ μ„œλ‘œ λ‹€λ₯Έκ°’을 κ°€μ§ˆ 수 있음.
  • final ν‚€μ›Œλ“œκ°€ 뢙은 λ³€μˆ˜λŠ” μ„ μ–Έ μ‹œ λ˜λŠ” μΈμŠ€ν„΄μŠ€ λ³€μˆ˜ μ„ μ–Έκ³Ό ν•¨κ»˜ μ΄ˆκΈ°ν™”λ˜μ–΄μ•Όν•¨.
  • μ˜ˆμ‹œ μΉ΄λ“œμ˜ μˆ«μžμ™€ 무늬.

abstract (μΆ”μƒμ˜, λ―Έμ™„μ„±μ˜)

  • λ©”μ„œλ“œμ˜ μ„ μ–ΈλΆ€λ§Œ μž‘μ„±ν•¨. μ‹€μ œ μˆ˜ν–‰λ‚΄μš©μΈ κ΅¬ν˜„λΆ€λŠ” μž‘μ„±ν•˜μ§€ μ•ŠμŒ.
  • μΆ”μƒλ©”μ„œλ“œ, μΆ”μƒν΄λž˜μŠ€ μ„ μ–Έ μ‹œ μ‚¬μš©ν•¨.

κ·Έ μ™Έμ˜ μ œμ–΄μž

κ·Έμ™Έμ˜ μ œμ–΄μž


μ ‘κ·Όμ œμ–΄μž

  • λ©€λ²„λ‚˜ ν΄λž˜μŠ€μ— μ‚¬μš©λ¨.
  • μ™ΈλΆ€μ—μ„œ λ©€λ²„λ‚˜ ν΄λž˜μŠ€μ— μ ‘κ·Όν•˜μ§€ λͺ»ν•˜λ„둝 μ œν•œν•˜λŠ” 역할을 함
    κ·Έμ™Έμ˜ μ œμ–΄μž
  • 클래슀: public, (default)
  • λ©”μ„œλ“œ/λ©€λ²„λ³€μˆ˜: public, protected, (default), private
  • μ§€μ—­λ³€μˆ˜: X

μ ‘κ·Όμ œμ–΄μžλ₯Ό μ‚¬μš©ν•˜λŠ” 이유

  • μ™ΈλΆ€λ‘œλΆ€ν„°μ˜ 데이터 접근을 μ œν•œν•΄μ„œ ν΄λž˜μŠ€λ‚΄λΆ€μ— μ„ μ–Έλœ 데이터λ₯Ό λ³΄ν˜Έν•˜κΈ° μœ„ν•΄μ„œ(μΊ‘μŠν™”)
  • private둜 μ§€μ •ν•˜μ—¬ 외뢀에 λ…ΈμΆœμ‹œν‚€μ§€ μ•ŠλŠ” 것은 λ³΅μž‘μ„±μ„ μ€„μ—¬μ€Œ.
  • private λ³€μˆ˜
    • private λ³€μˆ˜λŠ” 같은 ν΄λž˜μŠ€μ—μ„œλ§Œ μ ‘κ·Όν•  수 μžˆμœΌλ―€λ‘œ κ°„μ ‘μ μœΌλ‘œ λ³€κ²½ν•˜κ±°λ‚˜ μ‚¬μš©ν•  수 μžˆλ„λ‘ Getter와 Setter λ©”μ„œλ“œλ₯Ό λ§Œλ“€ 수 있음.
  • private μƒμ„±μž
    • μƒμ„±μžμ— μ ‘κ·Όμ œμ–΄μžλ₯Ό μ‚¬μš©ν•˜λ©΄ μΈμŠ€ν„΄μŠ€μ˜ 생성을 μ œν•œν•  수 있음.
    • private μƒμ„±μžλŠ” 클래슀 μ™ΈλΆ€μ—μ„œ μ‚¬μš©ν•  수 μ—†μœΌλ―€λ‘œ λŒ€μ‹  μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•΄μ„œ λ°˜ν™˜ν•΄μ£ΌλŠ” λ©”μ„œλ“œλ₯Ό μ œκ³΅ν•΄μ•Ό 함.
    • 이 λ©”μ„œλ“œλŠ” public인 λ™μ‹œμ— static이어야 함.