FireDrago
[java] 인터페이스 예제로 정리하기 본문
interface Providable {
void leisureSports ();
void sightSeeing();
void food();
} //메서드앞에 public abstract는 생략가능하다
Providable 인터페이스에 3개의 메서드가 선언부만 들어가있다. 이 예제에는 없지만
인터페이스에는 (public final) 상수와 (public abstract ) 메서드의 선언부로 구성된다.
인터페이스의 메서드는 다른 클래스에서 구현하기 위한 목적이 있으므로
public을 붙여 다른 클래스에서 접근하기 용이하도록 해주는 것이다.
class KoreaTour implements Providable { //인터페이스 구현할때는 'implements'
public void leisureSports() {
System.out.println("수상스키 타자");
}
public void sightSeeing() {
System.out.println("경복궁 관람");
}
public void food () {
System.out.println("김치 냠냠");
}
}
class JapanTour implements Providable {//인터페이스 구현할때는 'implements'
public void leisureSports() {
System.out.println("원전에서 헤엄치자");
}
public void sightSeeing() {
System.out.println("디즈니랜드 관람");
}
public void food () {
System.out.println("스시 냠냠");
}
}
KoreaTour , JapanTour 두개의 클래스가 인터페이스를 '구현한다'
인터페이스를 구현하는 클래스는 인터페이스 내부의 추상 메서드를 내용까지 구현해야한다.
클래스가 인터페이스를 구현함으로서 통일성 있는 프로그래밍이 가능하며, 다형성을 이용할 수 있게된다.
Providable 에 선언된 3가지 메서드를 KoreaTour 클래스와 JapanTour 클래스에서 각각 구현하고 있다.
이렇게 인터페이스를 구현한 클래스가 어떻게 사용되는지 살펴보자
class TourGuide {
private Providable p = new JapanTour();
//private Providable p = new KoreaTour();
//인터페이스 타입으로 구현 클래스 객체를 참조 (다형성)
public void leisureSports() {
p.leisureSports();
}
public void sightSeeing () {
p.sightSeeing();
}
public void food () {
p.food();
}
}
인터페이스 타입의 변수로 JapanTour 클래스 객체를 참조했다. (다형성) 이런 상태를 '약한 연결' 상태라고 한다.
JapanTour를 KoreaTour로 변경만 해줘도 코드가 정상 작동한다.
Providable 인터페이스를 구현한 클래스가 많아지더라도 다형성으로 인해 Providable p 참조변수에 모두 담을 수 있다.
public class Class8_2 {
public static void main(String[] args) {
TourGuide chu = new TourGuide();
chu.leisureSports();
chu.sightSeeing();
chu.food();
}
}
main 메서드에서 사용할때는 TourGuide 클래스만 인스턴스화 하여 사용하면 된다.
TourGuide 클래스를 '중개자 클래스'라고 한다.
인스턴스를 구현하는 클래스가 많아질수록 '중개자 클래스'를 통한 관리가 필요하다.
'프로그래밍 > Java' 카테고리의 다른 글
| [java] LocalDate/LocalTime 메서드 정리 (0) | 2023.05.04 |
|---|---|
| [java] String 클래스의 유용한 메서드 (0) | 2023.05.03 |
| [java] 상속과 다형성 개념정리 (0) | 2023.05.01 |
| [java] 입력받은 이름을 가나다 순으로 정렬하기 (for문 사용) (0) | 2023.04.26 |
| [java] 버블정렬 알고리즘 (0) | 2023.04.25 |
