인터페이스의 추상 메소드는 public이다. 접근 지시자를 표시하지 않아도 인터페이스만은 default가 아닌 public으로 인식한다. 인터페이스에 인스턴스 변수를 선언할 수 없다. 따라서 접근 지시자 없이 변수가 선언됐다면 그 것은 인스턴스 변수가 아니라 상수(public static final인 이유)이다.
인터페이스가 상속이 필요한 이유
만약 기존 인터페이스에 새로운 메소드를 추가한다면 어떤 문제가 발생할까? 예제에서는 컬러 출력 메소드가 인터페이스에 추가되었다. 삼성 프린터에서 컬러 출력 메소드가 필요 없어도 이미 인터페이스에는 메소드가 추가 됐으므로 컬러 출력 메소드를 귀찮더라도 구현해야 한다. 왜냐하면 인터페이스 구현하는 클래스는 해당 인터페이스의 모든 추상 메소드를 구현해야 되기 때문이다. 그래야 인스턴스 생성이 가능하다. 다행히도 인터페이스 상속을 통해 이런 번거로움을 해결할 수 있다.
기존에 존재하던 인터페이스에 새로운 메소드를 추가하는 것은 부담이 되고, 이미 배포된 드라이버(인터페이스 구현 클래스)를 수정하는 불합리한 상황에 놓일 수 있기 때문에, 상속을 통해 새로운 인터페이스(ColorPrintable)를 추가하는 것이다.
인터페이스의 디폴트 메소드: 문제 상황의 예시
256가지의 인터페이스(모니터, 팩스, 프린터,...)가 가정해보자.모든 인터페이스에 칼라 출력 메소드를 추가해야 한다면 어떻게 해야 할까? 물론 인터페이스 상속으로 해결할 수 있다. 하지만 상속으로 인해 인터페이스는 256가지에서 512가지로 2배 늘어날 것이다. 인터페이스 수를 늘리지 않고 해결할 수 있는 방법은 없을까? 자바에서도 이 같은 상황을 겪었고, 문제를 해결하기 위해 새로운 문법 default을 도입했다.
default 덕분에 기존 클래스는 변경할 필요가 없어졌다. default 메소드는 빈 몸체를 가지고 있기 때문에, 필요하면 클래스에서 구현하고 불필요하면 구현하지 않아도 된다(구현하든 안하든 인스턴스 참조에는 문제 없다).
디폴트 메소드를 직접 프로그래머가 정의하는 일은 거의 없으니 알아만 두자.
'Programming > Java' 카테고리의 다른 글
JAVA 18(1) 예외처리의 기본 (0) | 2021.08.05 |
---|---|
JAVA 17(3) 인터페이스의 static 메소드 (0) | 2021.08.04 |
JAVA 17(1) 인터페이스 (0) | 2021.08.04 |
JAVA 16 상속이 도움 되는 상황 (0) | 2021.08.04 |
JAVA 15 오버라이딩 (0) | 2021.08.04 |