[JAVA] 3주차 : 인터페이스

INHEES·2023년 8월 15일

Java

목록 보기
6/13

JAVA 3주차 문법 : 인터페이스

인터페이스란?

상속 관계가 없는 다른 클래스들이 공통된 메서드를 구현해야할 때 인터페이스는 구현 클래스들의 동일한 사용방법과 행위를 보장한다.

선언

public interface 인터페이스명 {...}
// public, defalut 접근 제어자를 지정 가능

구성

  • 모든 멤버변수는 public static final 이여야 한다.(생략 가능)
  • 모든 메서드는 public abstract 이어야 한다.(생략 가능)
    =>단 static, default 메서드는 예외이다.

구현

  • 인터페이스는 추상 클래스와 마찬가지로 직접 인스턴스 생성이 불가능하다.
  • 인터페이스의 추상 메서드를 일부만 구현해야 한다면 해당 클래스를 추상 클래스로 변경하면 된다.
  public class 클래스명 implements 인터페이스명 { 
          // 추상 메서드 오버라이딩
          @Override
          public 리턴타입 메서드이름(매개변수, ...) {
                     // 실행문
          }
  }

상속

  • 인터페이스는 클래스와 다르게 다중 상속이 가능하다.
  • 인터페이스 간의 상속은 extends 키워드를 사용한다.

default method

디폴트 메서드 는 추상 메서드의 기본적인 구현을 제공하는 메서드이다.

  • 메서드 앞에 default 키워드를 붙인다.
  • 추상 메서드가 아니기에 재정의 할 필요는 없다.
public class Main implements A {

    @Override
    public void a() {
        System.out.println("A");
    }


    public static void main(String[] args) {
        Main main = new Main();
        main.a();

        // 디폴트 메서드 재정의 없이 바로 사용가능합니다.
        main.aa();
    }
}

interface A {
    void a();
    default void aa() {
        System.out.println("AA");
    }
}

static method

인터페이스에서 static 메서드 선언이 가능하다.

  • static 특성 그대로 객체 없이 호출이 가능하다.
  • default method 의 호출 방법과 같다.

다형성

인터페이스의 타입변환은 클래스와 마찬기지로 사용가능한 멤버필드와 메서드가 한정된다.
자동 타입변환 : 인터페이스 변수 = 구현객체;
강제 타입변환 : 구현객체타입 변수 = (구현객체타입) 인터페이스변수;

  // LG TV 구현체를 조작
  // MultiRemoteController 인터페이스 
  
  MultiRemoteController mrc = new LgTv("LG");
  mrc.turnOnOff();
  mrc.volumeUp();

  // 조작 대상을 Samsung TV로 교체
  // TV 구현객체의 기능을 조작 가능하다. 
  mrc = new SamsungTv("Samsung");
  mrc.turnOnOff();
  mrc.channelUp();
  

  // 매개변수와 반환타입 다형성 확인 메서드
  // return 값은 (SamsungTv) tv 이다. 
  
  default MultiRemoteController getTV(Tv tv) {
      if(tv instanceof SamsungTv) {
          return (SamsungTv) tv;
      } else if(tv instanceof LgTv){
          return (LgTv) tv;
      } else {
          throw new NullPointerException("일치하는 Tv 없음");
      }
  }

정리

이번시간에는 인터페이스의 개념과 다양한 메서드들을 알아 보았다.
활용도가 높은 인터페이스의 다형성에 관한 특성도 배우는 시간이였다.

profile
이유를 찾아보자

0개의 댓글