자바 내부클래스에 대해서 알아보자
내부클래스(inner class)
내부 클래스는 클래스 내에 선언된 클래스이다. 클래스에 다른 클래스를 선언하는 이유는 두 클래스가 긴밀한 관계에 있기 때문이다. 한 클래스를 다른 클래스의 내부 클래스로 선언하면 두 클래스의 멤버들 간에 서로 쉽게 접근할 수 있다는 장점과 외부에는 불필요한 클래스를 감춤으로서 코드의 복잡성을 줄일 수 다는 장점(캡슐화)이 있다.
여기서 A는 외부클래스, B와 C는 내부 클래스(외부클래스$내부클래스명.class 파일로 컴파일), D는 지역클래스(외부클래스명$번호 지역클래스명.class파일로 컴파일)이다. 이때 내부 클래스는 A를 제외하고 다른 클래스에서 잘 사용되지 않아야 한다.
내부클래스는 클래스 내에 선언된다는 점을 제외하고는 일반적인 클래스와 다르지 않다. 내부클래스도 클래스이기 때문에 static, abstract나 final과 같은 제어자를 사용할 수 있을 뿐만 아니라, private, protected 접근제어자도 사용이 가능하다. 호출할때는 외부클래스.내부클래스타입으로 객체를 생성해서 호출할 수 있다.
인스턴스 내부클래스 B에서는 외부클래스의 인스턴스 변수&메소드와 정적 변수&메소드 모두 접근이 가능하지만, 정적 내부클래스 C에서는 외부클래스의 정적변수와 정적메소드에만 접근이 가능하다.
로컬 클래스에서는 jdk1.8부터 final을 생략해도 상수로 인식되어 값을 변경하려고 하면 에러가 발생한다. 1.8이전이라면 final상수로 값을 변경하지 못하게 막는 것이 좋다.
내부 인터페이스
아래의 예제처럼 클래스 안에 내부 인터페이스도 작성할 수 있다.
Button클래스에 OnClickListener 내부 인터페이스를 작성하고, setOnClickListener메소드로 해당 인터페이스를 구현한 클래스를 받아 실제 가리키는 객체를 매개변수의 객체로 하며, touch메소드로 객체의 오버라이딩 된 onClick메소드를 호출하게 한다.
'언어공부 > Java' 카테고리의 다른 글
자바 람다식(Lambda Expression, 익명함수), 함수형 인터페이스(Functional Interface), 메소드 참조 (0) | 2021.05.30 |
---|---|
자바 내부 클래스의 종류와 익명클래스(anonymous class) (0) | 2021.05.30 |
자바 열거형(enum) (0) | 2021.05.30 |
자바 JAVA FX CSS 스타일 적용 (0) | 2021.05.29 |
자바 JAVA FX 개요 및 JAVA FX 이클립스 연동하는 법 및 JAVA FX 레이아웃 (0) | 2021.05.29 |