πŸ“™ Java

[Java] 좔상화(Abstraction)

ji_wonna 2022. 9. 7. 16:15

μžλ°”μ—μ„œλŠ” 좔상 ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€λ₯Ό ν™œμš©ν•˜μ—¬ 좔상화λ₯Ό κ΅¬ν˜„ν•œλ‹€.

 

 

abstract μ œμ–΄μž

‘좔상적인’μ΄λΌλŠ” 의미λ₯Ό κ°–κ³  μžˆλŠ” abstract μ œμ–΄μžλ₯Ό μ‚¬μš©ν•˜μ—¬ 좔상 λ©”μ„œλ“œμ™€ 좔상 클래슀λ₯Ό λ‚˜νƒ€λ‚Έλ‹€.

좔상 λ©”μ„œλ“œλŠ” λ©”μ„œλ“œμ˜ μ‹œκ·Έλ‹ˆμ²˜(이름, λ§€κ°œλ³€μˆ˜)만 있고 κ΅¬μ²΄ν™”λœ λ°”λ””λŠ” μ—†λŠ” λ©”μ„œλ“œμ΄λ©° 좔상 λ©”μ„œλ“œκ°€ ν•˜λ‚˜ 이상 λ“€μ–΄μžˆλŠ” 클래슀λ₯Ό 좔상 클래슀라고 ν•œλ‹€.

κ΅¬μ²΄ν™”λ˜μ§€ μ•Šμ€ 좔상 ν΄λž˜μŠ€λ§Œμ„ 기반으둜 객체 생성은 ν•  수 μ—†λ‹€. ν•˜μ§€λ§Œ μƒμ†κ΄€κ³„μ˜ μƒμœ„ ν΄λž˜μŠ€μ—μ„œ 이λ₯Ό ν™œμš©ν•˜λ©΄ ν•˜μœ„ ν΄λž˜μŠ€μ—μ„œ 좔상 λ©”μ„œλ“œμ˜ λ°”λ””λ₯Ό κ΅¬ν˜„ν•˜μ—¬ 각 상황에 맞게 효율적으둜 μ½”λ“œλ₯Ό μž‘μ„±ν•  수 μžˆλ‹€.

 

 

 

final μ œμ–΄μž

final μ œμ–΄μžκ°€ μ•žμ— λΆ™μœΌλ©΄ κ°’ 변경이 λΆˆκ°€λŠ₯ν•˜κ±°λ‚˜ ν™•μž₯λ˜μ§€ μ•ŠλŠ” μ„±μ§ˆμ„ λ‚˜νƒ€λ‚Έλ‹€.

λ©”μ„œλ“œ μ•žμ— 있으면 ν•΄λ‹Ή λ©”μ„œλ“œλŠ” μ˜€λ²„λΌμ΄λ”©μ΄ λΆˆκ°€λŠ₯ν•˜κ³  클래슀 μ•žμ— λΆ™μœΌλ©΄ 상속할 수 μ—†μŒμ„ μ˜λ―Έν•œλ‹€.

 


 

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

μΈν„°νŽ˜μ΄μŠ€λŠ” 좔상화λ₯Ό κ΅¬ν˜„ν•  수 μžˆλŠ” μžλ°” 문법 μš”μ†Œ 쀑 ν•˜λ‚˜μ΄λ‹€. 좔상 ν΄λž˜μŠ€λŠ” 좔상 λ©”μ„œλ“œκ°€ ν•˜λ‚˜ 이상 ν¬ν•¨λ˜λ©΄ ν•΄λ‹Ήλμ§€λ§Œ μΈν„°νŽ˜μ΄μŠ€λŠ” 좔상 λ©”μ„œλ“œμ™€ μƒμˆ˜λ§Œμ„ λ©€λ²„λ‘œ κ°€μ§ˆ 수 μžˆλ‹€λŠ” μ μ—μ„œ 좔상 ν΄λž˜μŠ€μ— λΉ„ν•΄ 좔상화 정도가 λ†’λ‹€κ³  λ³Ό 수 μžˆλ‹€.

 

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

μΈν„°νŽ˜μ΄μŠ€λŠ” class λŒ€μ‹  interface ν‚€μ›Œλ“œλ‘œ μž‘μ„±ν•œλ‹€. μΈν„°νŽ˜μ΄μŠ€ 내에 μƒμˆ˜λ₯Ό μ •μ˜ν•˜λŠ” 경우 public static final둜, λ©”μ„œλ“œλ₯Ό μ •μ˜ν•˜λŠ” κ²½μš°μ—λŠ” public abstract둜 μ •μ˜ν•΄μ•Ό ν•œλ‹€. ν•˜μ§€λ§Œ μƒλž΅ν•΄λ„ μ»΄νŒŒμΌλŸ¬κ°€ μžλ™μœΌλ‘œ μΆ”κ°€ν•΄μ€€λ‹€.

이제 선언은 ν–ˆμœΌλ‹ˆ κ΅¬μ²΄ν™”μ‹œμΌœμ£ΌλŠ” λ©”μ„œλ“œ λ°”λ””λ₯Ό 클래슀둜 μž‘μ„±ν•΄μ•Ό ν•œλ‹€. 상속과 λΉ„μŠ·ν•˜μ§€λ§Œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•  λ•Œμ—λŠ” implements ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•œλ‹€. 이 ν΄λž˜μŠ€μ—μ„œλŠ” μΈν„°νŽ˜μ΄μŠ€μ— μ„ μ–Έλœ λͺ¨λ“  좔상 λ©”μ„œλ“œλ₯Ό μ˜€λ²„λΌμ΄λ”©ν•˜μ—¬ κ΅¬ν˜„ν•΄μ•Ό ν•œλ‹€.

또, μΈν„°νŽ˜μ΄μŠ€μ—μ„œλŠ” 닀쀑적 κ΅¬ν˜„μ΄ κ°€λŠ₯ν•˜λ‹€. ν΄λž˜μŠ€μ™€λŠ” 달리 κ΅¬μ²΄ν™”λ˜μ§€ μ•Šμ€ 멀버λ₯Ό κ°–κ³  μžˆμ–΄μ„œ 좩돌의 여지가 μ—†κΈ° λ•Œλ¬Έμ΄λ‹€. λ”°λΌμ„œ ν•˜λ‚˜μ˜ ν΄λž˜μŠ€κ°€ μ—¬λŸ¬ 개의 μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•  수 μžˆλ‹€. 클래슀의 Object와 같은 μ΅œμƒμœ„ ν΄λž˜μŠ€κ°€ μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ”λ‹€λŠ” 점도 ν΄λž˜μŠ€μ™€ 차이λ₯Ό 보인닀.

class ExClass implements ExInterface1, ExInterface2, ExInterface3 { 
                //
}

 

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

μ–΄λ– ν•œ κΈ°λŠ₯이 κ°€μ§€λŠ” μ—­ν• (λ©”μ„œλ“œ μ„ μ–Έ)κ³Ό κ΅¬ν˜„(λ©”μ„œλ“œ λ°”λ””)을 λΆ„λ¦¬μ‹œμΌœμ„œ μ½”λ“œ λ³€κ²½ μ‹œμ˜ λ²ˆκ±°λ‘œμ›€μ„ μ΅œμ†Œν™”ν•˜λ©° 독립적인 ν”„λ‘œκ·Έλž˜λ°μ΄ κ°€λŠ₯ν•˜λ‹€.

'πŸ“™ Java' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[Java] μ»¬λ ‰μ…˜(Collection)  (3) 2022.09.17
[Java] μ œλ„€λ¦­κ³Ό μ˜ˆμ™Έ 처리  (0) 2022.09.16
[Java] λ‹€ν˜•μ„±(Polymorphism)  (0) 2022.09.07
[Java] μΊ‘μŠν™” πŸ’Š  (0) 2022.09.06
[Java] 상속(Inheritance)  (0) 2022.09.06