본문 바로가기
Java/Java_basic

Step18. 인터페이스(Interface)

by Mr.DonyStark 2023. 9. 25.

□ 인터페이스

 ○ 클래스와 달리 객체를 생성할 수 없으며, 클래스에서 구현해야할 작업 명세서임

 ○ 클래스에서 인터페이스를 구현하는 단계. 이때 인터페이스는 상세한 내역은 없고 껍데기만 있음
 ○ public class 클래스명 + implements + 인터페이스A, 인터페이스B, 인터페이스C ~
 ○ 사용이유 : 인터페이스를 사용하는 이유는 많지만 가장 큰 이유는 객체가 다양하 자료형(타입)을 가질 수 있기 때문

 예제 1) 인터페이스 2개 생성

package pjt_test;

//인터페이스 생성
public interface InterfaceA {
	
	//인터페이스상에서 메서드 선언만 할뿐 정의는 하지 않음
	//정의는 {}활용
	public void funA();
}
package pjt_test;

//인터페이스 생성
public interface InterfaceB {
	
	//인터페이스상에서 메서드 선언만 할뿐 정의는 하지 않음
	//정의는 {}활용
	public void funB();
}

 예제 1-1) 인터페이스활용하여 클래스생성 + implements + Override

package pjt_test;

//클래스생성 및 인터페이스 정의
//인터페이스는 다중으로 기재할 수 있음
public class InterfaceClass implements InterfaceA, InterfaceB{

	
	//생성자 생성
	public InterfaceClass() {
	System.out.println("인터페이스 2개활용하여 생성된 클래스");
	}

	//인터페이스에서 정의한 메서드 호출
	//재정의를 하기에 @override 언어텐션 붙임
	@Override
	public void funA() {
		System.out.println("인터페이스 A 메서드");
	}

	//인터페이스에서 정의한 메서드 호출
	//재정의를 하기에 @override 언어텐션 붙임
	@Override
	public void funB() {
		System.out.println("인터페이스 B메서드");		
	}

}

 예제 1-2) 인터페이스활용하여 생성한 클래스로 객체 생성 + 인터페이스를 객체 타입으로 지정하여 객체생성

package pjt_test;

public class ImplementClass_Main {
	public static void main(String[] args) {
		
		//인터페이스에서 선언/정의한 것으로 타입지정 및 객체 생성
		InterfaceA ia = new InterfaceClass();
		InterfaceB ib = new InterfaceClass();
		
		//타입을 interfaceA로 지정했기에, 인터페이스에서 지정한 메서드만 활용가능
		ia.funA();
		ib.funB();
	}
}

예제 2) 장난감 인터페이스 생성

package pjt_test;

public interface Toy {

	//인터페이스상에서 메서드 선언만 할뿐 정의는 하지 않음
	//정의는 {}활용
	public void walk();
	public void run();
	public void alarm();
	public void light();
}

예제 2-1) 장난감 인터페이스를 활용하여 로봇, 비행기 클래스 생성

package pjt_test;

public class ToyRobot implements Toy{

	//생성자
	public ToyRobot() {
		System.out.println("나는 로봇생성자");
	}
	
	@Override
	public void walk() {
		System.out.println("로봇걷다");
	}

	@Override
	public void run() {
		System.out.println("로봇뛰다");		
	}

	@Override
	public void alarm() {
		System.out.println("로봇알람울리다");		
	}

	@Override
	public void light() {
		System.out.println("로봇불키다");
	}
	
}
package pjt_test;

public class ToyAirplane implements Toy{

	//생성자
	public ToyAirplane() {
		System.out.println("나는 비행기생성자");
	}
	
	@Override
	public void walk() {
		System.out.println("비행기걷다");		
	}

	@Override
	public void run() {
		System.out.println("비행기뛰다");				
	}

	@Override
	public void alarm() {
		System.out.println("비행기알람울리다");				
	}

	@Override
	public void light() {
		System.out.println("비행기불키다");				
	}

}

예제 2-1) 인터페이스를 바탕으로 생성된 클래스 2개를 활용하여 객체 생성

package pjt_test;

public class Toy_Main {
	public static void main(String[] args) {
		
		//인터페이스에서 선언/정의한 것으로 타입지정 및 객체 생성
		Toy Robot_Toy = new ToyRobot();
		Toy Airplane_Toy = new ToyAirplane();
		Toy toys[] = {Robot_Toy, Airplane_Toy};
		
		for (int i = 0 ; i < toys.length; i++) {
			toys[i].walk();
			toys[i].run();
			toys[i].alarm();
			toys[i].light();
			System.out.println();
		}
	}
}