/ JAVAJUNGSUK

Ch7-35~37. 인터페이스

자바의 정석 기초편

0. 목차



Chapter7. 객체지향 프로그래밍Ⅱ

Ch7 - 35. 인터페이스

Ch7 - 36. 인터페이스 상속

Ch7 - 37. 인터페이스 구현



Ch7 - 35. 인터페이스


▶ 인터페이스(interface)란?

▷ 대부분 추상 메서드의 집합
▷ 구현된 것이 전혀 없는 설계도
▷ 껍데기
▷ 모든 멤버가 public


▶ 인터페이스(interface)의 특징

▷ 변수 iv, cv 불가
▷ 상수 가능
▷ 예외없이 모든 상수는 public static finalpublic static final 생략 가능
▷ 추상 메서드 가능
▷ 예외없이 모든 메서드는 public abstractpublic abstract 생략 가능
interface 인터페이스 이름 {
    public static final 타입 상수 이름 =  ;
    public abstract 메서드 이름(매개변수 목록);
}
interface PlayingCard {
    public static final int SPADE = 4;
    final int DIAMOND = 3;
    static int HEART = 2;
    int CLOVER = 1; // public static final int CLOVER = 1;
    
    public abstract String getCardNumber();
    String getCardKind(); // public abstract String getCardKind();
}

▶ 추상 클래스 vs 인터페이스

▷ 추상 클래스 : 추상 메서드, 생성자, iv를 가진 일반 클래스
▷ 인터페이스 : 추상 메서드만 가진 클래스 → 생성자, iv, cv… 안됨




Ch7 - 36. 인터페이스 상속


▶ 인터페이스 상속은?

▷ 인터페이스의 조상은 인터페이스만 가능
▷ Object가 최고 조상 아님
▷ 다중 상속이 가능(조상이 여러 개)
▷ 다중 상속의 문제점 : 충돌
▷ 추상 메서드는 충돌해도 문제 없음 → 구현부가 없기 때문, 내용 충돌 없음
interface Fightable extends Movable, Attackable { }

abstract class Unit {
    abstract void unit();
}

interface Movable { void move(int x, int y); }

interface Attackable { void attack(Unit u); }



Ch7 - 37. 인터페이스 구현


▶ 인터페이스 구현이란?

▷ 인터페이스에 정의된 추상 메서드를 완성하는 것
▷ 인터페이스 = 추상 메서드의 집합 = 미완성 설계도
▷ 완성을 시켜야 사용이 가능함
▷ 추상 클래스는 extends를 통해 상속받아 완성 시킴
▷ 인터페이스는 implements를 통해 상속받아 완성 시킴
▷ 구현 : 인터페이스에 정의 된 추상 메서드의 구현부{}를 모두 작성하는 것
class 클래스 이름 implements 인터페이스 이름 {
    // 인터페이스에 정의 된 추상 메서드에 구현부{} 모두 작성 
}
  • Fighter 클래스는 Fightable 인터페이스를 구현했다
      interface Fightable {
          void move(int x, int y);
          void attrack(Unit u);
      }
        
      class Fighter implements Fightable {
          void move(int x, int y) { }
          void attrack(Unit u) { }
      }
    
▷ 일부만 구현하는 경우, 클래스 앞에 abstract를 붙여야 함
abstract class Fighter implements Fightable {
    public void move(int x, int y) { }
}