중첩 인터페이스 class A { /* 중첩 인터페이스 */ [public | private] [static] interface B { // 상수 필드 // 추상 메소드 // 디폴트 메소드 // 정적 메소드 } } 중첩 인터페이스는 클래스의 멤버로 선언된 인터페이스를 말한다. UI 프로그래밍에서 이벤트 처리 목적으로 많이 활용된다. 중첩 인터페이스는 기본적으로 정적(static)이라 키워드를 명시할 필요가 없다. 인터페이스 내부에 선언된 중첩 인터페이는 public 한정자만 사용 가능하여 암시적으로 public이다. 도트(.) 연산자를 사용하여 중첩된 인터페이스에 접근한다. 중첩된 인터페이스는 클래스 또는 인터페이스를 그룹화하는 목적으로 사용된다.
인터페이스
타입 변환 타입 변환은 인터페이스와 구현 클래스 간에 발생한다. 자동 타입 변환(promotion) 인터페이스 변수 = 구현객체; 인터페이스 변수에 구현 객체를 대입하면 인터페이스 타입으로 자동 타입 변환된다. 부모 클래스가 인터페이스를 구현하고 있으면 자식 클래스도 인터페이스 타입으로 자동 타입 변환될 수 있다. 강제 타입 변환(Casting) 구현클래스 변수 = (구현클래스) 인터페이스변수; 인터페이스 타입으로 자동 타입 변화된 후, 다시 구현 클래스 타입으로 변환되는 것이다. 구현 객체를 모르거나, 변경될 수 있어 확인 없이 강제 타입을 변환하면 예외(ClassCastException)가 발생하니 객체의 타입을 확인하는 instanceof 연산자를 사용해 확인 후 변환한다.
abstract method [public abstract] 리턴타입 메소드명(매개변수, ...); 추상 메소드는 리턴 타입, 메소드명, 매개변수만 기술되고 중괄호를 붙이지 않는 메소드이다. public abstract를 생략하더라도 컴파일 과정에서 자동으로 붙는다. 내부의 모든 메서드는 추상 메소드로 정의한다. 구현 클래스에서 추상 메소드 재정의 시 public보다 더 낮은 접근 제한으로 재정의할 수 없다. default method [public] default 리턴타입 메소드명(매개변수, ...) {...} default 메소드를 추가하면 구현 클래스에서 필수로 메소드를 재정의 하지 않아도 된다. 추상 메소드는 실행부(중괄호 {})가 없지만, 디폴트 메소드는 실행부가 있다. 실행부에서는 상수 필드를..
인터페이스는 데이터를 저장할 수 없기 때문에 상수 필드만 선언할 수 있다. [public static final] 타입 상수명 = 값; 인터페이스에 선언된 필드는 모두 public static final 특성을 갖기에 생략하더도 자동적으로 컴파일 과정에서 붙는다. 상수명은 대문자로 작성하며, 서로 다른 단어로 구성 시 언더바(_)로 연결한다. public interface Example { // 상수 선언 int MAX_NUMBER = 100; } 상수는 구현 객체와 관련 없는 인터페이스 소속 멤버로 인터페이스에서 바로 접근하여 상수값을 읽을 수 있다.
인터페이스(Interface) 클래스를 이용하여 다중 상속을 할 경우 메소드 출처의 모호성 등의 문제 발생으로 자바에서는 클래스를 통한 다중 상속을 지원하지 않는다. 다중 상속의 이점을 버릴 수 없기에 인터페이스를 통해 다중 상속을 지원하고 있다. 인터페이스는 다른 클래스를 작성할 때 기본이 되는 틀을 제공하면서, 다른 클래스 사이의 중간 매개 역할까지 담당하는 일종의 추상 클래스를 의미한다. 추상 클래스는 추상 메소드뿐만 아니라 생성자, 필드, 일반 메소드도 포함할 수 있지만 인터페이스는 추상 메소드와 상수만 포함할 수 있다. 인터페이스 선언 interface 인터페이스명 { ... } // default 접근 제한 public interface 인터페이스명 { ... } // pulic 접근 제한 p..