
인터페이스 : 행동이 강제됨
프로토콜 : 수평적 약속
인터페이스 : 수직적 약속
일방적, 상하 관계가 있음
정부가 고속도로를 만듦
자동차를 타는 사람은 나(개인)
정부가 고속도로를 만들고 나서 이대로 써! 하면 인터페이스

트럭들이 짐을 내리는데 시간이 오래걸림
짐들을 모으는 컨테이너를 만들었음
컨테이너를 실을 트럭과 컨테이너를 옮길 크레인이 필요함
컨테이너에 모든 것을 맞춘 인터페이스

추상 클래스 : 구체적인 것을 만든 후 추상 클래스를 만듦
공통점들을 모아서 만드는 것
이미 구조가 만들어져 있으면 상속
인터페이스 : 무조건 필요하다고 강제시킬 때 사용
내가 만든 프로그램대로 돌아가게 할 때
new 불가능
메서드 강제화
default : 몸체도 만들 수 있음
implements하는 구현체가 있음
추상 클래스와 인터페이스는 문법적으로 다른 것은 없음
package ex07.example; interface Remocon{ // 메서드 강제 -> 동적 바인딩 void on(); // 앞에 public abstract 생략 가능 void off(); } class SamsungRemocon implements Remocon{ @Override public void on() { System.out.println("삼성 리모콘 on"); } @Override public void off() { System.out.println("삼성 리모콘 off"); } } class LgRemocon implements Remocon{ @Override public void on() { System.out.println("엘지 리모콘 on"); } @Override public void off() { System.out.println("엘지 리모콘 off"); } } /** * 작성자 : 홍길동 * 날짜 : 2023.12.26 * 구현체 : SamsungRemocon, LgRemocon */ class CommonRemocon{ // 컴포지션(결합) = has 관계 : CommonRemocon이 Remocon을 가지고 있음 // [SamsungRemocon, Remocon] // [LgRemocon, Remocon] private Remocon r; // null 값 = 인터페이스 or 추상클래스 public CommonRemocon(Remocon r) { this.r = r; } public void on(){ r.on(); } public void off(){ r.off(); } } public class InterEx01 { public static void main(String[] args) { //Remocon samsung = new SamsungRemocon(); // [SamsungRemocon, Remocon] //samsung.on(); // 생성자로 객체 전달 // 동적 바인딩 : 내가 무엇을 넣느냐에 따라서 결정됨 CommonRemocon cr = new CommonRemocon(new SamsungRemocon()); cr.on(); } }
컴포지션 : 결합 = has 관계
동적 바인딩 : 내가 무엇을 넣느냐에 따라서 결정됨
Share article