Menu
Coddy logo textTech

다중 인터페이스 구현

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로부터 상속받은 멤버도 사용할 수 있습니다
}

이 유연성을 통해 여러 역할을 수행하는 클래스를 설계할 수 있습니다. SmartPhoneCallable, Messageable, 및 Browsable 인터페이스를 구현할 수 있으며, 각 인터페이스는 휴대폰이 지원하는 서로 다른 기능을 정의합니다.

challenge icon

챌린지

쉬움

장치가 여러 기능을 가질 수 있는 스마트 장치 시스템을 구축해 보겠습니다. 전원을 켜고 끌 수 있을 뿐만 아니라 볼륨 조절도 가능한 SmartTV를 만들어 볼 것입니다. 이를 통해 하나의 클래스가 어떻게 여러 인터페이스를 구현하여 서로 다른 역할을 수행할 수 있는지 실습해 봅니다.

코드는 다음 네 개의 파일로 구성됩니다:

  • Powerable.java: 전원을 켤 수 있는 장치를 위한 인터페이스를 정의합니다. powerOn()powerOff()라는 두 개의 메서드를 선언해야 하며, 둘 다 반환 타입은 void입니다.
  • VolumeControl.java: 볼륨 조절 기능이 있는 장치를 위한 인터페이스를 정의합니다. void를 반환하는 setVolume(int level) 메서드와 int를 반환하는 getVolume() 메서드를 선언해야 합니다.
  • SmartTV.java: PowerableVolumeControl 인터페이스를 모두 구현하는 클래스를 생성합니다. 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() 호출
        
    }
}
quiz icon실력 점검

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

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