자바의 정석 - 인터페이스의 선언, 상속, 구현

Yohan·2024년 1월 24일
0

인터페이스(interface)

  • 추상 메서드의 집합
  • 구현된 것이 전혀 없는 설계도, 껍데기 (모든 멤버가 public)
interface 인터페이스이름 {
	public static final 타입 상수이름 =; // 상수 (final 붙음)
    public abstract 메서드이름(매개변수목록); // 추상메서드
}
  • interface에서는 public, static, abstract, final 이 생략가능 !!!
    -> interface는 항상 public, 항상 static, 항상 abstract, 항상 final이기 때문
interface PlayingCard {
	public static final int SPADE = 4;
    final int DIAMOND = 3; // public static final int DIAMOND = 3;
    static int HEART = 2; // public static final int HEART = 2;
    int CLOVER = 1; // public static final int CLOVER = 1;
    
    public abstract String getCardNumber();
    String getCardkind(); // public abstract String getCardkind();
}

추상클래스, 인터페이스 차이점

  • 추상클래스는 일반클래스인데 추상메서드를 가지고 있는 클래스 (생성자 O, 멤버변수 O)
  • 인터페이스는 다른 것 없이 추상메서드만 가지고 있는 집합 (생성자 X, 멤버변수 X)

인터페이스의 상속

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

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

interface Attackable {
	void attack(Unit u);
}

인터페이스의 구현

  • 인터페이스도 추상메서드 (미완성 설계도)
  • 인터페이스에 정의된 추상 메서드를 완성하는 것
class 클래스이름 implements 인터페이스이름 {
	// 인터페이스에 정의된 추상메서드를 모두! 구현해야한다.
}
// 예시
interface Fightable {
	void move(int x, int y);
    void attack(Unit u);
}

class Fighter implements Fightable {
	public void move(int x, int y) { /* 내용 */ }
    public void attack(Unit u) { /* 내용 */ }
}
  • Fighter class는 Fightable 인터페이스를 구현했다 라고 할 수 있음!
  • 일부만 구현하는 경우, 클래스 앞에 abstract를 붙여야 함. (추상클래스가 된 것)
abstract class Fighter implements Fightable {
	public void move(int x, int y) { /* 내용 */ }
}

  • Q. 인터페이스란?
  • A. 추상 메서드의 집합

  • Q. 인터페이스의 구현이란?
  • A. 인터페이스의 추상메서드 몸통 { } 만들기 (미완성 설계도 완성하기)

  • Q. 추상클래스와 인터페이스의 공통점은?
  • A. 추상메서드를 가지고 있다 (미완성 설계도)

  • Q. 추상클래스와 인터페이스의 차이점은?
  • A. 인터페이스는 iv를 가질 수 없다.
profile
백엔드 개발자

0개의 댓글