목록Java (181)
충분히 쌓여가는
익명 클래스 이름이 없는 일회용 클래스(정의와 생성을 동시에) (조상 클래스 이름 혹은 구현 인터페이스 이름) new 조상클래스이름() { // 멤버 선언 } // 또는 new 구현인터페이스이름() { // 멤버 선언 } 이름이 없는 클래스이기 때문에 조상이름을 대신해서 사용 코드 class Anonymous { Object iv = new Object() { void method(){} }; // 익명 클래스 static Object cv = new Object() { void method(){} }; // 익명 클래스 void myMethod() { Object lv = new Object() { void method(){} }; // 익명 클래스 } } 컴파일 시 내부 클래스이기 때문에 외부 클래스..
내부 클래스의 제어자와 접근성 원래 클래스 앞의 제어자는 public, (default)만 가능하다 내부 클래스의 제어자는 변수에 사용 가능한 제어자와 동일(public, (default), private, protected) static 클래스만 static 멤버를 정의할 수 있다 내부 클래스를 정의할 때 static 멤버가 필요하면, 내부 클래스가 static 내부 클래스 이어야 한다(static 멤버 자체가 객체 생성 없이 사용가능) [만약 제어자가 static이 아니라면 객체를 생성해야 사용가능하므로 static 멤버는 모순이된다] 상수(final)인 경우 static 멤버 사용 가능 class InnerClass { class InstanceInner { int iv = 1000; // stat..
내부 클래스(inner class) 클래스 안의 클래스 class A { // B클래스의 외부 클래스 ... class B { // A클래스의 내부 클래스 ... } ... } 내부 클래스의 장점 내부 클래스에서 외부 클래스의 멤버들을 쉽게 접근할 수 있다 B 클래스와 A 클래스가 각각 존재: B 클래스에서 A 클래스의 멤버 호출 시 객체를 생성해야한다 B 클래스가 A 클래스의 내부 클래스 일 때: B 클래스에서 A 클래스의 멤버 호출 시 객체를 생성하지 않아도된다 코드의 복잡성을 줄일 수 있다(캡슐화) B 클래스가 A 클래스 안에서만 사용될 경우 굳이 A 클래스 밖에 B 클래스가 존재할 이유가 없다 (B 클래스가 A 클래스 밖에 존재할 경우 다른 클래스가 B 클래스를 사용할 수도 있다[그런데 사용할 수..
인터페이스의 문제 인터페이스에 새로운 메서드(추상 메서드)를 추가하기 어렵다 이에 대한 해결책이 default method이다 default 메서드는 instance 메서드(인터페이스 원칙 위반) 인터페이스에 새로운 메서드를 추가했을 때, 인터페이스를 구현한 클래스들이 추상메서드를 구현하는 것에 대한 부담을 없애줌 default 메서드가 기존의 메서드와 충돌할 때의 해결책 1. 여러 인터페이스의 디폴트 메서드 간의 충돌 - 인터페이스를 구현한 클래스에서 default 메서드를 오버라이딩 해야한다 (직접 오버라이딩하면 해결됨) 2. default 메서드와 조상 클래스의 메서드 간의 충돌 - 조상 클래스의 메서드가 상속되고, 디폴트 메서드는 무시된다 (직접 오버라이딩하면 해결됨)