다중 인터페이스 구현
Coddy Java 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨 — 87개 중 36번째.
하나의 클래스만 확장할 수 있는 클래스 상속과 달리, Java는 클래스가 여러 인터페이스를 구현할 수 있도록 허용합니다. 이것이 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;
}
}클래스는 선언된 모든 인터페이스의 모든 메서드를 구현해야 합니다. 상속과 여러 인터페이스를 결합할 수도 있습니다:
public class Square extends Shape implements Drawable, Resizable {
// 두 인터페이스의 메서드를 반드시 구현해야 합니다
// Shape로부터 상속받은 멤버도 사용할 수 있습니다
}이 유연성을 통해 여러 역할을 수행하는 클래스를 설계할 수 있습니다. SmartPhone은 Callable, Messageable, 및 Browsable 인터페이스를 구현할 수 있으며, 각 인터페이스는 휴대폰이 지원하는 서로 다른 기능을 정의합니다.
챌린지
쉬움장치가 여러 기능을 가질 수 있는 스마트 장치 시스템을 구축해 보겠습니다. 전원을 켜고 끌 수 있을 뿐만 아니라 볼륨 조절도 가능한 SmartTV를 만들어 볼 것입니다. 이를 통해 하나의 클래스가 어떻게 여러 인터페이스를 구현하여 서로 다른 역할을 수행할 수 있는지 실습해 봅니다.
코드는 다음 네 개의 파일로 구성됩니다:
Powerable.java: 전원을 켤 수 있는 장치를 위한 인터페이스를 정의합니다.powerOn()과powerOff()라는 두 개의 메서드를 선언해야 하며, 둘 다 반환 타입은 void입니다.VolumeControl.java: 볼륨 조절 기능이 있는 장치를 위한 인터페이스를 정의합니다. void를 반환하는setVolume(int level)메서드와 int를 반환하는getVolume()메서드를 선언해야 합니다.SmartTV.java:Powerable과VolumeControl인터페이스를 모두 구현하는 클래스를 생성합니다. SmartTV는brand필드(String),isOn필드(boolean, 초기값 false),volume필드(int, 초기값 0)를 가져야 합니다. 브랜드 이름을 매개변수로 받는 생성자를 포함하세요. 필요한 모든 메서드를 구현합니다:powerOn()은isOn을 true로 설정하고[brand] TV is now ON을 출력해야 합니다.powerOff()는isOn을 false로 설정하고[brand] TV is now OFF를 출력해야 합니다.setVolume(int level)은 볼륨을 업데이트하고[brand] TV volume set to [level]을 출력해야 합니다.getVolume()은 현재 볼륨을 반환해야 합니다.
Main.java: 다중 인터페이스 구현을 보여주기 위해 모든 요소를 결합합니다. 브랜드 이름(String)과 볼륨 레벨(int) 두 개의 입력을 받습니다. 해당 브랜드로 SmartTV를 생성한 후 다음을 수행합니다:powerOn()호출- 입력받은 레벨로
setVolume()호출 getVolume()을 사용하여Current volume: [volume]출력powerOff()호출
TV 브랜드(String)와 볼륨 레벨(int) 두 개의 입력을 받게 됩니다.
출력은 SmartTV가 두 인터페이스 계약을 어떻게 충족하는지 보여주는 네 줄의 텍스트여야 합니다. 즉, Powerable 장치처럼 전원을 제어할 수 있고 VolumeControl 장치처럼 볼륨을 조절할 수 있음을 보여주어야 합니다!
치트 시트
클래스는 implements 키워드 뒤에 쉼표로 구분하여 나열함으로써 여러 인터페이스를 구현할 수 있습니다:
public class Rectangle implements Drawable, Resizable {
// 두 인터페이스의 모든 메서드를 구현해야 합니다
}클래스는 선언된 모든 인터페이스의 모든 메서드를 구현해야 합니다.
클래스 상속과 다중 인터페이스 구현을 결합할 수도 있습니다:
public class Square extends Shape implements Drawable, Resizable {
// 두 인터페이스의 메서드를 구현합니다
// Shape에서 상속받은 멤버를 사용할 수 있습니다
}이를 통해 클래스는 여러 역할을 수행하고 다양한 기능을 가질 수 있습니다.
직접 해보기
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: 주어진 브랜드로 SmartTV 생성
// TODO: powerOn() 호출
// TODO: 주어진 레벨로 setVolume() 호출
// TODO: getVolume()을 사용하여 출력: Current volume: [volume]
// TODO: powerOff() 호출
}
}
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
객체 지향 프로그래밍의 모든 레슨
4상속
상속의 기초 (extends)super 키워드메서드 오버라이딩 (@Override)생성자 체이닝Object 클래스단일 및 다중 레벨 상속다중 클래스 상속이 불가능한 이유요약 - 직원 계층 구조6인터페이스와 추상 클래스
인터페이스 소개인터페이스 구현하기다중 인터페이스 구현인터페이스의 Default 및 Static 메서드추상 클래스 vs 인터페이스함수형 인터페이스복습 - 결제 시스템