FireDrago

[java] 인터페이스 예제로 정리하기 본문

프로그래밍/Java

[java] 인터페이스 예제로 정리하기

화이용 2023. 5. 2. 14:30
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 클래스를 '중개자 클래스'라고 한다. 

 

인스턴스를 구현하는 클래스가 많아질수록 '중개자 클래스'를 통한 관리가 필요하다.