ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 인터페이스(Interface)
    JAVA 2023. 3. 2. 21:00

    • 인터페이스와 추상 클래스는 사용설명서로 비유할 수 있다.
    • 인터페이스와 추상 클래스는 객체지향 프로그래밍의 특징 중 다형성과 깊게 관련되어 있다.
      - 한 객체를 구성하는 구성 요소가 공통의 인터페이스로 구현되어 있다면 쉽게 교체가 가능하다.

    • 자동차 관점에서 자동차와 운전자 사이에서 정보를 주고 받을 수 있는 계기판을 인터페이스에 비유할 수 있다.
    • 인터페이스로 연결된 두 객체는 서로 어떤 내용을 갖는지 몰라도 동작에 영향을 주지 않는다.

    • class 대신 interface를 입력하면 인터페이스가 된다.

    • 인터페이스도 컴파일되면 .class 파일로 생성된다.

     


    인터페이스의 장점

    1. 객체의 교체가 쉽다.
    2. 사용 방법은 같아도 객체 별로 다양한 결과를 얻을 수 있다.(= 다형성)

     


    인터페이스의 구성 요소(멤버)


     public 상수 필드

    • 인터페이스의 필드(= 변수)는 public static final 키워드를 생략해도 상수로 인식한다.
    • 상수이기 때문에 관례 상 이름을 대문자와 "_"로 작성한다.
    • 값도 같이 부여해준다.(= 상수)
    • 대부분 구현 객체에서 사용한다.

     


    public 추상 메소드

    • 인터페이스 내부의 메소드는 실행부가 없는 추상 메소드
    • abstract 키워드를 생략해도 추상 메소드로 인식한다. ​

     


    public 디폴트 메소드

    • JAVA 8부터 추가된 기능
    • 실행부가 존재하는 완전한 메소드 선언 가능
    • default 키워드를 추가하여 선언
    • 인터페이스에 존재하지만 객체가 있어야 사용 가능하다.
    • 모든 객체 가지는 기본 메소드.
    • 인터페이스에 존재하지만 구현 객체에 소속된 메소드
    • 구현 객체에서 재정의 가능(디폴트 메소드는 public이기 떄문에 재정의할 때도 public으로 선언해야하고, default 키워드는 생략 가능하다.)
    • 주로 모든 실행 객체가 동일한 실행 내용을 가지고 있을 경우에 사용한다.

     


    public 정적 메소드

    • 인터페이스 소속의 메소드

     


    private 메소드

    • 인터페이스 내에서만 사용 가능한 메소드
    • static 키워드 추가 시 구현 객체 생성하지 않고 사용 가능하다는 점이 다름
    • 구현 클래스의 재정의 대상이 아님
    • 각각의 디폴트 메소드에서 공통된 부분을 한 번에 작성하기 위해 사용

     


    private 정적 메소드

    • 구현 객체가 필요 없는 메소드
    • 구현 클래스의 재정의 대상이 아님

     


    인터페이스의 구현

    • 인터페이스는 클래스와 달리 '상속'받는다고 하지 않고, '구현'한다고 말한다.
    • 인터페이스를 '구현'할 때는 implements 키워드를 사용한다.
    • 인터페이스가 가지고 있는 모든 추상 메소드를 재정의하여 실제 기능을 가지는 클래스를 구현 클래스라고 한다.
    • 인터페이스를 구현하는 하위 클래스는 반드시 인터페이스에 정의된 추상 메소드를 하나도 빠짐없이 모두 오버라이딩(재정의)해야 한다.

    • 인터페이스를 구현한 클래스에서 재정의하지 않은 인터페이스의 추상 메소드가 하나라도 존재한다면 해당 클래스는 추상 클래스가 되기 때문에 반드시 하위 클래스에서 재정의하지 않은 인터페이스 메소드를 오버라이딩해야 한다.

    • 객체 중간에 인터페이스를 추가하면 의존성을 낮출 수 있다.

    • 인터페이스도 참조 타입으로 변수 선언이 가능하며, 구현 클래스로 객체를 생성해야 한다.
    interfaceName if = new className();

     


    다중 인터페이스 구현

    • 하나의 구현 클래스에서 여러 개의 인터페이스 구현 가능
    • implements 키워드에 구현할 인터페이스 명을 ","로 나열하여 선언

     


    인터페이스의 상속

    • 인터페이스는 다중 상속을 허용
    • 추상 메소드와 디폴트 메소드가 상속의 대상이 됨

     


    타입 변환

    • 구현 객체가 인터페이스로의 타입 변환을 말함
    • 인터페이스로 구현된 객체를 다시 구현 객체의 타입으로 변환하는 경우
      - 구현 객체 고유의 메소드를 사용하고자 할 때(인터페이스로 구현하면 해당 인터페이스의 메소드만 사용 가능하기 떄문)

    • 객체 타입 변환
      - 강제 타입 변환 전에 instanceof로 객체의 타입을 확인해야 한다.

     


    다형성

    • 상속 이외에 인터페이스로도 다형성 구현 가능
    • 구현 객체 타입 변환 가능
    • 클래스의 필드와 메소드의 매개변수에도 인터페이스 타입을 선언할 수 있다.(= 구현 객체 대입)

     


    봉인된 인터페이스(sealed interface) 

    • JAVA 15부터 사용 가능
    • 지정된 인터페이스만 상속하도록 제한하는 것

    • 봉인된 인터페이스 선언
    public sealed interface InterfaceA permits InterfaceB { ... }

     

    • 인터페이스 봉인 해제
    public non-sealed interface InterfaceB extends InterfaceA { ... }

     

    'JAVA' 카테고리의 다른 글

    싱글톤(Singleton) 패턴  (0) 2023.03.02
    익명 클래스(Anonymous Class)  (0) 2023.03.02
    추상 클래스(abstract class)  (0) 2023.03.02
    다형성(Polymorphism)  (0) 2023.03.02
    final 키워드  (0) 2023.03.02
Designed by Tistory.