관리 메뉴

클라이언트/ 서버/ 엔지니어 "게임 개발자"를 향한 매일의 공부일지

상속 17 - 인터페이스 2 : 다중 인터페이스 구현과 추상 클래스 vs 인터페이스 비교하기 본문

프로그래밍 언어/자바

상속 17 - 인터페이스 2 : 다중 인터페이스 구현과 추상 클래스 vs 인터페이스 비교하기

huenuri 2024. 12. 2. 05:45

인터페이스에 관한 공부를 이어서 진행해 보겠다.


 

 

 

 

인터페이스의 목적

자바에서 인터페이스를 두는 진정한 목적은 무엇일까? 그림 5-27과 앞의 모바일 전화기를 표현한 MobilePhoneInterface를 가지고 설명해 보자.MobilePhoneInterface 인터페이스는 모바일 전화기가 가지고 있어야 하는 기능(메서드)을 명시하며, 삼성은 MobilePhoneInterface 인터페이스를 구현하여 SamsungPhone 클래스를 만들고, LG는 LGPhone 클래스를 만든다.

이 두 클래스는 모두 MobilePhoneInterface 인터페이스에 나열된 메서드와 동일한 이름의 메서드를 구현하겠지만, 삼성과 LG가 구현한 내용은 서로 다를 것이다. 인터페이스로 인한 다형성이 실현되는 것이다.

 

한편, 모바일 단말기 응용 소프트웨어 개발자는 SamsungPhone과 LGPhone 클래스에는 MobilePhoneInterface 인터페이스의 메서드가 모두 구현되어 있을 것이므로, 이들 메서드를 호출하여 두 클래스를 쉽게 제어할 수 있다. 

간단히 말하면 인터페이스는 스펙을 주어 클래스들이 그 기능을 서로 다르게 구현할 수 있도록 하는 클래스의 규격 선언이며, 클래스의 다형성을 실현하는 도구이다.

 


 

 

 

 

 

다중 인터페이스 구현

클래스는 하나 이상의 인터페이스를 구현할 수 있다. 이 경우 콤마로 각 인터페이스를 구분하여 나열하며, 각 인터페이스에 선언된 모든 추상 메서드를 구현해야 한다. 그렇지 않으면 컴파일 오류가 발생한다.

다음은 AIInterface와 MobilePhoneInterface를 모두 구현한 AIPhone 클래스를 작성한 사례이다.

 


 

 

 

 

클래스 상속과 함께 인터페이스 구현

클래스를 상속받으면서 동시에 인터페이스를 구현할 수 있다. 다음 예제에 그 사례를 보인다. 다중 상속, 다중 인터페이스 구현은 유용하나 자칫 너무 남용하면 클래스, 인터페이스 간의 관계가 너무 복잡해져 프로그램 전체 구조를 파악하기 아려울 수 있으므로 주의하는 것이 좋다.

 

인터페이스를 구현하고 동시에 슈퍼 클래스를 상속받는 사례

 

 

 

 

 

 


 

 

 

 

 

 

인터페이스와 추상 클래스 비교

인터페이스와 추상 클래스는 다음 점에서 유사하다.

  • 객체를 생성할 수 없고 상속을 위한 슈퍼 클래스로만 사용된다.
  • 클래스의 다형성을 실현하기 위한 목적이다.

하지만 이 둘은 다음 표와 같이 여러 면에서 다르다.

 


 

 

 

핵심 체크문제 풀기

 

 

 

 

문제 3번

 

 

 

틀린 부분 찾기 및 수정

1. int VERSION;

  • 문제점
    • 인터페이스에 선언된 필드는 반드시 초기화되어야 하며, 암시적으로 public static final로 지정된다.
    • 초기화가 없는 필드는 컴파일 오류를 발생한다.

2. public int click();

  • 문제점
    • 인터페이스의 메서드는 **암시적으로 public abstract**이므로, public 키워드를 명시하는 것은 허용되지만 중복 선언입니다.
    • 기능상 문제는 없지만, 불필요한 코드이다.

3. protected int out();

  • 문제점
    • 인터페이스의 메서드는 항상 public 접근 제어자를 가진다.
    • 따라서 protected 접근 제어자는 허용되지 않아 컴파일 오류를 발생한다.

 

 

 

  • 인터페이스에는 필드를 가질 수 없다.
  • 인터페이스에는 protected 접근 지정자는 사용할 수 없다.
  • static 메서드를 사용하려면 메서드 코드가 구현되어 있어야 한다.

 

 

 

 

학습을 마치고

인터페이스는 인사교 수업 시간에 아주 잠깐 소개했던 기억이 나는데 강의 영상을 찾아보니 자료가 없었다. 그냥 책에서 하는 것으로 충분한 것 같다. 이제 인터페이스가 무엇인지 확실히 배웠다. 그동안 이 내용을 알지 못해서 무척 답답했었다.

이제 상속 단원의 개념 학습은 여기서 마치고 다음 포스트에서 단원을 마무리하는 도전 문제를 풀어보려고 한다.