내부 클래스와 static 내부 클래스
내부 클래스
내부 클래스(Inner class)란 클래스 내부에 선언된 클래스를 의미하며, 중첩 클래스(Nested Class)라고도 불립니다.
static
키워드를 사용하면 정적 중첩 클래스가 됩니다.
public class Library {
String name = "판교도서관";
public class Book {
String title = "자바한조각";
public void show() {
System.out.println("도서관이름: " + name);
System.out.println("책이름: " + title);
}
}
}
Library 안에 선언된 Book (내부클래스) 은 아래와 같이 사용할 수 있습니다.
public class Main {
public static void main(String[] args) {
// 외부클래스 객체 생성
Library library = new Library();
// 내부클래스 객체 생성
Library.Book book = library.new Book();
book.show();
}
}
도서관이름: 자바한조각
책이름: 자바한조각
내부 클래스에서는 외부클래스의 변수에 접근이 가능합니다. 따라서 show 메소드 안에 name 변수를 사용할 수 있습니다.
하지만, Book 의 인스턴스를 만들기 위해서는 반드시 Library 의 인스턴스가 필요한 구조가 됩니다.
외부 클래스와 강하게 종속되는 것을 막기 위해서는 static 내부 클래스를 사용할 수 있습니다.
Static 내부 클래스
static 내부 클래스는 외부 클래스의 인스턴스에 종속되지 않습니다. 따라서 static 내부 클래스의 인스턴스를 생성하기 전 외부 클래스의 인스턴스를 생성할 필요가 없습니다.
정적 내부 클래스 또는 정적 중첩 클래스라고도 부릅니다.
public class Library { static String name = "판교도서관"; // static 내부클래스 public static class Book { String title = "자바한조각"; public void show() { // 외부클래스의 static 변수 사용 System.out.println("도서관이름: " + name); System.out.println("책이름: " + title); } } }
public class Main {
public static void main(String[] args) {
// static 내부클래스 객체 생성
Library.Book book = new Library.Book();
book.show();
}
}
도서관이름: 판교도서관
책이름: 자바한조각
자바는 한 파일에 한 클래스를 선언하는 것이 약속되어 있습니다.
하지만, 해당 클래스 내에서 또 다른 클래스를 내부 클래스로 선언할 수 있습니다. 하지만 이런 구조는 설계를 복잡하게 할 수 있는 단점이 있으므로 trade-off 를 고려하여 설계하는 것이 좋습니다. 내부 클래스가 꼭 필요한 상황인지 고려하여 사용하는 것이 바람직합니다.
Last updated