내부 클래스

서지우·2023년 7월 11일
0

JAVA

목록 보기
20/28

내부클래스란?

- 클래스 안에 선언된 클래스
- 특정 클래스 내에서만 주로 사용되는 클래스를 내부 클래스로 선언함
- GUI어플리케이션(AWT, Swing)의 이벤트처리에 많이 사용됨    

내부 클래스의 장점

- 내부 클래스에서 외부 클래스의 멤버들을 쉽게 접근할 수 있음
- 코드의 복잡성을 줄일 수 있다(캡슐화)

내부 클래스의 종류와 특징

- 내부 클래스의 종류는 변수의 선언위치에 따른 종류와 동일
- 유효범위와 성질도 변수와 유사하므로 비교해보면 이해하기 쉬움


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

- 내부 클래스의 접근제어자는 변수에 사용할 수 있는 접근제어와 동일하다.

- static클래스만 static멤버를 정의할 수 있다.

- 내부 클래스도 외부 클래스의 멤버로 간주되며, 동일한 접근성을 갖는다

- 외부 클래스의 지역변수는 final이 붙은 변수(상수)만 접근가능하다. 지역 클래스의 인스턴스 소멸된 지역변수를 참조할 수 있기 때문이다.


익명 클래스

- 이름이 없는 일회용 클래스
- 선언과 생성을 동시에 함
- 하나의 객체만 생성가능


실습 - ch07 / S09.java

공장으로 예시를 들어봤다.
주석으로 설명..

// 내부 클래스 중 인스턴스 클래스는 메모리 누수 등
// 문제가 발생할 수 있어서 특별한 경우가 아니면 잘 안쓴다

// 삼성공장
// 갤럭시 공장

class 삼성공장{

    // 내부클래스
    // static이 없는 인스턴스 클래스
    // 스마트폰 설계도
    class 갤럭시{
        
    }

    class 냉장고{

    }
}

public class S09 {
    public static void main(String[] args) {

        // 공장 설계도에게 폰을 만들어 달라고 하는 느낌
        // 만들어지지 않는다
        // new 삼성공장.갤럭시();

        // 공장을 상상
        삼성공장 factory;

        // 공장을 짓는다
        factory = new 삼성공장();

        // 공장에서 새 갤럭시 폰을 만듦
        삼성공장.갤럭시 phone = factory.new 갤럭시();
        삼성공장.냉장고 ref = factory.new 냉장고();

        삼성공장 factory1 = new 삼성공장();

        factory1.new 갤럭시();
    }
}

실습 - ch07 / S10.java

종이접기책으로 예시를 들어봤다.
주석으로 설명..

class 종이접기책목차{

    // 종이로 학을 접는 방법
    // 방법대로 만들면 종이학(인스턴스)
    static class{

    }
}

public class S10 {
    public static void main(String[] args) {
        
        // 클래스의 내부 static 클래스가 실제 클래스이고
        // 외부의 클래스는 내부 static 클래스에 접근할 경로를 제공하는 느낌
        // 외부의 클래스는 내부 static 클래스의 패키지와 비슷
        종이접기책목차.학 bird = new 종이접기책목차.();
    }
}
profile
미래가 기대되는 풀스택개발자 공부 이야기~~

0개의 댓글