[Java] 내부 클래스(Inner Class)

Pongchi·2022년 12월 7일
0

Java의 정석

목록 보기
1/6

내부 클래스(Inner Class)

정의

  • 클래스안에 있는 클래스라는 뜻이다.

특징

  1. 내부 클래스에서 외부 클래스의 멤버들에게 쉽게 접근
  2. 코드의 복잡성을 줄임 ( 캡슐화 )

코드

class AAA {
    int i = 50;
    BBB b = new BBB();

    class BBB {
        void method() {
            System.out.println(i);
        }
    }
}

public class InnerTest {
    public static void main(String[] args) {
        AAA a = new AAA();
        a.b.method();
    }
}

분석

  1. BBB 클래스가 AAA 클래스 안에서만 쓴다는 가정하에 안에 넣는 것임. 만약 다른 클래스도 BBB를 원한다면 당연히 내부 클래스를 하면 안됨.

종류

class OutTer {
    class InstanceInner {}
    static class StaticInner {}

    void method() {
        class LocalInner {}
    }
}

  • 인스턴스 내부 클래스, 스태틱 내부 클래스, 지역 내부 클래스, 익명 내부 클래스
  • 익명 클래스는 다음 글에 따로 포스팅 예정

접근 제어자

  1. 내부 클래스의 접근 제어자(default, public, private, protected..)는 상관없음
  2. 단, static 은 static 클래스만 static 멤버를 정의할 수 있음
  3. 하지만, final static 은 상수이므로 어디서든 static 멤버를 정의할 수 있음
  4. 내부 클래스에서 외부 클래스의 private 멤버에게 접근 가능
  5. 외부 클래스의 지역변수는 final이 붙은 상수만 접근 가능 ( JDK 1.8부터는 지역변수가 값이 변한적이 없었을 경우 final이 안붙어도 가능. )

접근성

  • 외부 클래스의 인스턴스를 먼저 생성해야 인스턴스 클래스의 인스턴스를 생성 가능
  • 스태틱 내부 클래스의 인스턴스는 외부 클래스를 먼저 생성하지 않아도 됨
Outer o = new Outer();
Outer.InstanceInner ii = o.new InstanceInner();
Outer.StaticInner si = new Outer.StaticInner();
profile
- I'm going to be a ???

0개의 댓글