다중 인터페이스 구현
Coddy Java 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 87개 중 36번째.
하나의 클래스만 확장할 수 있는 클래스 상속과 달리, Java에서는 클래스가 여러 인터페이스를 implement할 수 있습니다. 이것이 Java가 다중 상속의 한 형태를 안전하게 구현하는 방법입니다.
여러 인터페이스를 구현하려면 implements 키워드 뒤에 인터페이스를 쉼표로 구분하여 나열하세요:
public interface Drawable {
void draw();
}
public interface Resizable {
void resize(int width, int height);
}
public class Rectangle implements Drawable, Resizable {
private int width, height;
public Rectangle(int width, int height) {
this.width = width;
this.height = height;
}
@Override
public void draw() {
System.out.println("Drawing rectangle " + width + "x" + height);
}
@Override
public void resize(int width, int height) {
this.width = width;
this.height = height;
}
}class는 선언하는 모든 interfaces의 all methods를 implement해야 합니다. 또한 여러 interfaces와 상속을 결합할 수도 있습니다:
public class Square extends Shape implements Drawable, Resizable {
// 두 인터페이스의 메서드를 모두 구현해야 함
// Shape에서 상속받은 멤버도 사용할 수 있음
}이러한 유연성 덕분에 여러 역할을 수행하는 클래스를 설계할 수 있습니다. SmartPhone은 각각 휴대폰이 지원하는 서로 다른 기능을 정의하는 Callable, Messageable, Browsable interfaces를 implement할 수 있습니다.
챌린지
쉬움여러 capability를 가질 수 있는 smart device system을 만들어 봅시다. 전원을 켜고 끌 수 있으며 볼륨을 제어할 수 있는 SmartTV를 만들어, 하나의 class가 서로 다른 역할을 수행하기 위해 여러 interface를 implement하는 방법을 보여 줍니다.
코드를 네 개의 파일로 구성합니다.
Powerable.java: 전원을 켤 수 있는 device를 위한 interface를 Define합니다. 두 개의 methods인powerOn()과powerOff()를 declare해야 하며, bothvoid를 반환합니다.VolumeControl.java: volume control 기능이 있는 device를 위한 interface를 Define합니다.void를 반환하는setVolume(int level)method와int를 반환하는getVolume()method를 declare해야 합니다.SmartTV.java:Powerable과VolumeControlinterfaces를 모두 implements하는 class를 Create합니다. SmartTV에는brandfield(String),isOnfield(boolean, initially false),volumefield(int, initially 0)가 있어야 합니다. brand name을 입력받는 constructor도 포함합니다. 필요한 모든 methods를 implement합니다.powerOn()은isOn을 true로 설정하고 다음을 출력해야 합니다:[brand] TV is now ONpowerOff()는isOn을 false로 설정하고 다음을 출력해야 합니다:[brand] TV is now OFFsetVolume(int level)은 volume을 업데이트하고 다음을 출력해야 합니다:[brand] TV volume set to [level]getVolume()은 current volume을 반환해야 합니다.
Main.java: 여러 interface implementation을 시연하도록 모든 내용을 하나로 결합합니다. 두 개의 inputs, 즉 brand name(String)과 volume level(int)을 받습니다. 주어진 brand로 SmartTV를 Create한 다음 다음을 수행합니다.powerOn()을 Call합니다.- 주어진 level과 함께
setVolume()을 Call합니다. getVolume()을 사용하여 다음을 출력합니다:Current volume: [volume]powerOff()를 Call합니다.
두 개의 inputs, 즉 TV brand(String)과 volume level(int)을 받습니다.
출력에는 SmartTV가 두 interface contracts를 모두 충족하는 방법을 보여 주는 네 줄이 표시되어야 합니다. SmartTV는 어떤 Powerable device처럼 전원을 제어할 수 있고, 어떤 VolumeControl device처럼 volume을 제어할 수 있습니다!
직접 해보기
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 입력 읽기
String brand = scanner.nextLine();
int volumeLevel = scanner.nextInt();
// TODO: 주어진 brand로 SmartTV 생성
// TODO: powerOn() 호출
// TODO: 주어진 level로 setVolume() 호출
// TODO: Print: Current volume: [volume] using getVolume()
// TODO: powerOff() 호출
}
}
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
객체 지향 프로그래밍의 모든 레슨
4상속
상속의 기초 (extends)super 키워드메서드 오버라이딩 (@Override)생성자 체이닝Object 클래스단일 및 다중 레벨 상속다중 클래스 상속이 불가능한 이유요약 - 직원 계층 구조6인터페이스와 추상 클래스
인터페이스 소개인터페이스 구현하기다중 인터페이스 구현인터페이스의 Default 및 Static 메서드추상 클래스 vs 인터페이스함수형 인터페이스복습 - 결제 시스템직접 연습해 보세요: 온라인 Java 컴파일러