본문 바로가기

카테고리 없음

인터페이스 개념과 사용이유(feat. 상속 vs 구현)

반응형

1. 인터페이스

  • 인터페이스의 메서드는 public abstract가 포함되었다고 간주된다.
  • 인터페이스는 다중 구현(다중 상속)을 지원한다.
  • 인터페이스에서 멤버 변수는 public , static , final 이 모두 포함되었다고 간주된다
  • 클래스 상속 관계는 UML에서 실선을 사용하지만, 인터페이스 구현(상속) 관계는 UML에서 점선을 사용한다.

2. 상속 vs 구현

  • 부모 클래스의 기능을 자식 클래스가 상속 받을 때, 클래스는 상속 받는다고 표
  • 하지만, 부모 인터페이스의 기능을 자식이 상속 받을 때는 인터페이스를 구현한다고 표현한다
  • 상속은 이름그대로 부모의 기능을 물려 받는 것이 목적이다.
  • 하지만 인터페이스는 모든 메서드가 추상 메서드이다.
  • 따라서 물려받을수 있는 기능이 없고, 오히려 인터페이스에 정의한 모든 메서드를 자식이 오버라이딩 해서 기능을 구현해야 한다. 따라서 구현한다고 표현한다.
  • 인터페이스는 메서드 이름만 있는 설계도이고, 이 설계도가 실제 어떻게 작동하는지는 하위 클래스에서 모두 구현해야한다.
  • 따라서 인터페이스의 경우 상속이 아니라 해당 인터페이스를 구현한다고 표현한다.
  • 상속과 구현은 사람이 표현하는 단어만 다를 뿐이지 자바 입장에서는 똑같다. 일반 상속 구조와 동일하게 작동한다

3. 인터페이스를 사용해야 하는 이유

  • 모든 메서드가 추상 메서드인 경우 순수 추상 클래스를 만들어도 되고, 인터페이스를 만들어도 된다. 그런대 왜 인터페이스를 사용해야 할까?
  • 제약: 인터페이스를 만드는 이유는 인터페이스를 구현하는 곳에서 인터페이스의 메서드를 반드시 구현해라는 규약(제약)을 주는 것이다.
  • 그런데 순수 추상 클래스의 경우 미래에 누군가 그곳에 실행 가능한 메서드를 끼워 넣을 수 있다. 이렇게 되면 추가된 기능을 자식 클래스에서 구현하지 않을 수도 있고, 또 더는 순수 추상 클래스가 아니게 된다.
  • 인터페이스는 모든 메서드가 추상 메서드이다. 따라서 이런 문제를 원천 차단할 수 있다.
  • 다중 구현: 자바에서 클래스 상속은 부모를 하나만 지정할 수 있다. 반면에 인터페이스는 부모를 여러명 두는 다중구현(다중 상속)이 가능하다.
반응형