2022. 4. 30. 22:44γJAVA/μλ°μ μ μ
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 κ°μ μ κ·Όμ μ΄λ μ¬μ©μ΄ κ°λ₯νλ€.
λ΄λΆ ν΄λμ€ μ€μμλ μ€νν± ν΄λμ€λ§ 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
μ΅λͺ ν΄λμ€λ λ΄λΆ ν΄λμ€λ€κ³Ό λ¬λ¦¬ μ΄λ¦μ΄ μλ μΌνμ© ν΄λμ€μ΄λ€.
ν΄λμ€μ μ μΈκ³Ό κ°μ²΄ μμ±μ λμμ νκΈ° λλ¬Έμ λ¨ νλ²λ§ μ¬μ©λ μ μκ³ , μ€μ§ νλμ κ°μ²΄λ§μ μμ±ν μ μλ μΌνμ© ν΄λμ€μ΄λ€.
-> μ΅λͺ ν΄λμ€ μ
-> μ΅λͺ ν΄λμ€ ν