본문 바로가기
JAVA

인터페이스(Interface)

by EUN-JI 2023. 7. 15.

인터페이스(Interface) ★  :변수 선언은 되지만 객체 못 만듦. 

 

: 추상 클래스와 거의 비슷한 메커니즘(추상클래스와 동일한 처리가 가능함.)

: 인터페이스 선언은 (class) 대신 (interface)를 사용하는 것.

 

: 필드>> public, static, final /   메소드>>abstract 제한자를 붙인것과 마찬가지

: 인터페이스 필드는 상수 / 메소드는 추상메소드 인 셈

:  필드변경 불가. 메소드 몸체 못 만듦.

: 객체 만들지 못함.(new 연산자 사용안됨.)

 

 

: 인터페이스구현(implementation)은 클래스와 조합 사용하는 행위

 

 

public class Main {

	public static void main(String[] args) {
		//팀장이 인터페이스를 설계하고 추상메소드의 이름을 정하면 
		//팀원들을 그 이름을 토대로 기능을 구현하여 클래스를 설계/
		//팀장: Unit인터페이스- 유닛이라면 가져야 할 필수 기능의 이름을 정함 (공격,이동기능)
		//팀원1: Marine 클래스 설계 및 unit 구현
		//팀원2: Tank 클래스 설계 및 unit 구현
		//팀원3: Race 클래스 설계 및 unit 구현
		
		//팀장은 만들어진 클래스를 이용하여 객체생성 및 게임 알고리즘을 코딩
		
		Unit[] units =new Unit[5];
		
		//유닛들 추가
		units[0]=new Marine();
		units[1]= new Tank();
		units[2]=new Race();
		units[3]=new Marine();
		units[4]=new Tank();
		
		//유닛들의 기능을 사용
		for(int i=0; i<units.length; i++) {
			units[i].move();
			units[i].attack();
			
//			if(units[i] instanceof Marine) {
//				Marine m=(Marine)units[i];
//				m.levelUp();
//			}else if(units[i] instanceof Tank) {
//				Tank t =(Tank)units[i];
//				t.levelUp();
//			}
			if(units[i] instanceof LevelUpAble) {
				LevelUpAble obj=(LevelUpAble)units[i];
				obj.levelUp();
			}
			
			System.out.println();
		}
		
		
	}

}
----------------------------------------------------------------------------------------

public interface Unit {
	//추상메소드
	public abstract void attack();
	void move(); //자동 public abstract
}
------------------------------------------------------------------------------------------

public interface LevelUpAble {

		public abstract void levelUp();
	
}
------------------------------------------------------------------------------------------
import javax.swing.UIDefaults.LazyValue;

public class Marine implements Unit,LevelUpAble{
	
	@Override
	public void move() {
		// TODO Auto-generated method stub
		System.out.println("걸어서 이동..");
	}
	@Override
	public void attack() {
		// TODO Auto-generated method stub
		System.out.println("총알 발사..");
		
	}
	@Override
	public void levelUp() {
		// TODO Auto-generated method stub
		System.out.println("불꽃 마린으로 ..변신");
	}
}
-------------------------------------------------------------------------------------------

public class Race implements Unit{

	@Override
	public void attack() {
		// TODO Auto-generated method stub
		System.out.println("미사일 발사~~~");
	}

	@Override
	public void move() {
		// TODO Auto-generated method stub
		System.out.println("날아서 이동~~~");
	}

}
-------------------------------------------------------------------------------------------

public class Tank implements Unit,LevelUpAble{
		@Override
		public void move() {
			// TODO Auto-generated method stub
			System.out.println("바퀴로 이동..");
		}
		@Override
		public void attack() {
		// TODO Auto-generated method stub
			System.out.println("자주포 발사!!");
		}
		@Override
		public void levelUp() {
		// TODO Auto-generated method stub
			System.out.println("미친탱크");
		}

}