[Java] Member inner class

Minji Kim·2021년 7월 30일
0

Java

목록 보기
5/9
post-thumbnail

Member inner class

다른 클래스 내부에서 선언된 클래스

Java 예제 1

소스 코드

  • OuterClass { InnerClass }
public class OuterClass {
	private int val;
    
    public OuterClass(int val) {
    	this.val = val;
    }
    
    // Member inner class 정의
    public class InnerClass {
    	private int innerVal;
        
        public InnerClass(int val) {
        	this.innerVal = val;
        }
        
        public void printOutVal() {
        	System.out.println("value = " + val);
        }
        
        public void printInVal() {
        	System.out.println("innerValue = " + innerVal);
        }
    }
}

OuterClass 내에 선언된 InnerClass가 Member inner class이다.


  • Main
public class Main {
	
    public static void main(String[] args) {
    	System.out.println("Member Inner Class (멤버 내부 클래스)");
        
        OuterClass out = new OuterClass(10); // 외부 클래스 인스턴스 생성
        OuterClass.InnerClass in = out.new InnerClass(1); // 내부 클래스 인스턴스 생성
        in.printOutVal();
        in.printInVal();
        
        System.out.println();
        
       	// 하나의 외부 클래스 인스턴스를 이용해 여러 개의 멤버 내부 클래스의 인스턴스를 생성할 수 있다.
        OuterClass.InnerClass in2 = out.new InnerClass(5);
        in2.printOutVal();
        in2.printInVal();
        
        System.out.println();
        
        // 한 번에 생성할 수 있다.
        OuterClass.InnerClass in3 = new OuterClass(7).new InnerClass(9);
        in3.printOutVal();
        in3.printInVal();
    }
}

실행 결과


🤔 내부 클래스의 this는 어떻게 동작할까?

Java 예제 2

소스 코드

  • OuterClass { InnerClass }
public class OuterClass {
	private int val;
    
    public OuterClass(int val) {
    	this.val = val;
    }
    
    public class InnerClass { // Member Inner class
    	private int val;
        
        public InnerClass(int val) {
        	this.val = val;
        }
        
        public void printValue() {
        	int val = 3;
            
        	System.out.println("value = " + val);
            System.out.println("this.value = " + this.val);
            System.out.println("OuterClass.this.value = " + OuterClass.this.val);
        }
    }
}

  • Main
public class Main {
	
    public static void main(String[] args) {
    	System.out.println("외부 / 내부 클래스의 this\n");
        
        OuterClass out = new OuterClass(10);
        OuterClass.InnerClass in = out.new InnerClass(1);
        in.printValue();
    }
}

실행 결과

출력 결과를 보다시피 외부 클래스에서 사용하는 변수와 내부 클래스에서 사용하는 변수명이 같을 때, 내부 클래스에서 this로 접근하면 내부 클래스의 변수가 출력된다.

따라서 해당 경우에서 외부 클래스의 변수를 사용하고 싶을 때는 외부 클래스.this.변수명 으로 사용해야 한다.

profile
블로그 이전 mimah.tistory.com

0개의 댓글