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
'⁂ Java > : 기본 익히기' 카테고리의 다른 글
[JAVA] #9-2 예외처리(Exception) 2 - throws (0) | 2022.09.16 |
---|---|
[JAVA] #9-1 예외처리(Exception) 1 - try...catch...finally (0) | 2022.09.16 |
[JAVA] #8-5 익명 내부 객체(Anonymous class) (0) | 2022.09.15 |
[JAVA] #8-4 인터페이스(Interface) (0) | 2022.09.15 |
[JAVA] #8-3 추상(Abstract) (0) | 2022.09.15 |