인터페이스 - 1

조윤후·2021년 7월 1일
0

인터페이스란 ?

  • 객체와 객체의 소통수단
  • 다형성 - JAVA에서 다형성을 가능하게 함
  • 추상메소드와 상수만 존재한다.
  • Private X 상수 만들때 Private 접근 제한자 X
  • 메소드는 추상메소드만 존재
  • 객체타입 - 인터페이스는 객체 X 객체타입으로 사용 됨
  • 구현은 실행되는 객체의 메소드에서 함

인터페이스에서는 implements란걸 사용하는데 여러개의 인터페이스가 존재할수 있다.

package sutdy.java.ex15.interface_1;

public class InterfaceClass implements InterfaceEx, InterfaceEx2 {

	@Override
	public String getStr() {
		System.out.println("Interface2 : 실제 구현 하는곳");
		return null;
	}

	@Override
	public void calculate() {
		System.out.println("InterFace : 실제 구현 하는곳");
	}
	
}
package sutdy.java.ex15.interface_1;

public interface InterfaceEx {

	public static final int CONSTANT_NUM = 1000;
	public void calculate();
}
package sutdy.java.ex15.interface_1;

public interface InterfaceEx2 {

	public static final String CONSTANT_NUM = "Hello World";
	public String getStr();
}
package sutdy.java.ex15.interface_1;

public class MainClass {

	public static void main(String[] args) {
				
		InterfaceClass ic = new InterfaceClass();
		ic.calculate();
		ic.getStr();
					
		/*
		 * 객체타입이 interfaceEx 이기 때문에 
		 * interface안에 있는 calculate 메소드만 호출가능
		 */
		InterfaceEx if2 = new InterfaceClass();
		if2.calculate();
	}
}

인터페이스 예제문제
조건 : 핸드폰 제조사에서 여러가지 3가지 핸드폰 종류를 만든다 그 핸드폰은 종류마다
기능이 다릅니다. 인터페이스를 사용하여 구현해보세요
들어가야하는 기능 : 전화 수/발신 , LTE종류 , 리모콘 기능

package sutdy.java.ex15.interface_1_ex_smartPhone;

public interface SmartPhone {

	public void callSendRecevive();
	public void LTE();
	public void tvRemoteControll();
	
}
package sutdy.java.ex15.interface_1_ex_smartPhone;

public class APhone implements SmartPhone{

	@Override
	public void callSendRecevive() {
		System.out.println("전화 가능합니다");
	}

	@Override
	public void LTE() {
		System.out.println("3G입니다.");
	}

	@Override
	public void tvRemoteControll() {
		System.out.println("기본 미탑재");
	}

}
package sutdy.java.ex15.interface_1_ex_smartPhone;

public class BPhone implements SmartPhone{

	@Override
	public void callSendRecevive() {
		System.out.println("전화 가능합니다");
	}

	@Override
	public void LTE() {
		System.out.println("4G입니다.");
	}

	@Override
	public void tvRemoteControll() {
		System.out.println("기본 탑재");
	}
}
package sutdy.java.ex15.interface_1_ex_smartPhone;

public class CPhone implements SmartPhone{

	@Override
	public void callSendRecevive() {
		System.out.println("전화 가능합니다");
	}

	@Override
	public void LTE() {
		System.out.println("4G입니다.");
	}

	@Override
	public void tvRemoteControll() {
		System.out.println("기본 미탑재");
	}
}
package sutdy.java.ex15.interface_1_ex_smartPhone;

public class MainClass {

	public static void main(String[] args) {
		
		SmartPhone ap = new APhone();
		SmartPhone bp = new BPhone();
		SmartPhone cp = new CPhone();
//		ap.callSendRecevive();
//		ap.LTE();
//		ap.tvRemoteControll();
		
		SmartPhone[] sp = {ap,bp,cp};
		
		for (int i = 0; i < sp.length; i++) {
			System.out.println((i+ 1) + "번째 핸드폰 기능은?");
			sp[i].callSendRecevive();
			sp[i].LTE();
			sp[i].tvRemoteControll();
			System.out.println("==========");
		}
	}
}

문제2 : 배우를 만들어 경찰관 소방관 요리사가 될수 있게 하세요.

package sutdy.java.ex15.interface_1_ex_actor;

public class Actor implements Chef, Police, FireFighter{

	@Override
	public void outFire() {
		System.out.println("소방관은 불을 끌수 있습니다.");
	}

	@Override
	public void saveMan() {
		System.out.println("소방관은 사람을 구할수 있습니다.");		
	}

	@Override
	public void canCatch() {
		System.out.println("경찰은 도둑을 잡을수 있습니다.");
	}

	@Override
	public void canSearch() {
		System.out.println("경찰은 물건을 찾을수 있습니다.");
	}

	@Override
	public void makePizza() {
		System.out.println("요리사는 피자를 만들수 있습니다.");		
	}

	@Override
	public void makeSapaghetti() {
		System.out.println("요리사는 스파게티를 만들수 있습니다.");		
	}
	
}
package sutdy.java.ex15.interface_1_ex_actor;

public interface Chef {

	public void makePizza();
	public void makeSapaghetti();
}
package sutdy.java.ex15.interface_1_ex_actor;

public interface Police {
	
	public void canCatch();
	public void canSearch();

}
package sutdy.java.ex15.interface_1_ex_actor;

public interface FireFighter {

	public void outFire();
	public void saveMan();
}
package sutdy.java.ex15.interface_1_ex_actor;

public class MainClass {

	public static void main(String[] args) {
		
		Actor at = new Actor();
		
		at.canCatch();
		at.canSearch();
		System.out.println("========");
		at.makePizza();
		at.makeSapaghetti();
		System.out.println("========");
		at.outFire();
		at.saveMan();
		
		/*
		 * 인터페이스 정리 : 인터페이스는 객체 타입은 가능하다, 하지만 생성자? 로 사용할수 없다. 
		 */
		Chef cf = new Actor();
		
	}
}

정리 : 기능을 구현할 자바를 만들고, implements 로 재정의 해야하는 인터페이스를 상속받는다. 인터페이스는 추상클래스 와 상수만 정리를 한다. implements로 상속받은 자바파일은 반드시 추상클래스를 구현하여야 한다. 인터페이스는 객체를 만들때 인터페이스 자체를 객체로 만들수 없다. 하지만 객체 타입은 가능 위 예제를 통한 객체 만들기 정리

Actor ac = new Actor(); -> 가능
Chef cf = new Actor(); -> 데이터 타입으로 생성했으므로 가능
Chef cf = new Chef(); -> 불가능

profile
공부하며 예제풀이 정리

0개의 댓글

관련 채용 정보

Powered by GraphCDN, the GraphQL CDN