본문 바로가기
프로그래밍/JAVA

자바의 정석 기초 ( 내부클래스 / 내부클래스 장점 / 익명클래스 )

by ✲ 2020. 7. 19.
반응형

남궁성님의 자바의 정석 기초편을 보면서 혼자 공부하는 공간입니다. 참고 부탁드립니다. 

내부 클래스 (inner class) 

- 클래스 안의 클래스 

class A {                // 외부 클래스 

    class B {            // 내부 클래스 

     ... 

    }

}

내부클래스의 장점 

- 내부 클래스에서 외부 클래스의 멤버들을 쉽게 접근할 수 있다. 

- 코드의 복잡성을 줄일 수 있다. (캡슐화) 

- 내부 클래스의 종류와 유효범위(scope)는 변수와 동일 

class Outer { 

    int v = 0 ; 

    static int cv = 0;

    void myMethod() {

        int lv = 0; 

    }

}

class Outer { 

    class InstanceInner {} 

    static class StaticInner {} 

    void myMethod() { 

        class LocalInner{}

    }

}

내부 클래스 특징
인스턴스 내부 클래스 외부 클래스의 멤버변수 선언위치에 선언하며, 외부 클래스의 인스턴스 멤버처럼 다루어진다. 주로 외부 클래스의 인스턴스멤버들과 관련된 작업에 사용될 목적으로 선언 
스태틱 내부 클래스 외부 클래스의 멤버변수 선언위치에 선언하며, 외부 클래스의 static 멤버처럼 다루어진다. 주로 외부 클래스의 static멤버, 특히 static메서드에서 사용될 목적으로 선언 
지역 내부 클래스 외부 클래스의 메서드나 초기화 블럭 안에 선언하며 선언된 영역 내부에서만 사용될 수 있다. 
익명 클래스 클래스의 선언과 객체의 생성을 동시에 하는 이름없는 클래스 (일회용) 

 

내부 클래스의 제어자와 접근성 

- 내부클래스의 제어자는 변수에 사용 가능한 제어자와 동일 
( 클래스 앞에는 default, public만 가능 / 내부클래스 앞에는 default, public, private, protected 가능) 

 

익명 클래스 (anoymous class) 

- 이름이 없는 일회용 클래스. 정의와 생성을 동시에 

new 조상클래스이름() {

    // 멤버선언 

}

new 구현인터페이싀름() {

    // 멤버선언

}

 

익명 클래스 사용 예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import java.awt.Button;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
 
class Ex7_18 {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Button b  = new Button("Start");
        b.addActionListener(new EventHandler());
    }
 
}
 
class EventHandler implements ActionListener{
    public void actionPerformed(ActionEvent e) {
        System.out.println("ActionEvent occurred!!!");
    }
}
 
cs

 

위의 내용을 아래처럼 익명클래스로 바꿀 수 있다. 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import java.awt.Button;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
 
class Ex7_18_2 {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Button b  = new Button("Start");
        b.addActionListener(new ActionListener() {
            // 클래스의 정의와 객체 생성을 동시에 
            public void actionPerformed(ActionEvent e) {
                System.out.println("ActionEvent occurred!!!");
            }
            
        });
    }
 
}
 
cs

 

반응형

댓글