⁂ Java/: 기본 익히기

[JAVA] #8-6 이너 클래스(Inner Class)

김갱환 2022. 9. 15. 18:05

1. 이너 클래스란?

 

 이너 클래스란 클래스 내부에서 선언된 클래스를 말한다.

 주로 웹페이지를 작성할 때 사용되는 언어(.jsp / .py / .asp / .php)에서 사용된다.

 

 방식은 간단하다.

 class 안에 class를 한번 더 선언하고 기본적인 class를 생성하는 것과 동일하게 inner class를 생성하면 된다.

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
	
} // class end

 inner class를 선언하는 방법은 따로 기술하진 않겠다.

 inner class를 어떻게 접근해야하는가가 더 중요한 것이기에 그것에 대해 알아가보자.

 

 

2. 이너 클래스에 접근하는 방법

 

 이너 클래스에 접근하는 방법은 간단하다.

 main()에서 클래스에 접근하듯 상위 클래스 안에 이너 클래스의 새로운 인스턴스를 만들고 접근하면 된다.

class WebProgram {

	...
	
	public void print() {
		Language lang = new Language();
		lang.display();
		
		Smart sm = new Smart();
		sm.display();
	} // print() end
	
} // class end

 

 이제 메인에서 WebProgram 클래스의 print() 메서드에 접근하면 정상적으로 출력되는 것을 확인할 수 있다.

public class Test09_inner {

	public static void main(String[] args) {

		WebProgram web = new WebProgram();
		web.print();
		
	} // main() end
} // class end

출력 화면

 

 

 그런데 여기서 잠깐!

 이상하게 main() 안에서 이너클래스인 Language와 Smart가 잡힌다.

 

 그렇다고 직접 접근을 하면 에러가 난다.

Language lang = new Language(); // 에러
Smart sm = new Smart(); // 에러

 

 만약 직접적으로 접근을 하고 싶다면 단계적으로 접근을 하면 된다.

 위의 사진을 보면 알 수 있다시피 Language와 Smart는 oop0915의 상위 주소에 속해있는 것이 아니라 oop0915.WebProgram이라는 상위 주소를 갖고 있기 때문이다.

 

Language lang = new WebProgram().new Language();
lang.display();

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

성공적으로 출력이 되었다.

 

 이렇게 클래스 안에 클래스를 만들어서 사용하는 것도 가능하다.

 

 

* (참고) 안드로이드 어플을 개발할 때 자주 쓰이는 이너클래스 소개 *

 안드로이드 어플을 개발한다면 R이라는 클래스를 자주 만나게 될 것이다.

 이 R에는 여러 기능들이 들어있기 때문이다.

 그래서 R이란 클래스 안에 필요한 클래스를 또 만들어서 접근을 한다.

class R {
    class id{
        String btn="버튼";
    }
}

접근방식 R.id.btn