자바의 정석 기초편 ch7-35~37 인터페이스의 선언, 상속, 구현
객체지향 3~4개씩 2배속으로 복습하자
인터페이스(프로그래밍 관점에서): 추상 메서드의 집합
구현된 것이 전혀 없는 설계도. 껍데기(모든 멤버가 public)
객체에서 다른 객체의 변수에 접근하려면 메서드를 통해서 접근해야 한다(캡슐화).
데이터를 메서드가 감싸고 있다.
왜? 데이터를 보호하려고
그래서 직접 변수를 접근한다.
t.hour X t.getHour() O
8 각형의 껍데기가 인터페이스이다.
제일 바깥에 노출되어 있으니까 public이다.
추상클래스와 인터페이스 차이가 뭔가?
추상클래스는 일반클래스인데 추상 메서드를 가지고 있다.
일부가 미완성
인터페이스는 완전히 아무것도 없고 추상 메서드만 가지고 있다.
구현된 게 아무것도 없다.
멤버변수, 생성자도 가질 수 없다.
인터페이스 선언
interface 인터페이스이름 {
public static final 타입 상수이름 = 값; < 상수
public abstract 메서드이름(매개변수목록); <추상메서드
}
변수 iv, cv 는 안된다.
상수만 가능
예외 없이 인터페이스의 모든 멤버는 public이다.
추상 메서드니까 {}몸통이 없다.
추상메서드 Strint getCardKind(); abstract가 안 붙었네?
근데도 몸통이 없네? abstract를 생략한 것이다. public도 생략 가능.
왜냐하면 항상 인터페이스의 모든 메서드는 항상 public이고
abstract니까 생략이 가능하다.
상수도 항상 public이고 static이고 final이다.
예외 없다. 일부 혹은 전부 생략 가능하다.
- 인터페이스의 조상은 인터페이스만 가능(Object가 최고 조상 아님)
- 다중 상속이 가능(추상메서드는 충돌해도 문제없다.)
다중 상속: 조상이 여러 개인 것
왜 가능할까?
같은 메서드를 두 개의 부모가 갖고 있는데 내용이 다르면 어느 것을 상속받을지 알 수 없었다.
근데 추상메서드는 충돌할 게 없다.
{}구현부가 없으니까
인터페이스도 미완성 설계도이다. >
미완성 설계도이니 완성을 해야 한다.
- 인터페이스에 정의된 추상 메서드를 완성하는 것 = 인터페이스의 구현= 몸통{} 만들기
인터페이스도 구현(implements)을 통해 추상메서드를 완성한다.
추상클래스는 상속(extends)을 통해 클래스를 완성한다.
Fighter클래스는 Fightable 인터페이스를 구현했다. =
Fightable 인터페이스가 가지고 있는 두 개의 추상메서드 몸통을 다 만들어줬다.
- 일부만 구현하는 경우, 클래스 앞에 abstract를 붙여야 함.
추상메서드가 2개 있는데 하나만 구현한다면
abstract를 클래스 앞에 추가해서 추상 클래스임을 알려주자.
인터페이스의 핵심은 추상메서드다.
추상 클래스와 인터페이스의 공통점은?
- 추상 메서드를 가지고 있다.(미완성 설계도)
추상 클래스와 인터페이스의 차이점은?
- 인터페이스는 iv를 가질 수 없다.
인터페이스는 추상 메서드만 가지고 있다.