Menu
Coddy logo textTech

다중 인터페이스 구현

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할 수 있습니다.

challenge icon

챌린지

쉬움

여러 capability를 가질 수 있는 smart device system을 만들어 봅시다. 전원을 켜고 끌 수 있으며 볼륨을 제어할 수 있는 SmartTV를 만들어, 하나의 class가 서로 다른 역할을 수행하기 위해 여러 interface를 implement하는 방법을 보여 줍니다.

코드를 네 개의 파일로 구성합니다.

  • Powerable.java: 전원을 켤 수 있는 device를 위한 interface를 Define합니다. 두 개의 methods인 powerOn()powerOff()를 declare해야 하며, both void를 반환합니다.
  • VolumeControl.java: volume control 기능이 있는 device를 위한 interface를 Define합니다. void를 반환하는 setVolume(int level) method와 int를 반환하는 getVolume() method를 declare해야 합니다.
  • SmartTV.java: PowerableVolumeControl interfaces를 모두 implements하는 class를 Create합니다. SmartTV에는 brand field(String), isOn field(boolean, initially false), volume field(int, initially 0)가 있어야 합니다. brand name을 입력받는 constructor도 포함합니다. 필요한 모든 methods를 implement합니다.
    • powerOn()isOn을 true로 설정하고 다음을 출력해야 합니다: [brand] TV is now ON
    • powerOff()isOn을 false로 설정하고 다음을 출력해야 합니다: [brand] TV is now OFF
    • setVolume(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() 호출
        
    }
}
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

객체 지향 프로그래밍의 모든 레슨

직접 연습해 보세요: 온라인 Java 컴파일러