[Java - 상속과 구체화] 4. interface

이현준·2020년 9월 30일
0

Java

목록 보기
10/15

interface란?

구체화하는 클래스가 반드시 제공해야하는 메소드의 목록을 말함(계약 기반 프로그래밍)

서로 논리적으로 관계가 없지만 같은 이름의 메소드를 제공하는 클래스를 하나로 그룹핑하여 주는 역할을 함
=> 코드 공유가 목적이 아님(subtyping)

interface와 클래스 정의 비교

  • interface는 멤버 변수를 가질 수 없다.
  • 원래는 추상 메소드만 정의할 수 있었음(선언만 가능)
  • 추상이지만 abstract 수식어를 사용하지 않아도 되고 public 수식어를 사용하지 않아도 기본적으로 public 접근 권한을 가짐
  • 자바 8부터는 기본 메소드(default 키워드로 수식)를 정의 할 수 있으며, static 메소드도 정의할 수 있음 + 자바 9부터는 private 메소드를 정의할 수 있음
  • 하지만 여전히 인스턴스를 생성할 수 없음
  • interface를 구현하면 그 interface에 정의되어 있는 모든 메소드를 무조건 구현해야 함

interface와 상속

A 클래스가 F interface를 구현하고 있을 때 B가 A의 자식 클래스이면 별도 표기 없이 B도 자동으로 F를 구현하고 있는 클래스임

interface간 상속

  • 한 interface를 다른 interface가 상속받을 수 있음
  • 한 interface는 여러 개의 interface를 상속 받을 수도 있음

전략 패턴

원래 bird의 fly() 부분에 새가 날라다니는 부분을 코드 구현해야되는데 그렇지않았다.=> 다른 클래스를 통해 구현하고 있다.(has-a로 모델링 됨)
날라다니는 클래스들을 구현.
관계가 고정되어 있지 않기때문에 관계를 바꿈(소유함)으로써 기능을 바꾼다.(이렇기 때문에 실행시간에도 바꿀 수 있다. (OCP)
이때 모두 doFly()를 가져야 하기 때문에 interface가 중요!

0개의 댓글