Ch7-35~37. 인터페이스
0. 목차
Chapter7. 객체지향 프로그래밍Ⅱ
Ch7 - 35. 인터페이스
Ch7 - 36. 인터페이스 상속
Ch7 - 37. 인터페이스 구현
Ch7 - 35. 인터페이스
▶ 인터페이스(interface)란?
▷ 대부분 추상 메서드의 집합
▷ 구현된 것이 전혀 없는 설계도
▷ 껍데기
▷ 모든 멤버가 public
▶ 인터페이스(interface)의 특징
▷ 변수 iv, cv 불가
▷ 상수 가능
▷ 예외없이 모든 상수는 public static final
→ public static final
생략 가능
▷ 추상 메서드 가능
▷ 예외없이 모든 메서드는 public abstract
→ public 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) { }
}