[JAVA] 11. 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°11. λ‚΄λΆ€ν΄λž˜μŠ€, 읡λͺ…ν΄λž˜μŠ€

2022. 4. 30. 22:44ㆍJAVA/μžλ°”μ˜ 정석

728x90

https://hyejin.tistory.com/571

 

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

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

hyejin.tistory.com

 

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

λ³€μˆ˜κ°€ μ„ μ–Έλœ μœ„μΉ˜μ— 따라 μΈμŠ€ν„΄μŠ€ λ³€μˆ˜, 클래슀 λ³€μˆ˜(static λ³€μˆ˜), μ§€μ—­λ³€μˆ˜λ‘œ λ‚˜λ‰˜λ“―μ΄ λ‚΄λΆ€ ν΄λž˜μŠ€λ„ 이와 λ§ˆμ°¬κ°€μ§€λ‘œ μ„ μ–Έλœ μœ„μΉ˜μ— 따라 λ‚˜λ‰œλ‹€. 

각 λ‚΄λΆ€ 클래슀의 μ„ μ–Έμœ„μΉ˜μ— 따라 μ„ μ–Έμœ„μΉ˜μ˜ λ³€μˆ˜μ™€ λ™μΌν•œ μœ νš¨λ²”μœ„(scope)와 접근성을 κ°–λŠ”λ‹€

 

class Outer {

   class InstanceInner {}  // μΈμŠ€ν„΄μŠ€ λ‚΄λΆ€ 클래슀 

   static class StaticInner {}  // μŠ€νƒœν‹± λ‚΄λΆ€ 클래슀 

 

   void myMethod() {

       class Localnner {} // 지역 λ‚΄λΆ€ 클래슀 

  }

}  

 

 

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

μΈμŠ€ν„΄μŠ€ ν΄λž˜μŠ€μ™€ μŠ€νƒœν‹± ν΄λž˜μŠ€λŠ” μ™ΈλΆ€ 클래슀의 λ©€λ²„λ³€μˆ˜μ™€ 같은 μœ„μΉ˜μ— μ„ μ–Έλ˜κ³ , λ©€λ²„λ³€μˆ˜μ™€ 같은 μ„±μ§ˆμ„ κ°–λŠ”λ‹€. 

λ”°λΌμ„œ λ‚΄λΆ€ ν΄λž˜μŠ€κ°€ μ™ΈλΆ€ 클래슀의 멀버와 같이 κ°„μ£Όλ˜κ³ , μΈμŠ€ν„΄μŠ€ 멀버와 static 멀버 κ°„μ˜ κ·œμΉ™μ΄ λ‚΄λΆ€ ν΄λž˜μŠ€μ—λ„ λ˜‘κ°™μ΄ μ μš©λœλ‹€. 

 

그리고 λ‚΄λΆ€ ν΄λž˜μŠ€λ„ 클래슀이기 λ•Œλ¬Έμ— abstract, final 같은 μ œμ–΄μžλ₯Ό μ‚¬μš©ν•  수 μžˆμ„ 뿐만 μ•„λ‹ˆλΌ, 

λ©€λ²„λ³€μˆ˜λ“€μ²˜λŸΌ Private, protected 같은 μ ‘κ·Όμ œμ–΄λ„ μ‚¬μš©μ΄ κ°€λŠ₯ν•˜λ‹€. 

좜λ ₯ κ²°κ³Ό 100, 200

λ‚΄λΆ€ 클래슀 μ€‘μ—μ„œλŠ” μŠ€νƒœν‹± 클래슀만 static 멀버λ₯Ό κ°€μ§ˆ 수 μžˆλ‹€. 

근데 final static 이 λ™μ‹œμ— 뢙은 λ³€μˆ˜λŠ” μƒμˆ˜μ΄κΈ° λ•Œλ¬Έμ— λͺ¨λ“  λ‚΄λΆ€ ν΄λž˜μŠ€μ—μ„œ μ„ μ–Έν•  수 μžˆλ‹€.

 

μΈμŠ€ν„΄μŠ€ λ©€λ²„λŠ” 같은 ν΄λž˜μŠ€μ— μžˆλŠ” μΈμŠ€ν„΄μŠ€ 멀버와 static 멀버 λͺ¨λ‘ 직접 호좜이 κ°€λŠ₯ν•˜μ§€λ§Œ, static λ©€λ²„λŠ” μΈμŠ€ν„΄μŠ€ 멀버λ₯Ό 직접 ν˜ΈμΆœν•  수 μ—†λŠ” 것 처럼, μΈμŠ€ν„΄μŠ€ ν΄λž˜μŠ€λŠ” μ™ΈλΆ€ 클래슀의 μΈμŠ€ν„΄μŠ€ 멀버λ₯Ό 객체생성 없이 λ°”λ‘œ μ‚¬μš©ν•  수 μžˆμ§€λ§Œ, μŠ€νƒœν‹± ν΄λž˜μŠ€λŠ” μ™ΈλΆ€ 클래슀의 μΈμŠ€ν„΄μŠ€ 멀버λ₯Ό 객체생성 없이 μ‚¬μš©ν•  수 μ—†λ‹€. 

 

λ§ˆμ°¬κ°€μ§€λ‘œ μΈμŠ€ν„΄μŠ€ ν΄λž˜μŠ€λŠ” μŠ€νƒœν‹± 클래슀의 멀버듀을 객체 생성 없이 μ‚¬μš©ν•  수 μžˆμ§€λ§Œ, μŠ€νƒœν‹± ν΄λž˜μŠ€μ—μ„œλŠ” μΈμŠ€ν„΄μŠ€ν΄λž˜μŠ€μ˜ 멀버듀을 객체생성 없이 μ‚¬μš©ν•  수 μ—†λ‹€. 

 

μΈμŠ€ν„΄μŠ€ 클래슀 (InstancInnser)λŠ” μ™ΈλΆ€ν΄λž˜μŠ€μ˜ μΈμŠ€ν„΄μŠ€ 멀버이기 λ•Œλ¬Έμ— μΈμŠ€ν„΄μŠ€ outerIv와 outerCvλ₯Ό λͺ¨λ‘ μ‚¬μš©ν•  수 μžˆλ‹€. 심지어 outerIv의 μ ‘κ·Ό μ œμ–΄μžκ°€ private 일지라도 μ‚¬μš© κ°€λŠ₯ν•˜λ‹€. 

 

μŠ€νƒœν‹± 클래슀 (StaticInner) λŠ” μ™ΈλΆ€ 클래슀의 static 멀버이기 λ•Œλ¬Έμ— μ™ΈλΆ€ 클래슀의 μΈμŠ€ν„΄μŠ€ 멀버인 outerIv와 InstanceInner λ₯Ό μ‚¬μš©ν•  수 μ—†λ‹€. 단지 static 멀버인 outerCv만 μ‚¬μš©ν•  수 μžˆλ‹€. 

 

지역 클래슀 (LocalInner)λŠ” μ™ΈλΆ€ 클래슀의 μΈμŠ€ν„΄μŠ€ 멀버와 static 멀버λ₯Ό λͺ¨λ‘ μ‚¬μš©ν•  수 있으며, 지역 ν΄λž˜μŠ€κ°€ ν¬ν•¨λœ λ©”μ„œλ“œμ— μ •μ˜λœ μ§€μ—­λ³€μˆ˜λ„ μ‚¬μš©ν•  수 μžˆλ‹€.

단, final 이 뢙은 μ§€μ—­λ³€μˆ˜λ§Œ μ ‘κ·Ό κ°€λŠ₯ν•œλ° κ·Έ μ΄μœ λŠ” λ©”μ„œλ“œκ°€ μˆ˜ν–‰μ„ λ§ˆμ³μ„œ μ§€μ—­λ³€μˆ˜κ°€ μ†Œλ©Έλœ μ‹œμ μ—λ„ 지역 클래슀의 μΈμŠ€ν„΄μŠ€κ°€ μ†Œλ©Έλœ μ§€μ—­λ³€μˆ˜λ₯Ό μ°Έμ‘°ν•˜λŠ” κ²½μš°κ°€ λ°œμƒν•  수 있기 λ•Œλ¬Έμ΄λ‹€. 

-> jdk1.8 λΆ€ν„° μ§€μ—­ν΄λž˜μŠ€μ—μ„œ μ ‘κ·Όν•˜λŠ” μ§€μ—­λ³€μˆ˜ μ•žμ— final을 μƒλž΅ν•  수 μž‡κ²Œ λ°”λ€Œμ—ˆλ‹€. 

λŒ€μ‹  μ»΄νŒŒμ΄λŸ¬κ°€ μžλ™μœΌλ‘œ λΆ™μ—¬μ€€λ‹€. 즉, νŽΈμ˜μƒ final을 μƒλž΅ν•  수 있게 ν•œ 것일 뿐이닀. ν•΄λ‹Ή λ³€μˆ˜μ˜ 값이 λ°”λ€ŒλŠ” λ¬Έμž₯이 있으면 컴파일 μ—λŸ¬κ°€ λ°œμƒν•œλ‹€. 

 

-> μ™ΈλΆ€ ν΄λž˜μŠ€κ°€ μ•„λ‹Œ λ‹€λ₯Έ ν΄λž˜μŠ€μ—μ„œ λ‚΄λΆ€ 클래슀λ₯Ό μƒμ„±ν•˜κ³  λ‚΄λΆ€ 클래슀의 멀버에 μ ‘κ·Όν•˜λŠ” μ˜ˆμ œμ΄λ‹€. 

 

μΈμŠ€ν„΄μŠ€ 클래슀의 μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•˜λ €λ©΄ μ™ΈλΆ€ 클래슀의 μΈμŠ€ν„΄μŠ€λ₯Ό λ¨Όμ € 생성해야 ν•œλ‹€. 

근데 static λ‚΄λΆ€ 클래슀의 μΈμŠ€ν„΄μŠ€λŠ” μ™ΈλΆ€ 클래슀λ₯Ό λ¨Όμ € μƒμ„±ν•˜μ§€ μ•Šμ•„λ„ λœλ‹€. 

 

λ‚΄λΆ€ ν΄λž˜μŠ€μ™€ μ™ΈλΆ€ ν΄λž˜μŠ€μ— μ„ μ–Έλœ λ³€μˆ˜μ˜ 이름이 같을 λ•Œ λ³€μˆ˜ μ•žμ— this λ˜λŠ” μ™ΈλΆ€ν΄λž˜μŠ€λͺ….thisλ₯Ό λΆ™μ—¬μ„œ μ„œλ‘œ ꡬ별할 수 μžˆλ‹€. 

 

 

3️⃣ 읡λͺ… 클래슀 Anonymous Class 

읡λͺ… ν΄λž˜μŠ€λŠ” λ‚΄λΆ€ ν΄λž˜μŠ€λ“€κ³Ό 달리 이름이 μ—†λŠ” 일회용 ν΄λž˜μŠ€μ΄λ‹€. 

클래슀의 μ„ μ–Έκ³Ό 객체 생성을 λ™μ‹œμ— ν•˜κΈ° λ•Œλ¬Έμ— 단 ν•œλ²ˆλ§Œ μ‚¬μš©λ  수 있고, 였직 ν•˜λ‚˜μ˜ κ°μ²΄λ§Œμ„ 생성할 수 μžˆλŠ” 일회용 ν΄λž˜μŠ€μ΄λ‹€. 

 

-> 읡λͺ… 클래슀 μ „ 

 

-> 읡λͺ… 클래슀 ν›„ 

 

 

 

 

 

 

 

 

 

 

 

 

728x90