내부 클래스

정태규·2022년 9월 30일
1

자바의 정석

목록 보기
1/4

내부 클래스

  • 내부 클래스의 장점
    • 내부 클래스에서 외부 클래스의 멤버들을 쉽게 접근할 수 있다.
    • 코드의 복잡성을 줄일 수 있다.(캡슐화)
class A{
	...
    class B{
    	...
    }
    ...
}
  • 객체 생성 없이 B에서 A의 멤버 접근 가능
  • 외부에서는 클래스를 사용할 일이 없을때 쓴다.
  • 내부 클래스의 객체는 외부클래스 객체 생성후 생성 가능
  • 내부 클래스의 종류
    class Outer{
    	class InstanceInner{}
        static class StaticInner{}
        
        void myMethod(){
        	class LocalInner{}
        }
    }
  • 인스턴스 클래스

    • 외부 클래스의 멤버변수 선언위치에 선언하며, 외부 클래스의 인스턴스 멤버처럼 다루어진다. 주로 외부 클래스의 인스턴스 멤버들과 관련된 작업에 사용될 목적으로 선언된다.
  • static 클래스

    • 외부 클래스의 멤버변수 선언위치에 선언하며, 외부 클래스의 static멤버처럼 다루어진다. 주로 외부 클래스의 static멤버, 특히 static메서드에서 사용될 목적으로 선언된다.
  • 지역 클래스

    • 외부 클래스의 메서드나 초기화블럭 안에 선언하며, 선언된 영역 내부에서만 사용될 수 있다.
  • 익명 클래스

    • 클래스의 선언과 객체의 생성을 동시에하는 이름없는 클래스(일회용)
  • 인스턴스 멤버는 static멤버를 사용 할 수 있지만 그 반대는 불가하다.
class Ex7_12{
	class InstatnceInner{
    	int iv = 100;
        //static int cv = 100; //에러! static 변수를 선언 할 수 없다.
        final static int CONST = 100; // final static은 상수이므로 허용
        }
     static class StaticInner{
     	int iv = 200;
        static int cv = 200; //static 클래스만 static멤버를 정의 할 수 있다.
     }
     
     void myMethod(){
     	class LocalInner{
        	int iv = 300;
            static int cv = 300; //에러! static변수를 선언 할 수 없다.
            final static int CONST = 300;//fianal static은 상수 이므로 허용 ,메서드 내에서만 사용 가능
        }
    }
}

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

  • 내부 클래스의 제어자는 변수에 사용 가능한 제어자와 동일
class Outer{
	private class InstanceInner{}
    protected static class StaticInner{}
    
    void myMethod(){
    	class LocalInner{}
    }
}

class Outer2{
	int value = 10; //Outer.this.value
    
    class Inner{
    	int value = 20; //this.value = 20;
        
        void method(){
        	int value = 30; //value
            System.out.println("value: "+value);
            System.out.println("this.value"+this.value);
            System.out.println("Outer.this.value: "+Outer.this.value);
        }
    }
}




0개의 댓글