[JAVA] 11. 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°10. μΈν„°νŽ˜μ΄μŠ€ μž₯점, λ””ν΄νŠΈ, static λ©”μ„œλ“œ, λ‚΄λΆ€ 클래슀

2022. 4. 28. 21:27ㆍJAVA/μžλ°”μ˜ 정석

728x90

 

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

- 개발 μ‹œκ°„μ„ 단좕할 수 μžˆλ‹€. 

: 일단 μΈν„°νŽ˜μ΄μŠ€κ°€ μž‘μ„±λ˜λ©΄, 이λ₯Ό μ‚¬μš©ν•΄μ„œ ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜λŠ” 것이 κ°€λŠ₯ν•˜κΈ° λ•Œλ¬Έμ— λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•˜λŠ” μͺ½μ—μ„œλŠ” λ©”μ„œλ“œμ˜ λ‚΄μš©μ— 관계없이 μ„ μ–ΈλΆ€λ§Œ μ•Œλ©΄ 되기 λ•Œλ¬Έμ— 개발 μ‹œκ°„μ„ 단좕할 수 μžˆλ‹€. 

 

- 변경에 μœ λ¦¬ν•œ μœ μ—°ν•œ 섀계가 κ°€λŠ₯ν•˜λ‹€. 

 

- ν‘œμ€€ν™”κ°€ κ°€λŠ₯ν•˜λ‹€. 

 : ν”„λ‘œμ νŠΈμ— μ‚¬μš©λ˜λŠ” κΈ°λ³Έ 틀을 μΈν„°νŽ˜μ΄μŠ€λ‘œ μž‘μ„±ν•œ λ‹€μŒ, κ°œλ°œμžλ“€μ—κ²Œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•˜μ—¬ ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜λ„λ‘ ν•¨μœΌλ‘œμ¨ 보닀 μΌκ΄€λ˜κ³  μ •ν˜•ν™”λœ ν”„λ‘œκ·Έλž¨μ˜ 개발이 κ°€λŠ₯ν•˜λ‹€.

 

- μ„œλ‘œ κ΄€κ³„μ—†λŠ” ν΄λž˜μŠ€λ“€μ„ 관계λ₯Ό 맺어쀄 수 μžˆλ‹€. 

: μ„œλ‘œ 상속관계에 μžˆμ§€λ„ μ•Šκ³ , 같은 쑰상 클래슀λ₯Ό 가지고 μžˆμ§€ μ•Šμ€ μ„œλ‘œ μ•„λ¬΄λŸ° 관계도 μ—†λŠ” ν΄λž˜μŠ€λ“€μ—κ²Œ ν•˜λ‚˜μ˜ μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ³΅ν†΅μ μœΌλ‘œ κ΅¬ν˜„ν•˜λ„λ‘ ν•¨μœΌλ‘œμ¨ 관계λ₯Ό 맺어쀄 수 μžˆλ‹€. 

 

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

: μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ΄μš©ν•˜λ©΄ 클래슀의 μ„ μ–Έκ³Ό κ΅¬ν˜„μ„ λΆ„λ¦¬μ‹œν‚¬μˆ˜ 있기 λ•Œλ¬Έμ— μ‹€μ œκ΅¬ν˜„μ— 독립적인 ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜λŠ” 것이 κ°€λŠ₯ν•˜λ‹€. 

 

 

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

- 클래슀λ₯Ό μ‚¬μš©ν•˜λŠ” μͺ½(User)κ³Ό 클래슀λ₯Ό μ œκ³΅ν•˜λŠ” μͺ½(Provider) 이 μžˆλ‹€. 

- λ©”μ„œλ“œλ₯Ό μ‚¬μš©(호좜)ν•˜λŠ” μͺ½ (User) μ—μ„œλŠ” μ‚¬μš©ν•˜λ €λŠ” λ©”μ„œλ“œ (Provider) 의 μ„ μ–ΈλΆ€λ§Œ μ•Œλ©΄ λœλ‹€. 

- 클래슀 A와 클래슀 B λŠ” μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•˜κ³  λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•œλ‹€. 이 두 ν΄λž˜μŠ€λŠ” μ„œλ‘œ 직접적인 관계에 μžˆλ‹€.

-> 이런 직접적인 κ΄€κ³„μ˜ 두 ν΄λž˜μŠ€λŠ” ν•œ μͺ½ Provider κ°€ λ³€κ²½λ˜λ©΄ λ‹€λ₯Έ ν•œ μͺ½ User 도 λ³€κ²½λ˜μ–΄μ•Ό ν•œλ‹€λŠ” 단점이 μžˆλ‹€. 

 

κ·ΈλŸ¬λ‚˜ 클래슀 A κ°€ 클래슀 B λ₯Ό 직접 ν˜ΈμΆœν•˜μ§€ μ•Šκ³  μΈν„°νŽ˜μ΄μŠ€λ₯Ό 맀개체둜 ν•΄μ„œ 클래슀 Aκ°€ μΈν„°νŽ˜μ΄μŠ€λ₯Ό ν†΅ν•΄μ„œ 클래슀 B의 λ©”μ„œλ“œμ— μ ‘κ·Όν•˜λ„λ‘ ν•˜λ©΄, 클래슀 B에 변경사항이 μƒκΈ°κ±°λ‚˜ 클래슀 B와 같은 κΈ°λŠ₯의 λ‹€λ₯Έ 클래슀둜 λŒ€μ²΄ λ˜μ–΄λ„ 클래슀 AλŠ” μ „ν˜€ 영ν–₯을 받지 μ•Šλ„λ‘ ν•˜λŠ” 것이 κ°€λŠ₯ν•˜λ‹€. 

 

클래슀 AλŠ” μΈν„°νŽ˜μ΄μŠ€λ₯Ό 톡해 μ‹€μ œλ‘œ μ‚¬μš©ν•˜λŠ” 클래슀의 이름을 λͺ°λΌλ„ 되고 μ‹¬μ§€μ–΄λŠ” μ‹€μ œλ‘œ κ΅¬ν˜„λœ ν΄λž˜μŠ€κ°€ μ‘΄μž¬ν•˜μ§€ μ•Šμ•„λ„ λ¬Έμ œλ˜μ§€ μ•ŠλŠ”λ‹€. 클래슀 AλŠ” 였직 직접적인 관계에 μžˆλŠ” μΈν„°νŽ˜μ΄μŠ€ I의 영ν–₯만 λ°›λŠ”λ‹€. 

 

 

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

μ›λž˜λŠ” μΈν„°νŽ˜μ΄μŠ€μ— 좔상 λ©”μ„œλ“œλ§Œ μ„ μ–Έν•  수 μžˆλŠ”λ°, jdk1.8λΆ€ν„° λ””ν΄νŠΈ λ©”μ„œλ“œμ™€ static λ©”μ„œλ“œλ„ μΆ”κ°€ν•  수 있게 λ˜μ—ˆλ‹€. 

-> static λ©”μ„œλ“œλŠ” μΈμŠ€ν„΄μŠ€μ™€ 관계가 μ—†λŠ” 독립적인 λ©”μ„œλ“œμ΄κΈ° λ•Œλ¬Έμ— μΈν„°νŽ˜μ΄μŠ€μ— μΆ”κ°€ν•˜μ§€ λͺ»ν•  μ΄μœ κ°€ μ—†μ—ˆλ‹€!

 

- λ””ν΄νŠΈ λ©”μ„œλ“œ

: 쑰상 ν΄λž˜μŠ€μ— μƒˆλ‘œμš΄ λ©”μ„œλ“œλ₯Ό μΆ”κ°€ν•˜λŠ” 것은 별 일이 μ•„λ‹ˆμ§€λ§Œ, μΈν„°νŽ˜μ΄μŠ€μ˜ κ²½μš°μ—λŠ” 보톡 큰 일이 μ•„λ‹ˆλ‹€. 

μΈν„°νŽ˜μ΄μŠ€μ— λ©”μ„œλ“œλ₯Ό μΆ”κ°€ν•œλ‹€λŠ” 것은, 좔상 λ©”μ„œλ“œλ₯Ό μΆ”κ°€ν•œλ‹€λŠ” 것이고, 이 μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•œ 기쑴의 λͺ¨λ“  ν΄λž˜μŠ€λ“€μ΄ μƒˆλ‘œ μΆ”κ°€λœ λ©”μ„œλ“œλ₯Ό κ΅¬ν˜„ν•΄μ•Όν•˜κΈ° λ•Œλ¬Έμ΄λ‹€. 

 

λ””ν΄νŠΈ λ©”μ„œλ“œλŠ” 좔상 λ©”μ„œλ“œμ˜ 기본적인 κ΅¬ν˜„μ„ μ œκ³΅ν•˜λŠ” λ©”μ„œλ“œλ‘œ, 좔상 λ©”μ„œλ“œκ°€ μ•„λ‹ˆκΈ° λ•Œλ¬Έμ— λ””ν΄νŠΈ λ©”μ„œλ“œκ°€ μƒˆλ‘œ μΆ”κ°€λ˜μ–΄λ„ ν•΄λ‹Ή μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•œ 클래슀λ₯Ό λ³€κ²½ν•˜μ§€ μ•Šμ•„λ„ λœλ‹€. 

 

 

 

4️⃣ λ‚΄λΆ€ 클래슀 inner class 

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

클래슀 내에 μ„ μ–Έλœ ν΄λž˜μŠ€μ΄λ‹€. 

ν•œ 클래슀λ₯Ό λ‹€λ₯Έ 클래슀의 λ‚΄λΆ€ 클래슀둜 μ„ μ–Έν•˜λ©΄ 두 클래슀의 멀버듀 간에 μ„œλ‘œ μ‰½κ²Œ μ ‘κ·Όν•  수 μžˆλ‹€λŠ” μž₯점과 μ™ΈλΆ€μ—λŠ” λΆˆν•„μš”ν•œ 클래슀λ₯Ό 감좀으둜써 μ½”λ“œμ˜ λ³΅μž‘μ„±μ„ 쀄일 수 μžˆλ‹€λŠ” μž₯점을 얻을 수 μžˆλ‹€. 

 

- λ‚΄λΆ€ ν΄λž˜μŠ€μ—μ„œ μ™ΈλΆ€ 클래슀의 멀버듀을 μ‰½κ²Œ μ ‘κ·Όν•  수 μžˆλ‹€. 
- μ½”λ“œμ˜ λ³΅μž‘μ„±μ„ 쀄일 수 μžˆλ‹€. (μΊ‘μŠν™”) 

 

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

λ‚΄λΆ€ 클래슀의 μ’…λ₯˜λŠ” λ³€μˆ˜μ˜ μ„ μ–Έμœ„μΉ˜μ— λ”°λ₯Έ μ’…λ₯˜μ™€ κ°™λ‹€,. 

λ‚΄λΆ€ ν΄λž˜μŠ€λŠ” 마치 λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜λŠ” 것과 같은 μœ„μΉ˜μ— μ„ μ–Έν•  수 있으며, λ³€μˆ˜μ˜ μ„ μ–Έ μœ„μΉ˜μ— 따라 μΈμŠ€ν„΄μŠ€ λ³€μˆ˜, 클래슀 λ³€μˆ˜ static λ³€μˆ˜, μ§€μ—­λ³€μˆ˜λ‘œ κ΅¬λΆ„λ˜λŠ” 것과 같이 λ‚΄λΆ€ ν΄λž˜μŠ€λ„ μ„ μ–Έμœ„μΉ˜μ— 따라 κ΅¬λΆ„λ˜μ–΄ 진닀. 

 

- μΈμŠ€ν„΄μŠ€ 클래슀 instance class 

: μ™ΈλΆ€ 클래슀의 λ©€λ²„λ³€μˆ˜ μ„ μ–Έ μœ„μΉ˜μ— μ„ μ–Έλ˜λ©°, μ™ΈλΆ€ 클래슀의 μΈμŠ€ν„΄μŠ€ λ©€λ²„μ²˜λŸΌ 닀루어진닀. 주둜 μ™ΈλΆ€ 클래슀의 μΈμŠ€ν„΄μŠ€ 멀버듀과 κ΄€λ ¨λ˜ μž‘μ—…μ— μ‚¬μš©λ  λͺ©μ μœΌλ‘œ μ„ μ–Έλœλ‹€. 

 

- μŠ€νƒœν‹± 클래슀 static class

: μ™ΈλΆ€ 클래슀의 λ©€λ²„λ³€μˆ˜ μ„ μ–Έμœ„μΉ˜μ— μ„ μ–Έν•˜λ©°, μ™ΈλΆ€ 클래슀의 static λ©€λ²„μ²˜λŸΌ 닀루어진닀. 주둜 μ™ΈλΆ€ 클래슀의 static 멀버, 특히 static λ©”μ„œλ“œμ—μ„œ μ‚¬μš©λ  λͺ©μ μœΌλ‘œ μ„ μ–Έλœλ‹€. 

 

- 지역 클래슀 local class 

: μ™ΈλΆ€ 클래슀의 λ©”μ„œλ“œλ‚˜ μ΄ˆκΈ°ν™”λΈ”λŸ­ μ•ˆμ— μ„ μ–Έν•˜λ©°, μ„ μ–Έλœ μ˜μ—­ λ‚΄λΆ€μ—μ„œλ§Œ μ‚¬μš©λ  수 μžˆλ‹€. 

 

- 읡λͺ… 클래슀 anonymous class 

: 클래슀의 μ„ μ–Έκ³Ό 객체의 생성을 λ™μ‹œμ— ν•˜λŠ” μ΄λ¦„μ—†λŠ” 클래슀(일회용)

 

 

 

 

 

 

728x90