[4단원]interface 키워드와 implements 키워드

개요

  • interfaceimplements 키워드는 추상화와 다형성을 지원하는 대표적 문법임

인터페이스 구성요소

  • 인터페이스는 public 추상 메서드 와 public 정적 상수만을 가진다.
interface Speakable {
  double PI = 3.14159;
  final double absoluteZeroPoint = -275.15;
  void sayYes();
}
  • Speakable 인터페이스에서는
  • PI , absoluteZeroPoint 가 각각 상수로 인식된다.
  • 또한 sayYes() 는 abstract == 추상메서드로 인식된다.
    자바에서는 인터페이스 내부의 상수나 메서드에 static 이나 abstract 같은 키워드를 명시적으로 쓰지 않아도 된다.

    이는 설계시에 사용자들을 배려한 처사이다.

인터페이스 구현

class Speaker implements Speakable {
  public void sayYes() {
    System.out.println("I say NO!!!");
  }
}
  • Speaker 클래스가 Speakable 을 구현한다면, Speakeable 에 정의된 모든 메서드를 반드시 오버라이딩 해야함.

예제 비교

interface Speakable {
  double PI = 3.14159;
  final double absoluteZeroPoint = -275.15;
  void sayYes();
}
interface Speakable {
  public static final double PI = 3.14159;
  public static final double absoluteZeroPoint = -275.15;
  public abstract void sayYes();
}
  • 두 예제는 사실상 동일한 코드임
  • 전자는
    • 키워드 생략
  • 후자는
    • 모든 키워드를 명시함.

명시적 코드의 중요성

  • 명시적인게 일반적으로 더 좋다고 생각
    1. 명확함
      • 해당 변수나 메서드의 속성 자체가 명확해지며,
      • 인터페이스의 규칙을 모르는 사람도 쉽게 이해할 수 있음
    1. 코드의 가독성
      • 명시적 표현은 코드를 읽는 사람에게 더 명확한 의미를 전달
    1. 유지보수
      • 코드를 수정할 필요가 있는 경우, 명시적인 코드가 더 유지보수하기 쉬움

추상 메서드의 증거

  • sayYes() 메서드는 몸체가 없는 추상 메서드임.
  • 추상 메서드는 구현되지 않은 메서드를 의미하므로, sayYes()는 당연히 추상 메서드

정적 상수의 증거

  • PIabsoluteZeroPoint에 새로운 값을 할당하려고 하면 에러가 발생한다.
    • 이로 인해, 이들 변수는 상수(final)임을 알 수 있다.
  • 클래스명으로 접근할 수 있는 것은 정적(static) 변수임을 나타냅니다.

자바 8 에서의 변화

  • 빅데이터와 병렬성 지원을 위해 람다 기능이 추가됨.
  • 함수를 변수에 할당할 수 있게 되었으며, 인터페이스도 그에 따라 변환함
  • 자바 8 이전
    • 정적 상수 + 추상 메서드만 가능
  • 이후
    • 디폴트 메서드와 정적 메서드도 지원


Uploaded by N2T