복잡한뇌구조마냥

[JAVA] 내부클래스 본문

BE/JAVA

[JAVA] 내부클래스

지금해냥 2025. 6. 7. 15:28

내부 클래스

- 클래스 안에 선언된 클래스

 

1. 중첩클래스 ( 인스턴스 클래스 )

- 클래스 안에 인스턴스 변수, 즉 필드를 선언하는 위치에 선언되는 경우

public class InnerExam {
    class Cal{
        int value = 0;
        public void plus(){
            value++;
        }
    }
    
    public static void main(String[] args) {
        calcExam cal = new calcExam();
        calcExam.Cal cal1 = cal.new Cal();
        cal1.plus();
        System.out.println(cal1.value);
    }
}

2. 정적 중첩 클래스 ( static 클래스 )

- 내부 클래스가 static으로 정의된 경우

public class InnerExam2 {
    static class Cal{
        int value = 0;
        public void plus(){
            value++;
        }
    }

    public static void main(String[] args) {
        InnerExam2.Cal cal = new InnerExam2.Cal();
        cal.plus();
        System.out.println(cal.value);
    }
}

3. 지역 중첩 클래스 ( 지역 클래스 )

- 메소드 안에 클래스를 선언한 경우

public class InnerExam3 {
    public void exec(){
        class Cal{
            int value = 0;
            public void plus(){
                value++;
            }
        }

        Cal cal = new Cal();
        cal.plus();
        System.out.println(cal.value);
    }

    public static void main(String[] args) {
        InnerExam3 cal = new InnerExam3();
        cal.exec();
    }
}

4. 익명클래스 ( 익명 중첩 클래스 )

- 추상 클래스를 상속받는 클래스를 만들 필요가 없을 경우

- 추상클래스를 상송 받는 클래스가 해당 클래스에서만 사용되고 다른 클래스에서 사용되지 않는 경우

// Action
public abstract class Action {
    public abstract void exec();
}

 

// MyAction
public class MyAction extends Action {
    @Override
    public void exec() {
        System.out.println("MyAction");
    }
}

 

public class InnerExam4 {
    public static void main(String[] args) {
        // 추상클래스 사용법
        Action action0 = new MyAction();
        action0.exec();
        
        // 익명클래스 사용법
        Action action = new Action() {
            @Override
            public void exec() {
                System.out.println("익명클래스");
            }
        };
        
        action.exec();
    }
}

 

- 생성자 다음에 중괄호를 열고 닫고 나오면, 해당 생성자 이름에 해당하는 클래스를 상송받는 익명의 객체를 만듬

- 괄호 안에는 메소드를 구현하거나 메소드를 추가할 수 있음.

- 예시와 같이 MyAction으로 추상클래스를 선언하는 방식 대신에 Action을 내부에서 익명의 클래스로 선언해서 사용

- 외부 클래스에서 사용하지 않고 바로 사용하는 경우에 적합함.

LIST

'BE > JAVA' 카테고리의 다른 글

[JAVA] java.lang + 오토박싱  (1) 2025.06.09
[JAVA] 예외 처리 ( Exception, Throws, 커스텀 Exception )  (1) 2025.06.07
[JAVA] 오버라이딩, 클래스 형변환  (1) 2025.06.06
[JAVA] 접근제한자  (1) 2025.06.04
[JAVA] 오버로딩  (1) 2025.06.01