티스토리 뷰
인터페이스(interface)
- 인터페이는 일종의 추상 클래스이다.
- 추상화 정도가 높아서 일반 메서드나, 맴버변수를 구성원으로 가질 수 없다. (abstract는 가질 수 있다.)
- 오직 추상 메서드와 상수만을 맴버로 가질 수 있다.
- 다른 클래스 작성을 목적으로 작성된다.
interface Temp{ public static final TEMP_MEMBER_VARIABLE = ??; public abstract tempMethod(TempType temp); }
제약 사항
- 모든 맴버 변수는 public static final 로 고정된다. 단, 이를 생략 할 수 있다. (어차피 맴버변수에 모두 접근해야하고 인스턴스를 만들 수는 없으므로 이렇게 쓰는 게 맞다.)
- 모든 메서드는 public abstract 이어야 하며, 이를 생략할 수 있다. 단, static메서드와 default 메서드는 예외이다.
- public이어야 하위 자손이 구현체로 들어가고, 이를 인터페이스에서 호출할 수 있기 때문이다.
- 원래 인터페이스의 모든 메서드는 추상메서드여야 했는데, JDK 1.8이후부터 static 메서드와 디폴트 메서드가 추가되었다.
인터페이스의 상속 : 인터페이스는 인터페이스만 상속받을 수 있으며, 다중 상속이 가능하다.
interface Movable{ void move(int x, int y); } interface Attackable{ void attack(Unit u); } interface Fightable extends Movable, Attackable {}
인터페이스의 상속도 extends가 가능하며 다중 상속이 가능하다는 것을 유의하자,
또한 조상으로부터 상속받은 추상 메서드를 맴버로 갖는다는 것도 알아두자,
인터페이스의 구현
- 인터페이스는 implements로 자손 클래스에서 구현이 가능하다. 단, 이 때에는 모든 인터페이스를 구현해야한다.
- 인터페이스의 이름은 주로 ~able로 끝나는데 이는 ~을 할 수 있는 기능을 가지고 있다고 보면 된다.
- 만일 구현하는 인터페이스 메서드 중에 일부만 구현한다면 abstract 추상 클래스에서 implements하면 된다.
- 인터페이스의 메서드들은 public이므로 implements한 클래스의 해당 메서들 모두 public일 수 밖에 없다.
인터페이스를 이용한 다중 상속
- 실제 인터페이스를 이용하여 다중 상속을 자주 사용하진 않는다.
- 만약, 다중 상속이 필요한 경우가 있다면 내부의 해당 클래스의 인스턴스를 내부에서 갖도록 하자 (즉, Composition 하라는 것, 맴버변수로 가지라는 말이다.)
public interface IVCR{ public void play(); } public class TVCR extends Tv implements IVCR{ VCR vcr = new VCR(); public void play(){ vcr.play(); } }
- 인터페이스를 리턴값으로 쓴다는 것은 해당 인터페이스를 구현한 클래스의 인스턴스를 반환한다는 것이다.
- 왜냐하면 인터페이스는 인스턴스로 만들 수 없기 때문이다.
'노답 스터디 > JAVA' 카테고리의 다른 글
Java 문법 정리 11일차 - lang package (0) | 2021.07.11 |
---|---|
Java 문법 정리 10일차 - inner class (0) | 2021.07.11 |
Java 문법 정리 8일차 - 다형성 (0) | 2021.07.11 |
Java 문법 정리 7일차 - 추상 메서드 (0) | 2021.07.11 |
Java 문법 정리 6일차 - 제어자 (0) | 2021.07.11 |