웹개발 교육/Java

[35일] Java (41) - 내부 클래스(중첩 클래스)

ewok 2022. 9. 15. 18:11

내부 클래스는 클래스 내부에 선언한 클래스를 말한다

.

package oop0915;

import oop0915.WebProgram.Language;
import oop0915.WebProgram.Smart;

class WebProgram {
	
	String title = "Java Program";
	
	class Language {
		String basic = "JAVA, HTML, CSS, JavaScript";
		void display() {
			System.out.println("기초수업:" + basic);
		}//end
	}//inner class
	
	class Smart {
		String basic = "Objective-C, Java OOP, C#";
		void display() {
			System.out.println("기초수업:" + basic);
		}//end
	}//inner class
	
	public void print() {
		Language lang = new Language();
		lang.display();
		
		Smart sm = new Smart();
		sm.display();
	}//print() end
	
}//class end

public class Test09_inner {

	public static void main(String[] args) {
		// 내부 클래스 inner class
		//-> 클래스 내부에서 선언된 클래스

		WebProgram web = new WebProgram();
		web.print();
		
		//에러. 내부 클래스는 직접 접근할 수 없다
		//Language lang = new Language();
		//Smart sm = new Smart();
		
		//내부 클래스는 외부에서 단계적으로 접근할 수 있다.
		Language lang = new WebProgram().new Language();
		lang.display();
		
		Smart sm = new WebProgram().new Smart();
		sm.display();

	}//main() end
}//class end

WebProgram 클래스에 Language와 Smart 두 개의 클래스를 선언하였다. 이와 같이 클래스 내에 클래스를 선언할 수 있다.

WebProgram 클래스의 print 메소드에 Language와 Smart 객체를 생성하여 각각의 disp 메소드를 호출하도록 하였다.

 

내부 클래스는 직접 접근이 불가능하다. 대신 외부에서부터 .을 사용하여 단계적으로 접근할 수 있다.

 

Smart sm = new WebProgram().new Smart();
sm.display();
WebProgram web = new WebProgram();
WebProgram.Smart ws = web.new Smart();
ws.display();

두 가지 방법 모두 가능하다.

댓글수0