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

Java/Java의 정석

Chapter 07 - 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ° 2

Chapter 07 - 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ° 2

상속

μƒμ†μ˜ μ •μ˜μ™€ μž₯점

상속은 기쑴의 클래슀λ₯Ό μž¬μ‚¬μš©ν•˜μ—¬ μƒˆλ‘œμš΄ 클래슀λ₯Ό μƒμ„±ν•˜λŠ” 것

  • μ½”λ“œλ₯Ό κ³΅ν†΅μ μœΌλ‘œ 관리할 수 있음
  • μž¬μ‚¬μš©μ„±μ„ λ†’μž„
  • μƒμ„±μžμ™€ μ΄ˆκΈ°ν™” λΈ”λŸ­μ€ μƒμ†λ˜μ§€ μ•ŠμŒ, λ©€λ²„λ§Œ 상속

μ’…λ₯˜

  • 쑰상 클래슀 : λΆ€λͺ¨ 클래슀, μƒμœ„ 클래슀, 기반 클래슀
  • μžμ† 클래슀 : μžμ‹ 클래슀, ν•˜μœ„ 클래슀, νŒŒμƒλœ 클래슀
  • μžμ† 클래슀의 멀버 κ°œμ†ŒλŠ” 쑰상 ν΄λž˜μŠ€λ³΄λ‹€ 항상 κ°™κ±°λ‚˜ 많음
  • μžμ† 클래슀의 μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•˜λ©΄ 쑰상 클래슀의 멀버와 μžμ† 클래슀의 멀버가 합쳐진 ν•˜λ‚˜μ˜ μΈμŠ€ν„΄μŠ€λ‘œ 생성

클래슀 κ°„μ˜ 관계 - 포함관계

  • ν•˜λ‚˜μ˜ 클래슀λ₯Ό 미리 μž‘μ„±ν•΄ 놓고 그것을 λ‹€λ₯Έ 클래슀의 멀버 λ³€μˆ˜λ‘œ μ„ μ–Έν•˜μ—¬ 포함관계λ₯Ό 맺을 수 있음
  • 클래슀λ₯Ό μž‘μ„±ν•˜λŠ” 것도 μ‰¬μ›Œμ§€κ³  μ½”λ“œλ„ 간결해짐, μ½”λ“œ 관리에 μˆ˜μ›”
  • λ‹€λ₯Έ ν΄λž˜μŠ€μ—λ„ μž¬μ‚¬μš© κ°€λŠ₯

클래슀 κ°„μ˜ 관계 κ²°μ •ν•˜κΈ°

  • ~은 ~이닀. => is a κ΄€κ³„λŠ” 상속관계
    • ex) 타원은 원이닀.
  • ~은 ~을 가지고 μžˆλ‹€ => has a κ΄€κ³„λŠ” 포함관계
    • ex) 원은 점을 가지고 μžˆλ‹€.

단일 상속

  • μžλ°”μ—μ„œλŠ” 였직 단일 μƒμ†λ§Œμ„ ν—ˆμš©
    • 두 개 이상 상속 μ‹œ μ„ μ–ΈλΆ€(이름과 λ§€κ°œλ³€μˆ˜)κ°€ κ°™μœΌλ©΄ κ΅¬λ³„ν•˜κΈ° 어렀움
  • ν•˜λ‚˜λŠ” 쑰상 클래슀둜, ν•˜λ‚˜λŠ” 클래슀 λ‚΄λΆ€μ—μ„œ μΈμŠ€ν„΄μŠ€λ‘œ 생성 ν›„ μ‚¬μš©ν•˜λŠ” λ°©μ‹μœΌλ‘œ 단일 μƒμ†μ˜ ν•œκ³„λ₯Ό ν•΄κ²°

Object클래슀 - λͺ¨λ“  클래슀의 쑰상

  • Objectν΄λž˜μŠ€λŠ” λͺ¨λ“  클래슀 μƒμ†κ³„μΈ΅λ„μ˜ μ΅œμƒμœ„μ— μžˆλŠ” 쑰상 클래슀
  • 상속을 받지 μ•ŠλŠ” ν΄λž˜μŠ€λŠ” μ»΄νŒŒμΌλŸ¬κ°€ μžλ™μœΌλ‘œ extends Object μΆ”κ°€
  • λͺ¨λ“  쑰상 클래슀의 μ΅œμƒμœ„ 클래슀둜 μ˜¬λΌκ°€λ©΄ Object

μ˜€λ²„λΌμ΄λ”©(overriding)

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

쑰상 ν΄λž˜μŠ€λ‘œλΆ€ν„° 상속받은 λ©”μ„œλ“œμ˜ λ‚΄μš©μ„ λ³€κ²½ν•˜λŠ” 것

  • μƒˆλ‘œμš΄ λ©”μ„œλ“œλ₯Ό μ œκ³΅ν•˜λŠ” 것보닀 μ‚¬μš©μžκ°€ κΈ°λŒ€ν•˜κ³  μžˆλŠ” λ©”μ†Œλ“œ μ„ μ–ΈμœΌλ‘œ μ˜€λ²„λΌμ΄λ”©μ„ ν•˜λŠ” 것이 λ°”λ₯Έ 선택

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

  • 이름이 κ°™μ•„μ•Ό 함
  • λ§€κ°œλ³€μˆ˜κ°€ κ°™μ•„μ•Ό 함
  • λ°˜ν™˜ νƒ€μž…μ΄ κ°™μ•„μ•Ό 함
    • JDK1.5의 곡변 λ°˜ν™˜νƒ€μž… μΆ”κ°€λ‘œ 인해 λ°˜ν™˜νƒ€μž…μ„ μžμ† 클래슀의 νƒ€μž…μœΌλ‘œ λ³€κ²½ κ°€λŠ₯해짐
  • μ ‘κ·Ό μ œμ–΄μžλŠ” 쑰상 클래슀의 λ©”μ„œλ“œλ³΄λ‹€ 쒁은 λ²”μœ„λ‘œ λ³€κ²½ λΆˆκ°€λŠ₯
  • 쑰상 클래슀의 λ©”μ„œλ“œλ³΄λ‹€ λ§Žμ€ 수의 μ˜ˆμ™Έλ₯Ό μ„ μ–Έν•  수 μ—†μŒ
    • 쑰상 클래슀 λ©”μ„œλ“œμ˜ μ˜ˆμ™Έμ˜ 쑰상인 μ˜ˆμ™Έλ„ μ„ μ–Έ λΆˆκ°€λŠ₯
  • μΈμŠ€ν„΄μŠ€ λ©”μ„œλ“œλ₯Ό staticλ©”μ„œλ“œλ‘œ λ³€κ²½ν•˜κ±°λ‚˜ κ·Έ λ°˜λŒ€μ˜ 변경도 λΆˆκ°€λŠ₯
  • 쑰상 클래슀의 static λ©”μ„œλ“œλ₯Ό μžμ† ν΄λž˜μŠ€μ—μ„œ λ˜‘κ°™μ€ μ„ μ–ΈλΆ€μ˜ static λ©”μ„œλ“œλ‘œ μ •μ˜ν•˜λŠ” 것은 μ˜€λ²„λΌμ΄λ”©μ΄ μ•„λ‹˜
    • 클래슀 μ΄λ¦„μœΌλ‘œ μ ‘κ·Όν•  κ²ƒμž„μœΌλ‘œ

μ˜€λ²„λ‘œλ”© vs μ˜€λ²„λΌμ΄λ”©

μ˜€λ²„λ‘œλ”© : 기쑴에 μ—†λŠ” μƒˆλ‘œμš΄ λ©”μ„œλ“œλ₯Ό μ •μ˜(new)
μ˜€λ²„λΌμ΄λ”© : 상속받은 λ©”μ„œλ“œμ˜ λ‚΄μš©μ„ λ³€κ²½ν•˜λŠ” 것(change, modify)

super

  • superλŠ” μžμ† ν΄λž˜μŠ€μ—μ„œ 쑰상 ν΄λž˜μŠ€λ‘œλΆ€ν„° 상속받은 멀버λ₯Ό μ°Έμ‘°ν•˜λŠ” 데 μ‚¬μš©ν•˜λŠ” μ°Έμ‘° λ³€μˆ˜
  • 쑰상 클래슀의 멀버와 μ„œλ‘œ ꡬ별해야 ν•  λ•Œ μ‚¬μš©ν•˜λŠ” 것이 μ’‹μŒ
  • super μ—­μ‹œ this와 λ§ˆμ°¬κ°€μ§€λ‘œ static λ©”μ„œλ“œμ—μ„  μ‚¬μš© λΆˆκ°€λŠ₯

super() - 쑰상 클래슀의 μƒμ„±μž

  • Object 클래슀λ₯Ό μ œμ™Έν•œ λͺ¨λ“  클래슀의 μƒμ„±μž 첫 쀄에 this() λ˜λŠ” super()λ₯Ό ν˜ΈμΆœν•΄μ•Ό 함
  • 그렇지 μ•Šλ‹€λ©΄ μ»΄νŒŒμΌλŸ¬κ°€ μžλ™μœΌλ‘œ super();λ₯Ό μƒμ„±μžμ˜ 첫 쀄에 μ‚½μž…
  • μƒμ„±μžμ— super()λ₯Ό μ„ μ–Έν•  λ•Œ 쑰상 클래슀의 멀버 λ³€μˆ˜κ°€ λ¨Όμ € μ‘°μƒμ˜ μƒμ„±μžλ‘œ 인해 μ΄ˆκΈ°ν™”λ  수 μžˆλ„λ‘ μ•ž 쀄에 μ„ μ–Έ

package와 import

νŒ¨ν‚€μ§€

  • νŒ¨ν‚€μ§€λŠ” 클래슀(.class)의 묢음
  • 클래슀의 μ‹€μ œ 이름은 νŒ¨ν‚€μ§€λͺ…을 포함
  • λ¬Όλ¦¬μ μœΌλ‘œλŠ” ν•˜λ‚˜μ˜ 디렉토리
  • ν•˜λ‚˜μ˜ μ†ŒμŠ€νŒŒμΌμ€ 첫 번째 λ¬Έμž₯으둜 단 ν•œ 번의 νŒ¨ν‚€μ§€ μ„ μ–Έλ§Œμ„ ν—ˆμš©
  • λͺ¨λ“  ν΄λž˜μŠ€λŠ” λ°˜λ“œμ‹œ ν•˜λ‚˜μ˜ νŒ¨ν‚€μ§€μ— 속해야 함
  • νŒ¨ν‚€μ§€λŠ” .을 κ΅¬λΆ„μžλ‘œ 계측ꡬ쑰 ꡬ성

νŒ¨ν‚€μ§€μ˜ μ„ μ–Έ

import νŒ¨ν‚€μ§€λͺ…;

  • μ†ŒμŠ€νŒŒμΌμ˜ 첫 번째 λ¬Έμž₯이어야 함
  • μ†ŒμŠ€νŒŒμΌμ— 단 ν•œ 번 μ„ μ–Έ
  • ν΄λž˜μŠ€μ™€ κ΅¬λΆ„ν•˜κΈ° μœ„ν•΄ νŒ¨ν‚€μ§€λͺ…은 μ†Œλ¬Έμžλ₯Ό μ‚¬μš©ν•˜λŠ” 것이 원칙
  • μ†ŒμŠ€νŒŒμΌμ— μžμ‹ μ΄ 속할 νŒ¨ν‚€μ§€λ₯Ό μ§€μ •ν•˜μ§€ μ•Šμ€ ν΄λž˜μŠ€λŠ” 이름 μ—†λŠ” νŒ¨ν‚€μ§€μ— μ†ν•˜κ²Œ 됨
  • -d μ˜΅μ…˜μ€ μ§€μ •λœ 경둜λ₯Ό 톡해 νŒ¨ν‚€μ§€μ˜ μœ„μΉ˜λ₯Ό μ°Ύμ•„μ„œ 클래슀 νŒŒμΌμ„ 생성
  • -cp μ˜΅μ…˜μ€ μΌμ‹œμ μœΌλ‘œ 클래슀 패슀 지정 κ°€λŠ₯

import문

  • ν΄λž˜μŠ€μ— 일일이 νŒ¨ν‚€μ§€λͺ…을 λΆ™μ—¬μ„œ μ‚¬μš©ν•˜κΈ° λΆˆνŽΈν•˜κΈ° λ•Œλ¬Έμ— importλ¬Έ μ‚¬μš©
  • import문이 μ»΄νŒŒμΌλŸ¬μ—κ²Œ μ†ŒμŠ€νŒŒμΌμ— μ‚¬μš©λœ 클래슀의 νŒ¨ν‚€μ§€ 정보λ₯Ό 제곡
  • ideμ—μ„œ λ‹¨μΆ•ν‚€λ‘œλ„ νŽΈν•˜κ²Œ μ ‘κ·Όν•  수 μžˆλ„λ‘ 제곡

import문의 μ„ μ–Έ

  • 일반적인 μ†ŒμŠ€νŒŒμΌμ˜ ꡬ성
    1. package문
    2. import문
    3. 클래슀 μ„ μ–Έ
  • μ„ μ–Έ 방법
    • import νŒ¨ν‚€μ§€λͺ….클래슀λͺ…;
    • import νŒ¨ν‚€μ§€λͺ….*;
    • 클래슀λͺ….*은 ν•˜μœ„ 클래슀λ₯Ό ν¬ν•¨ν•˜λŠ” 것, ν•˜μœ„ νŒ¨ν‚€μ§€μ˜ ν΄λž˜μŠ€κΉŒμ§„ 포함 x
    • 클래슀λͺ….*은 μ»΄νŒŒμΌλŸ¬κ°€ ν•΄λ‹Ή νŒ¨ν‚€μ§€μ—μ„œ μΌμΉ˜ν•˜λŠ” 클래슀 이름을 μ°Ύμ•„μ•Ό ν•˜λŠ” μˆ˜κ³ κ°€ λŠλŠ” 것, μ„±λŠ₯상 차이 x

static import문

static 멀버λ₯Ό ν˜ΈμΆœν•  λ•Œ 클래슀λ₯Ό μƒλž΅ν•  수 있음

  • μ½”λ“œκ°€ 간결해짐
  • νŠΉμ • 클래슀의 static 멀버λ₯Ό 자주 μ‚¬μš©ν•  λ•Œ 편리

μ œμ–΄μž(modifier)

μ œμ–΄μžλž€?

  • 클래슀, λ³€μˆ˜, λ©”μ„œλ“œμ˜ 선언뢀에 ν•¨κ»˜ μ‚¬μš©λ˜μ–΄ 뢀가적인 의미λ₯Ό λΆ€μ—¬
    • μ ‘κ·Όμ œμ–΄μž : public, protected, default, private
    • κ·Έ μ™Έ : static, final, abstact, native, transient, synchronized, volatile, strictfp
    • μ ‘κ·Ό μ œμ–΄μžλŠ” ν•œ λ²ˆμ— ν•˜λ‚˜λ§Œ μ„ νƒν•΄μ„œ μ‚¬μš©, λ‚˜λ¨Έμ§€λŠ” μ—¬λŸ¬ μ œμ–΄μžλ₯Ό μ‘°ν•©ν•΄μ„œ μ‚¬μš©ν•˜λŠ” 것이 κ°€λŠ₯

static - 클래슀의, 곡톡적인

  • 클래슀 λ³€μˆ˜λŠ” μΈμŠ€ν„΄μŠ€μ™€ 관계없이 같은 κ°’
  • static이 λΆ™μœΌλ©΄ μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•˜μ§€ μ•Šκ³ λ„ μ‚¬μš© κ°€λŠ₯
  • μΈμŠ€ν„΄μŠ€ λ©”μ„œλ“œμ™€ static λ©”μ„œλ“œμ˜ μ°¨μ΄λŠ” λ©”μ„œλ“œ λ‚΄μ—μ„œ μΈμŠ€ν„΄μŠ€ 멀버λ₯Ό μ‚¬μš©ν•˜λƒμ˜ μ—¬λΆ€
  • 멀버 λ³€μˆ˜, λ©”μ„œλ“œ, μ΄ˆκΈ°ν™” λΈ”λŸ­μ— static이 μ‚¬μš©λ  수 있음
  • static 멀버 λ³€μˆ˜
    • λͺ¨λ“  μΈμŠ€ν„΄μŠ€μ— κ³΅ν†΅μ μœΌλ‘œ μ‚¬μš©λ˜λŠ” 클래슀 λ³€μˆ˜
    • μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•˜μ§€ μ•Šκ³ λ„ μ‚¬μš© κ°€λŠ₯
    • ν΄λž˜μŠ€κ°€ λ©”λͺ¨λ¦¬μ— λ‘œλ“œλ  λ•Œ 생성
  • static λ©”μ„œλ“œ
    • μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•˜μ§€ μ•Šκ³ λ„ 호좜이 κ°€λŠ₯
    • static λ©”μ„œλ“œ λ‚΄μ—μ„œλŠ” μΈμŠ€ν„΄μŠ€ 멀버듀을 직접 μ‚¬μš© λΆˆκ°€λŠ₯

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

  • μ‚¬μš©λ  수 μžˆλŠ” κ³³
    • 클래슀, λ©”μ„œλ“œ, 멀버 λ³€μˆ˜, μ§€μ—­λ³€μˆ˜
  • final 클래슀
    • ν™•μž₯될 수 μ—†λŠ” 클래슀
    • λ‹€λ₯Έ 클래슀의 쑰상이 될 수 X
  • final λ©”μ„œλ“œ
    • λ³€κ²½ν•  수 μ—†λŠ” λ©”μ„œλ“œ
    • μ˜€λ²„λΌμ΄λ”©μ„ 톡해 μž¬μ •μ˜ 될 수 μ—†μŒ
  • final 멀버 λ³€μˆ˜, μ§€μ—­λ³€μˆ˜
    • 값을 λ³€κ²½ν•  수 μ—†λŠ” μƒμˆ˜
    • final μΈμŠ€ν„΄μŠ€ λ³€μˆ˜μ˜ 경우 μƒμ„±μžμ—μ„œ μ΄ˆκΈ°ν™”ν•  수 있음

abstract - μΆ”μƒμ˜ λ―Έμ™„μ„±μ˜

  • λ©”μ„œλ“œμ˜ μ„ μ–ΈλΆ€λ§Œ μž‘μ„±ν•˜κ³  μ‹€μ œ κ΅¬ν˜„ν•˜μ§€ μ•Šμ€ 좔상 λ©”μ„œλ“œλ₯Ό μ„ μ–Έν•˜λŠ” 데 μ‚¬μš©
  • μ‚¬μš©λ  수 μžˆλŠ” κ³³
    • 클래슀 -> 클래슀 내에 좔상 λ©”μ„œλ“œκ°€ μ„ μ–Έλ˜μ–΄ μžˆμŒμ„ 의미
    • λ©”μ„œλ“œ -> μ„ μ–ΈλΆ€λ§Œ μž‘μ„±ν•˜κ³  κ΅¬ν˜„λΆ€λŠ” μž‘μ„±ν•˜μ§€ μ•Šμ€ 좔상 λ©”μ„œλ“œμž„μ„ 의미
  • 좔상 λ©”μ„œλ“œκ°€ μ—†λŠ” κ²½μš°μ—λ„ abstract 클래슀인 κ²½μš°κ°€ 있음
    • 상속 ν›„ μ›ν•˜λŠ” λ©”μ„œλ“œλ§Œ μ˜€λ²„λΌμ΄λ”© ν•˜κΈ° μœ„ν•¨
  • 좔상 ν΄λž˜μŠ€λŠ” μΈμŠ€ν„΄μŠ€λ₯Ό 생성할 수 μ—†λ‹€.

μ ‘κ·Ό μ œμ–΄μž(access modifier)

  • ν•΄λ‹Ήν•˜λŠ” 멀버 λ˜λŠ” 클래슀λ₯Ό μ™ΈλΆ€μ—μ„œ μ ‘κ·Όν•˜μ§€ λͺ»ν•˜λ„둝 μ œν•œ
  • 클래슀, 멀버 λ³€μˆ˜, λ©”μ„œλ“œ, μƒμ„±μžμ—μ„œ μ‚¬μš© κ°€λŠ₯
  • μ’…λ₯˜
    • private : 같은 클래슀 λ‚΄μ—μ„œλ§Œ μ ‘κ·Ό
    • default : 같은 νŒ¨ν‚€μ§€ λ‚΄μ—μ„œλ§Œ μ ‘κ·Ό
    • protected : 같은 νŒ¨ν‚€μ§€ λ‚΄ & λ‹€λ₯Έ νŒ¨ν‚€μ§€μ˜ μžμ† ν΄λž˜μŠ€μ—μ„œ μ ‘κ·Ό
    • public : μ ‘κ·Ό μ œν•œ X
    • μ ‘κ·Ό λ²”μœ„ : public > protected > (default) > private
  • μ‚¬μš© κ°€λŠ₯ν•œ μ ‘κ·Ό μ œμ–΄μž
    • 클래슀 : public, (default)
    • λ©”μ„œλ“œ, 멀버 λ³€μˆ˜ : public, protected, (default), private
    • μ§€μ—­λ³€μˆ˜ : μ—†μŒ
  • μ ‘κ·Ό μ œμ–΄μžλ₯Ό μ΄μš©ν•œ μΊ‘μŠν™”
    • μ™ΈλΆ€λ‘œλΆ€ν„° 데이터λ₯Ό λ³΄ν˜Έν•˜κΈ° μœ„ν•΄μ„œ
    • μ™ΈλΆ€μ—λŠ” λΆˆν•„μš”ν•œ λ‚΄λΆ€μ μœΌλ‘œλ§Œ μ‚¬μš©λ˜λŠ” 뢀뢄을 감좔기 μœ„ν•΄μ„œ
    • 보톡 멀버 λ³€μˆ˜λ₯Ό private(상속이 μ˜ˆμƒλ  μ‹œ protected)둜 μ„ μ–Έ ν›„ public getter와 setterλ₯Ό μ‚¬μš©
  • μƒμ„±μžμ˜ μ ‘κ·Ό μ œμ–΄μž
    • private μ ‘κ·Ό μ œμ–΄μžλ‘œ 직접 μΈμŠ€ν„΄μŠ€λ₯Ό 생성 λͺ»ν•˜κ²Œ ν•œ λ’€ public λ©”μ„œλ“œλ₯Ό 톡해 μΈμŠ€ν„΄μŠ€μ— μ ‘κ·Όν•  수 μžˆλ„λ‘ μ œν•œ κ°€λŠ₯
    • μƒμ„±μžκ°€ private인 ν΄λž˜μŠ€λŠ” λ‹€λ₯Έ 클래슀의 쑰상이 될 수 μ—†μŒ (쑰상 클래슀의 μƒμ„±μž 호좜이 λΆˆκ°€λŠ₯ν•˜λ―€λ‘œ)

μ œμ–΄μžμ˜ μ‘°ν•©

  • λ©”μ„œλ“œμ— staticκ³Ό abstactλŠ” ν•¨κ»˜ μ‚¬μš©ν•  수 μ—†μŒ
  • ν΄λž˜μŠ€μ— abstractκ³Ό final을 λ™μ‹œμ— μ‚¬μš©ν•  수 μ—†μŒ
  • abstract λ©”μ„œλ“œμ˜ μ ‘κ·Ό μ œμ–΄μžκ°€ private일 수 μ—†μŒ
    • μžμ† ν΄λž˜μŠ€μ—μ„œ κ΅¬ν˜„ν•΄ μ€˜μ•Ό ν•˜κΈ° λ•Œλ¬Έ
  • λ©”μ„œλ“œμ— privateκ³Ό final을 같이 μ‚¬μš©ν•  ν•„μš”λŠ” μ—†μŒ

λ‹€ν˜•μ„±

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

  • 객체지ν–₯μ—μ„œ λ‹€ν˜•μ„±μ΄λž€ μ—¬λŸ¬ 가지 ν˜•νƒœλ₯Ό κ°€μ§ˆ 수 μžˆλŠ” λŠ₯λ ₯을 의미
    • ꡬ체적으둠 쑰상 클래슀 νƒ€μž…μ˜ μ°Έμ‘° λ³€μˆ˜λ‘œ μžμ† 클래슀의 μΈμŠ€ν„΄μŠ€λ₯Ό μ°Έμ‘°ν•  수 μžˆλ„λ‘ ν•œ 것
  • μ°Έμ‘° λ³€μˆ˜μ˜ νƒ€μž…μ— 따라 μ‚¬μš©ν•  수 μžˆλŠ” λ©€λ²„μ˜ κ°œμˆ˜κ°€ 달라짐
  • μ°Έμ‘° λ³€μˆ˜κ°€ μ‚¬μš©ν•  수 μžˆλŠ” λ©€λ²„μ˜ κ°œμˆ˜λŠ” μΈμŠ€ν„΄μŠ€μ˜ 멀버 κ°œμˆ˜λ³΄λ‹€ κ°™κ±°λ‚˜ 적어야 함
    • 쑰상 νƒ€μž…μ˜ μ°Έμ‘° λ³€μˆ˜λ‘œ μžμ† νƒ€μž…μ˜ μΈμŠ€ν„΄μŠ€λ₯Ό μ°Έμ‘°ν•  수 있음
    • μžμ† νƒ€μž…μ˜ μ°Έμ‘° λ³€μˆ˜λ‘  쑰상 νƒ€μž…μ˜ μΈμŠ€ν„΄μŠ€λ₯Ό μ°Έμ‘°ν•  수 μ—†μŒ

μ°Έμ‘° λ³€μˆ˜μ˜ ν˜• λ³€ν™˜

  • μžμ† νƒ€μž…μ—μ„œ 쑰상 νƒ€μž…μ€ μ—… μΊμŠ€νŒ… : ν˜• λ³€ν™˜ μƒλž΅ κ°€λŠ₯
    • μ°Έμ‘° λ³€μˆ˜κ°€ λ‹€λ₯Ό 수 μžˆλŠ” λ©€λ²„μ˜ κ°œμˆ˜κ°€ μ‹€μ œ μΈμŠ€ν„΄μŠ€κ°€ κ°–κ³  μžˆλŠ” λ©€λ²„μ˜ κ°œμˆ˜λ³΄λ‹€ 적을 것이 λΆ„λͺ…ν•˜λ―€λ‘œ μƒλž΅ κ°€λŠ₯
  • 쑰상 νƒ€μž…μ—μ„œ μžμ† νƒ€μž…μ€ λ‹€μš΄ μΊμŠ€νŒ… : ν˜•λ³€ν™˜ μƒλž΅ λΆˆκ°€
  • μ°Έμ‘° λ³€μˆ˜μ˜ ν˜• λ³€ν™˜μ€ μ°Έμ‘° λ³€μˆ˜μ˜ νƒ€μž…μ„ λ³€κ²½ν•˜λŠ” κ²ƒμ΄λ―€λ‘œ μ‹€μ œ μΈμŠ€ν„΄μŠ€μ—” 영ν–₯을 λ―ΈμΉ˜μ§€ μ•ŠμŒ
    • 단지 μ°Έμ‘° λ³€μˆ˜μ˜ ν˜• λ³€ν™˜μ„ 톡해 μ°Έμ‘°ν•˜κ³  μžˆλŠ” μΈμŠ€ν„΄μŠ€μ—μ„œ μ‚¬μš©ν•  수 μžˆλŠ” λ©€λ²„μ˜ λ²”μœ„μ™€ 개수λ₯Ό μ‘°μ ˆν•˜λŠ” 것
  • 쑰상 νƒ€μž…μ˜ μ°Έμ‘° λ³€μˆ˜κ°€ 쑰상 νƒ€μž…μ˜ μΈμŠ€ν„΄μŠ€λ₯Ό μ°Έμ‘°ν•˜κ³  μžˆμ„ λ•Œ μžμ†νƒ€μž…μ˜ μ°Έμ‘°λ³€μˆ˜λ‘œ ν˜• λ³€ν™˜ν•˜λ©΄ μ—λŸ¬ λ°œμƒ
    Car car = new Car();
    FireEngine fe = null;
    // fe = (FireEngine)car; => 였λ₯˜ λ°œμƒ!

쑰상 νƒ€μž…μ΄ μžμ† νƒ€μž…μ˜ μΈμŠ€ν„΄μŠ€λ₯Ό μ°Έμ‘°ν•˜κ³  μžˆμ„ λ•ŒλŠ” λ‹€μš΄ μΊμŠ€νŒ…μ΄ κ°€λŠ₯ν•˜λ‹€.

    Car car = null;
    FireEngine fe = new FireEngin();
    car = fe;
    FireEngine fe2 = null;
    fe2 = (FireEngine)car;
    // 였λ₯˜ λ°œμƒ X
  • μ„œλ‘œ 상속관계에 μžˆλŠ” νƒ€μž… κ°„μ˜ ν˜•λ³€ν™˜μ€ μ–‘λ°©ν–₯으둜 자유둭게 진행될 수 μžˆμœΌλ‚˜, μ°Έμ‘° λ³€μˆ˜κ°€ κ°€λ¦¬ν‚€λŠ” μΈμŠ€ν„΄μŠ€μ˜ μžμ† νƒ€μž…μœΌλ‘œ ν˜•λ³€ν™˜μ€ ν—ˆμš© X
  • μ°Έμ‘° λ³€μˆ˜κ°€ κ°€λ¦¬ν‚€λŠ” μΈμŠ€ν„΄μŠ€μ˜ νƒ€μž…μ΄ 무엇인지 ν™•μΈν•˜λŠ” 것이 μ€‘μš”

instanceofμ—°μ‚°μž

  • μ°Έμ‘° λ³€μˆ˜κ°€ κ°€λ¦¬ν‚€λŠ” μΈμŠ€ν„΄μŠ€μ˜ μ‹€μ œ νƒ€μž…μ„ μ•Œμ•„λ³΄κΈ° μœ„ν•΄ μ‚¬μš©
  • instanceof의 μ™Όμͺ½μ—” μ°Έμ‘° λ³€μˆ˜, 였λ₯Έμͺ½μ—” νƒ€μž…(클래슀λͺ…) ν”Όμ—°μ‚°μž
  • boolean값을 λ°˜ν™˜ν•¨
    • μ‹€μ œ instanceof μ—°μ‚° 이외에 쑰상 νƒ€μž…μ˜ instanceof에도 trueλ₯Ό λ°˜ν™˜
    • κ·ΈλŸ¬λ―€λ‘œ trueλΌλŠ” 것은 κ²€μ‚¬ν•œ νƒ€μž…μœΌλ‘œ ν˜•λ³€ν™˜μ΄ κ°€λŠ₯ν•˜λ‹€λŠ” 의미

μ°Έμ‘° λ³€μˆ˜μ™€ μΈμŠ€ν„΄μŠ€μ˜ μ—°κ²°

  • 멀버 λ³€μˆ˜μ˜ κ²½μš°μ—” μ°Έμ‘° λ³€μˆ˜μ˜ νƒ€μž…μ— 따라 달라짐
    • 쑰상 ν΄λž˜μŠ€μ™€ μžμ† ν΄λž˜μŠ€μ— μ€‘λ³΅μœΌλ‘œ μ •μ˜λœ κ²½μš°λŠ” 쑰상 νƒ€μž…μ˜ μ°Έμ‘° λ³€μˆ˜λŠ” 쑰상 클래슀 멀버 λ³€μˆ˜, μžμ† νƒ€μž…μ˜ μ°Έμ‘° λ³€μˆ˜λŠ” μžμ† 클래슀 멀버 λ³€μˆ˜
    • 쀑볡 μ •μ˜λ˜μ§€ μ•Šμ€ κ²½μš°λŠ” μ°Έμ‘° λ³€μˆ˜μ— λ”°λ₯Έ 차이가 μ—†λ‹€.
  • super와 this둜 μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λ₯Ό κ΅¬λΆ„ν•΄μ„œλ„ μ‚¬μš© κ°€λŠ₯
    • 멀버 λ³€μˆ˜λ“€μ€ 주둜 private이기 λ•Œλ¬Έμ— 잘 μ‚¬μš©λ˜μ§€λŠ” μ•ŠμŒ

λ§€κ°œλ³€μˆ˜μ˜ λ‹€ν˜•μ„±

ν΄λž˜μŠ€λ§ˆλ‹€ λ™μΌν•œ 둜직의 λ©”μ†Œλ“œλ₯Ό λ§Œλ“€κΈ°λ³΄λ‹¨ κ³΅ν†΅μ˜ μžμ† 클래슀λ₯Ό extendsν•˜κ²Œ ν•œ λ’€ λ‹€ν˜•μ„±μ„ μ΄μš©ν•΄μ„œ ν•˜λ‚˜μ˜ λ©”μ„œλ“œλ‘œ κ΅¬ν˜„

  • λ‹€λ₯Έ μ œν’ˆμ΄ 좔가될 λ•Œλ„ 같은 쑰상 클래슀λ₯Ό μƒμ†λ°›κ²Œ ν•˜λ©΄ λœλ‹€.
  • Object 객체λ₯Ό λ§€κ°œλ³€μˆ˜λ‘œ λ°›λŠ” λ©”μ†Œλ“œμ˜ κ²½μš°μ—” λͺ¨λ“  νƒ€μž…μ˜ μΈμŠ€ν„΄μŠ€λ₯Ό 받을 수 μžˆλ‹€.

μ—¬λŸ¬ μ’…λ₯˜μ˜ 객체λ₯Ό λ°°μ—΄λ‘œ 닀루기

쑰상 νƒ€μž…μ˜ μ°Έμ‘° λ³€μˆ˜ 배열을 μ‚¬μš©ν•˜λ©΄, κ³΅ν†΅μ˜ 쑰상을 가진 μ„œλ‘œ λ‹€λ₯Έ μ’…λ₯˜μ˜ 객체λ₯Ό λ°°μ—΄λ‘œ λ¬Άμ–΄μ„œ λ‹€λ£° 수 있음

  • μ˜ˆμ œλ‘œλŠ” Object νƒ€μž…μ˜ 배열을 κ°–κ³  μžˆλŠ” Vector ν΄λž˜μŠ€κ°€ 있음 (λ™μ μœΌλ‘œ 크기가 κ΄€λ¦¬λ˜λŠ” 객체 λ°°μ—΄)

μΆ”μƒν΄λž˜μŠ€

μΆ”μƒν΄λž˜μŠ€λž€?

  • μΆ”μƒν΄λž˜μŠ€λŠ” λ―Έμ™„μ„± 섀계도
  • μΈμŠ€ν„΄μŠ€λ₯Ό 생성할 수 μ—†μŒ
  • μƒˆλ‘œμš΄ 클래슀λ₯Ό μž‘μ„±ν•˜λŠ” 데 μžˆμ–΄μ„œ 바탕이 λ˜λŠ” 쑰상 클래슀의 μ—­ν• 
  • ν‚€μ›Œλ“œ abstractλ₯Ό λΆ™μž„

μΆ”μƒλ©”μ„œλ“œ(abstract method)

  • λ©”μ„œλ“œλŠ” 선언뢀와 κ΅¬ν˜„λΆ€(λͺΈν†΅)으둜 κ΅¬ν˜„ -> 좔상 λ©”μ„œλ“œλŠ” μ„ μ–ΈλΆ€λ§Œ μž‘μ„±, κ΅¬ν˜„λΆ€λŠ” μž‘μ„± X
  • abstract λ¦¬ν„΄νƒ€μž… λ©”μ„œλ“œλͺ…();
  • μ‘°μƒμœΌλ‘œλΆ€ν„° 상속받은 μΆ”μƒλ©”μ„œλ“œ 쀑 ν•˜λ‚˜λΌλ„ κ΅¬ν˜„ν•˜μ§€ μ•ŠλŠ”λ‹€λ©΄, μžμ† 클래슀 μ—­μ‹œ 좔상 클래슀

μΆ”μƒν΄λž˜μŠ€μ˜ μž‘μ„±

  • 좔상화 : 클래슀 κ°„μ˜ 곡톡점을 μ°Ύμ•„λ‚΄μ„œ κ³΅ν†΅μ˜ 쑰상을 λ§Œλ“œλŠ” μž‘μ—…
  • ꡬ체화 : 상속을 톡해 클래슀λ₯Ό κ΅¬ν˜„, ν™•μž₯ν•˜λŠ” μž‘μ—…
  • abstractλ₯Ό λΆ™μ—¬μ„œ μΆ”μƒλ©”μ„œλ“œλ‘œ μ„ μ–Έν•˜λŠ” μ΄μœ λŠ” μžμ† ν΄λž˜μŠ€μ—μ„œ μΆ”μƒλ©”μ„œλ“œλ₯Ό λ°˜λ“œμ‹œ κ΅¬ν˜„ν•˜λ„λ‘ κ°•μš”
  • 곡톡 쑰상인 좔상 클래슀λ₯Ό μ΄μš©ν•΄μ„œ μ°Έμ‘° λ³€μˆ˜ λ°°μ—΄ λ“±μ˜ μ„œλ‘œ λ‹€λ₯Έ μ’…λ₯˜μ˜ μΈμŠ€ν„΄μŠ€λ₯Ό ν•˜λ‚˜μ˜ λ¬ΆμŒμœΌλ‘œλ„ λ‹€λ£° 수 있음

μΈν„°νŽ˜μ΄μŠ€(interface)

μΈν„°νŽ˜μ΄μŠ€λž€?

μΌμ’…μ˜ 좔상화 클래슀

  • μΆ”μƒν΄λž˜μŠ€λ³΄λ‹€ 좔상화 정도가 λ†’μ•„μ„œ λͺΈν†΅μ„ κ°–μΆ˜ 일반 λ©”μ„œλ“œλ‚˜ 멀버 λ³€μˆ˜λ₯Ό κ΅¬μ„±μ›μœΌλ‘œ κ°€μ§ˆ 수 μ—†μŒ
  • μΆ”μƒν΄λž˜μŠ€κ°€ λ―Έμ™„μ„± 섀계도라면 μΈν„°νŽ˜μ΄μŠ€λŠ” κΈ°λ³Έ 섀계도
  • λ‹€λ₯Έ 클래슀λ₯Ό μž‘μ„±ν•˜λŠ” 데 도움을 쀄 λͺ©μ μœΌλ‘œ μž‘μ„±

μΈν„°νŽ˜μ΄μŠ€μ˜ μž‘μ„±

  • ν‚€μ›Œλ“œλ‘œ class λŒ€μ‹  interface
  • μ ‘κ·Ό μ œμ–΄μžλ‘œ publicκ³Ό default μ‚¬μš© κ°€λŠ₯
  • λͺ¨λ“  멀버 λ³€μˆ˜λŠ” public static final이며 이λ₯Ό μƒλž΅ κ°€λŠ₯
  • λͺ¨λ“  λ©”μ„œλ“œλŠ” public abstract이며 μƒλž΅ κ°€λŠ₯
    • JDK1.8λΆ€ν„° staticλ©”μ„œλ“œμ™€ default λ©”μ„œλ“œλŠ” μ˜ˆμ™Έ

μΈν„°νŽ˜μ΄μŠ€μ˜ 상속

  • μΈν„°νŽ˜μ΄μŠ€λŠ” μΈν„°νŽ˜μ΄μŠ€λ‘œλΆ€ν„°λ§Œ 상속받을 수 있음
  • μΈν„°νŽ˜μ΄μŠ€λŠ” 닀쀑 상속이 κ°€λŠ₯

μΈν„°νŽ˜μ΄μŠ€μ˜ κ΅¬ν˜„

  • μƒμ†λ°›λŠ” ν΄λž˜μŠ€μ™€ 크게 λ‹€λ₯Ό 건 μ—†μ§€λ§Œ implementsλ₯Ό μ‚¬μš©
  • μΈν„°νŽ˜μ΄μŠ€ λ©”μ„œλ“œ μΌλΆ€λ§Œ κ΅¬ν˜„ν•˜λŠ” ν΄λž˜μŠ€λŠ” abstractλ₯Ό λΆ™μ—¬μ„œ μΆ”μƒν΄λž˜μŠ€λ‘œ μ„ μ–Έ
  • 상속과 κ΅¬ν˜„μ„ λ™μ‹œμ— ν•  수 있음
  • μΈν„°νŽ˜μ΄μŠ€λŠ” 보톡 ~ν•  수 μžˆλ‹€.λŠ” 의미의 able둜 λλ‚˜λŠ” 이름 μ‚¬μš©

μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ΄μš©ν•œ 닀쀑 상속

  • μΈν„°νŽ˜μ΄μŠ€λŠ” static μƒμˆ˜λ§Œ μ •μ˜ν•  수 μžˆμœΌλ―€λ‘œ 좩돌이 적고 클래슀 μ΄λ¦„μœΌλ‘œ ꡬ뢄 κ°€λŠ₯
  • 두 개의 ν΄λž˜μŠ€λ‘œλΆ€ν„° 상속을 λ°›μ•„μ•Ό ν•˜λŠ” 상황에선 비쀑이 높은 μͺ½μ„ 선택 ν›„ λ‹€λ₯Έ μͺ½μ€ 클래슀 내뢀에 λ©€λ²„λ‘œ 포함 μ‹œν‚€λŠ” λ°©μ‹μœΌλ‘œ κ΅¬ν˜„
    • μ΄λ•Œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μƒˆλ‘œ μž‘μ„±ν•˜μ—¬ λ‹€ν˜•μ  νŠΉμ„±μ„ μ΄μš©ν•  수 있음

μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ΄μš©ν•œ λ‹€ν˜•μ„±

  • μΈν„°νŽ˜μ΄μŠ€λ„ 이λ₯Ό κ΅¬ν˜„ν•œ 클래슀의 쑰상
    • ν•΄λ‹Ή μΈν„°νŽ˜μ΄μŠ€ νƒ€μž…μ˜ μ°Έμ‘° λ³€μˆ˜λ‘œ 이λ₯Ό κ΅¬ν˜„ν•œ 클래슀의 μΈμŠ€ν„΄μŠ€ μ°Έμ‘° κ°€λŠ₯
    • μΈν„°νŽ˜μ΄μŠ€ νƒ€μž…μœΌλ‘œμ˜ ν˜•λ³€ν™˜λ„ κ°€λŠ₯
    • μΈν„°νŽ˜μ΄μŠ€λŠ” λ§€κ°œλ³€μˆ˜μ˜ νƒ€μž…μœΌλ‘œλ„ μ‚¬μš©λ  수 있음
    • 리턴 νƒ€μž…μœΌλ‘œ μΈν„°νŽ˜μ΄μŠ€μ˜ νƒ€μž…μ„ μ§€μ •ν•˜λŠ” 것 μ—­μ‹œ κ°€λŠ₯(ν•΄λ‹Ή μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•œ 클래슀의 μΈμŠ€ν„΄μŠ€λ₯Ό λ°˜ν™˜)

μΈν„°νŽ˜μ΄μŠ€μ˜ μž₯점

개발 μ‹œκ°„μ„ λ‹¨μΆ•μ‹œν‚¬ 수 있음

  • ν˜ΈμΆœν•˜λŠ” μͺ½μ—μ„œλŠ” μ„ μ–ΈλΆ€λ§Œ μ•Œλ©΄ μž‘μ—… κ°€λŠ₯
  • λ‹€λ₯Έ ν•œμͺ½μ—μ„  κ΅¬ν˜„ν•˜λŠ” 클래슀λ₯Ό μž‘μ„±

ν‘œμ€€ν™”κ°€ κ°€λŠ₯

  • κ°œλ°œμžλ“€μ—κ²Œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•˜μ—¬ ν”„λ‘œκ·Έλž¨μ˜ κΈ°λ³Έ 틀을 μž‘μ„±ν•˜λ„λ‘ 함
  • μ •ν˜•ν™”λœ ν”„λ‘œκ·Έλž¨μ˜ 개발이 κ°€λŠ₯

μ„œλ‘œ κ΄€κ³„μ—†λŠ” ν΄λž˜μŠ€λ“€μ—κ²Œ 관계λ₯Ό λ§Ίμ–΄ 쀄 수 있음

  • ν•˜λ‚˜μ˜ μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ³΅ν†΅μ μœΌλ‘œ κ΅¬ν˜„ν•˜κ²Œ ν•˜λ©΄μ„œ 관계λ₯Ό 맺어쀄 수 있음

독립적인 ν”„λ‘œκ·Έλž˜λ°μ΄ κ°€λŠ₯

  • μ„ μ–Έκ³Ό κ΅¬ν˜„μ„ μΈν„°νŽ˜μ΄μŠ€λ‘œ 뢄리 κ°€λŠ₯
  • ν΄λž˜μŠ€μ™€ 클래슀 κ°„μ˜ 관계λ₯Ό 직접적인 κ΄€κ³„μ—μ„œ 간접적인 κ΄€κ³„λ‘œ λ³€κ²½

μΈν„°νŽ˜μ΄μŠ€μ˜ 이해

  • 염두 ν•΄μ•Ό ν•  것
    • 클래슀λ₯Ό μ‚¬μš©ν•˜λŠ” μͺ½κ³Ό μ œκ³΅ν•˜λŠ” μͺ½μ΄ 있음
    • λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜λŠ” μͺ½μ€ μ‚¬μš©ν•˜λ €λŠ” λ©”μ„œλ“œμ˜ μ„ μ–ΈλΆ€λ§Œ μ•Œλ©΄ 됨
  • 직접적인 관계인 클래슀 두 개λ₯Ό ν•œ μͺ½μ€ μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•˜κ³  ν•œ μͺ½μ€ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ‚¬μš©ν•˜κ²Œ μž‘μ„±
    • 두 ν΄λž˜μŠ€λŠ” μΈν„°νŽ˜μ΄μŠ€λ₯Ό 맀개체둜 κ°„μ ‘μ μœΌλ‘œ 관계가 변경됨
    • μ‚¬μš©ν•˜λŠ” μͺ½μ€ κ΅¬ν˜„λœ μͺ½μ˜ 영ν–₯을 받지 μ•Šκ³  κ΅¬ν˜„λœ 클래슀의 이름을 λͺ°λΌλ„, 아직 κ΅¬ν˜„μ΄ μ•ˆ λ˜μ–΄μžˆμ–΄λ„ λ¬Έμ œκ°€ λ˜μ§€ μ•ŠμŒ

λ””ν΄νŠΈ λ©”μ„œλ“œμ™€ static λ©”μ„œλ“œ

  • JDK 1.8λΆ€ν„° 좔상 λ©”μ„œλ“œ 외에 λ””ν΄νŠΈ λ©”μ„œλ“œμ™€ static λ©”μ„œλ“œκ°€ μΆ”κ°€
  • static λ©”μ„œλ“œ
    • java.util.Collectionsκ°€ μ˜ˆμ‹œ (static λ©”μ„œλ“œκ°€ κ΅¬ν˜„λ˜κΈ° 전이라 λ§Œλ“€μ–΄μ§)
    • μ ‘κ·Ό μ œμ–΄μžλŠ” public, μƒλž΅ κ°€λŠ₯
  • λ””ν΄νŠΈ λ©”μ„œλ“œ
    • 좔상 λ©”μ„œλ“œκ°€ μ•„λ‹˜ (μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•œ ν΄λž˜μŠ€λ“€μ—κ²Œ 영ν–₯을 λ―ΈμΉ˜μ§€ μ•ŠμŒ)
    • μ ‘κ·Ό μ œμ–΄μžλŠ” public, μƒλž΅ κ°€λŠ₯
    • 쑰상 클래슀의 λ©”μ„œλ“œμ™€ 좩돌 μ‹œ λ””ν΄νŠΈ λ©”μ„œλ“œλŠ” λ¬΄μ‹œλ˜κ³  쑰상 클래슀의 λ©”μ„œλ“œκ°€ 상속
    • μ—¬λŸ¬ μΈν„°νŽ˜μ΄μŠ€ λ””ν΄νŠΈ λ©”μ„œλ“œ κ°„μ˜ μΆ©λŒμ€ κ΅¬ν˜„ν•œ ν΄λž˜μŠ€μ—μ„œ λ””ν΄νŠΈ λ©”μ„œλ“œλ₯Ό μ˜€λ²„λΌμ΄λ”©ν•΄μ•Ό 함

λ‚΄λΆ€ 클래슀(inner class)

λ‚΄λΆ€ ν΄λž˜μŠ€λž€?

  • 클래슀 내에 μ„ μ–Έλœ 클래슀
  • μž₯점
    • λ‚΄λΆ€ ν΄λž˜μŠ€μ—μ„œ μ™ΈλΆ€ 클래슀의 멀버듀을 μ‰½κ²Œ μ ‘κ·Ό
    • μ½”λ“œμ˜ λ³΅μž‘μ„±μ„ 쀄일 수 있음 (μΊ‘μŠν™”)
  • 감싸고 μžˆλŠ” ν΄λž˜μŠ€λŠ” μ™ΈλΆ€ 클래슀, μ•ˆμ— μžˆλŠ” ν΄λž˜μŠ€λŠ” λ‚΄λΆ€ 클래슀

λ‚΄λΆ€ 클래슀의 μ’…λ₯˜μ™€ νŠΉμ§•

  • λ³€μˆ˜μ˜ μ„ μ–Έ μœ„μΉ˜μ— λ”°λ₯Έ μ’…λ₯˜μ™€ κ°™μŒ
  • μΈμŠ€ν„΄μŠ€ 클래슀
    • μ™ΈλΆ€ 클래슀의 멀버 λ³€μˆ˜ μ„ μ–Έ μœ„μΉ˜μ— μ„ μ–Έ
    • μ™ΈλΆ€ 클래슀의 μΈμŠ€ν„΄μŠ€ λ©€λ²„μ²˜λŸΌ 닀루어짐
    • μ™ΈλΆ€ 클래슀의 μΈμŠ€ν„΄μŠ€ 멀버듀과 κ΄€λ ¨λœ μž‘μ—…μ— μ‚¬μš©λ  λͺ©μ μœΌλ‘œ 주둜 μ‚¬μš©
  • μŠ€νƒœν‹± 클래슀
    • μ™ΈλΆ€ 클래슀의 멀버 λ³€μˆ˜ μ„ μ–Έ μœ„μΉ˜μ— μ„ μ–Έ
    • μ™ΈλΆ€ 클래슀의 static λ©€λ²„μ²˜λŸΌ 닀루어짐
    • 주둜 μ™ΈλΆ€ 클래슀의 staic 멀버(특히 static λ©”μ„œλ“œ)μ—μ„œ μ‚¬μš©λ  λͺ©μ 
  • 지역 클래슀
    • μ™ΈλΆ€ 클래슀의 λ©”μ„œλ“œλ‚˜ μ΄ˆκΈ°ν™” λΈ”λŸ­ μ•ˆμ— μ„ μ–Έ
    • μ„ μ–Έλœ μ˜μ—­ λ‚΄λΆ€μ—μ„œλ§Œ μ‚¬μš© κ°€λŠ₯
  • 읡λͺ… 클래슀
    • 클래슀의 μ„ μ–Έκ³Ό 객체의 생성을 λ™μ‹œμ— ν•˜λŠ” 일회용 이름 μ—†λŠ” 클래슀

λ‚΄λΆ€ 클래슀의 μ„ μ–Έ

  • λ‚΄λΆ€ 클래슀의 μ„ μ–Έ μœ„μΉ˜κ°€ λ³€μˆ˜μ˜ μ„ μ–Έ μœ„μΉ˜μ™€ 동일
  • λ³€μˆ˜μ™€ λ™μΌν•œ μœ νš¨λ²”μœ„μ™€ 접근성을 가짐

λ‚΄λΆ€ 클래슀의 μ œμ–΄μžμ™€ μ ‘κ·Όμ„±

  • λ‚΄λΆ€ ν΄λž˜μŠ€κ°€ μ™ΈλΆ€ 클래슀의 멀버와 같이 간주됨
  • μΈμŠ€ν„΄μŠ€ 멀버와 static 멀버 κ°„μ˜ κ·œμΉ™μ΄ λ‚΄λΆ€ ν΄λž˜μŠ€μ—λ„ λ™μΌν•˜κ²Œ 적용
  • abstractλ‚˜ finalκ³Ό 같은 μ œμ–΄μžλ₯Ό μ‚¬μš© κ°€λŠ₯
  • private, protected와 같은 μ ‘κ·Ό μ œμ–΄μžλ„ μ‚¬μš© κ°€λŠ₯

읡λͺ… 클래슀

  • 클래슀의 μ„ μ–Έκ³Ό 객체의 생성을 λ™μ‹œμ— 함
  • 단 ν•œ 번만 μ‚¬μš©λ  수 있고 였직 ν•˜λ‚˜μ˜ κ°μ²΄λ§Œμ„ μƒμ„±ν•˜λŠ” 일회용 클래슀
    new μ‘°μƒν΄λž˜μŠ€μ΄λ¦„() {
        // 멀버 μ„ μ–Έ
    }

    λ˜λŠ”

    new κ΅¬ν˜„μΈν„°νŽ˜μ΄μŠ€μ΄λ¦„() {
        // 멀버 μ„ μ–Έ
    }
  • 읡λͺ… ν΄λž˜μŠ€λŠ” 이름이 μ—†κΈ° λ•Œλ¬Έμ— μ™ΈλΆ€ 클래슀λͺ…$숫자.class의 ν˜•μ‹μœΌλ‘œ 클래슀 파일λͺ…이 κ²°μ •