Effective Java3판 10쪽을 보면.. 동반클래스란 개념이 나온다.
자바 8 전에는 인터페이스에 정적 메서드를 선언할 수 없었다. 그렇기 때문에 이름이 “Type”인 인터페이스를 반환하는 정적 메서드가 필요하면, “Types”라는 (인스턴스화 불가인) 동반 클래스(Companion class)를 만들어 그 안에 정의하는 것이 관례였다.
이 부분을 읽고, Collection과 Collections의 관계등.. 내가 생각해보지 않았지만 그 관계가 완전히 내게 이해되지 않은 인터페이스와 클래스들의 관계가 생각났다. 동반 클래스란 무엇인가?
이곳에서 참고했다.
자바 8이전까지 인터페이스는 스태틱 메서드를 가질 수 없었다. - 이것이 동반클래스의 등장 이유이다.
A라는 인터페이스가 기본적으로 a,b,c…라는 메서드를 제공하고 싶어도 인터페이스는 스태틱 메서드를 가질 수 없었다. 그렇다고 추상메서드로 a,b,c를 넣으면, 이 기능이 필요하지도 않은 구현클래스들도 a와 b와 c를 반드시 구현해야 하는 불편함이 생긴다.
자바 8 이전까지는 이를 “As”라는 이름의 클래스를 만들어 스태틱 클래스를 제공하게끔 했다. 이 클래스, As가 인터페이스 A의 동반클래스이다.