인터페이스 익명클래스 사용과 오버라이딩 관련 질문입니다.

  1. 인터페이스는 인스턴스화가 될 수 없다고 알고 있는데 Comparator 를 익명클래스 형태로 자주 사용하는걸 봤습니다. 이 경우는 인스턴스화가 되지 않고 사용되는건가요??

  2. 인터페이스내에 메서드는 public abstract 로 상속 후 오버라이딩을 해야 하는 걸로 아는데

Comparator에 int compare(T o1, T o2); 외에 다른 추상메서드는 왜 오버라이딩 하라고 컴파일 에러가 발생하지 않나요.

감사합니다.

1답변

  • 인터페이스는 인스턴스화가 될 수 없다고 알고 있는데 Comparator 를 익명클래스 형태로 자주 사용하는걸 봤습니다. 이 경우는 인스턴스화가 되지 않고 사용되는건가요??

    익명 클래스는 말 그대로 이름 없는 클래스 입니다. 따라서 인스턴스화 될 수 있습니다.

    일반적으론 인터페이스를 상소한 클래스를 만들고 이 클래스의 인스턴스를 생성하도록 작성합니다. 하지만 Comparator 같이 자주 쓰이게 되는데 매번 이러한 작업을 하는 것은 코드량이 늘어나며 가독성도 떨어지고 매우 번거롭습니다.

    이러한 이유로 바로 인터페이스에 대한 구현을 작성하고 인스터스를 생성하는 익명 클래스가 도입되었습니다.

    하지만 이또한 불편한 부분이 있었기에 Java 8 부터 람다가 도입되어 더욱 간단히 사용할 수 있게 되었습니다.

    인터페이스내에 메서드는 public abstract 로 상속 후 오버라이딩을 해야 하는 걸로 아는데 Comparator에 int compare(T o1, T o2); 외에 다른 추상메서드는 왜 오버라이딩 하라고 컴파일 에러가 발생하지 않나요.

    질문을 이해하기 조금 어렵네요.

    public abstract 는 추상 클래스나 추상 메소드를 만들때 사용하며 인터페이스의 메소드를 오버라이딩할 때 사용하는 것이 아닙니다. 따라서 오버라이딩은 abstract를 쓰지 않고 메소드를 작성하면됩니다.

    Comparator의 추상 메소드는 Comparator에 int compare(T o1, T o2) 외에는 없습니다. 따라서 Comparator에 int compare(T o1, T o2) 외에 다른 메소드의 오버라이딩은 필수 사항이 아니며 컴파일 에러가 발생하지 도 않습니다.

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

작성한 답변에 다른 개발자들이 댓글을 작성하거나 댓글에 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.