Menu
Coddy logo textTech

인터페이스 소개

Coddy Java 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨 — 87개 중 34번째.

추상 클래스가 하위 클래스가 따라야 할 계약을 어떻게 정의하는지 살펴보았습니다. 하지만 클래스가 여러 개의 계약을 따르길 원한다면 어떻게 해야 할까요? Java는 클래스가 여러 클래스를 상속(extend)하는 것을 허용하지 않지만, 인터페이스(interfaces)를 통해 이 문제를 해결합니다.

인터페이스는 클래스가 무엇을 할 수 있는지를 정의하는 계약이며, 그 일을 어떻게 수행하는지는 명시하지 않습니다. 추상 클래스와 달리, 인터페이스는 (기본적으로) 구현부 없이 메서드 시그니처만을 포함합니다:

public interface Drawable {
    void draw();
}

public interface Resizable {
    void resize(int width, int height);
}

인터페이스를 하나의 약속이라고 생각해보세요. 클래스가 인터페이스를 구현할 때, 해당 인터페이스에 선언된 모든 메서드에 대한 구현을 제공하겠다고 약속하는 것입니다. 인터페이스는 역량(capability)을 정의하고, 클래스는 동작(behavior)을 제공합니다.

인터페이스는 class 대신 interface 키워드를 사용하여 선언됩니다. 인터페이스의 모든 메서드는 암시적으로 public이며 abstract이므로, 이러한 키워드를 작성할 필요가 없습니다:

public interface Playable {
    void play();    // 암시적으로 public abstract
    void pause();
    void stop();
}

인터페이스는 상수를 선언할 수도 있으며, 이는 암시적으로 public static final입니다:

public interface GameConstants {
    int MAX_PLAYERS = 4;  // 암시적으로 public static final임
}

다음 레슨에서는 implements 키워드를 사용하여 클래스가 인터페이스를 구현하는 방법을 배우게 됩니다.

challenge icon

챌린지

쉬움

다양한 장치가 수행할 수 있는 작업을 설명하는 인터페이스를 정의하여 장치 제어 시스템을 구축해 보겠습니다. 이 챌린지는 인터페이스를 만드는 데 중점을 둡니다. 인터페이스는 작동 방식은 지정하지 않고 기능만을 정의하는 계약입니다.

코드를 세 개의 파일로 구성하게 됩니다:

  • Switchable.java: 장치가 전환 가능(switchable)하다는 것이 무엇을 의미하는지 정의하는 인터페이스를 만듭니다. 모든 전환 가능한 장치는 켜고 끌 수 있어야 합니다. turnOn()turnOff()라는 두 가지 메서드를 선언하세요. 인터페이스 메서드는 암시적으로 public이며 abstract이므로 메서드 시그니처만 작성하면 됩니다.
  • Adjustable.java: 장치가 조절 가능(adjustable)하다는 것이 무엇을 의미하는지 정의하는 또 다른 인터페이스를 만듭니다. 조절 가능한 장치는 레벨을 설정할 수 있어야 합니다. setLevel(int level) 메서드를 선언하세요. 또한 값이 100인 상수 MAX_LEVEL을 포함하세요. 인터페이스의 상수는 암시적으로 public static final이라는 점을 기억하세요.
  • Main.java: 인터페이스에 대한 정보를 출력하여 인터페이스가 올바르게 정의되었음을 증명합니다. 하나의 입력으로 레벨 값(int)을 받게 됩니다. 다음 세 줄을 출력하세요:
    • Switchable methods: turnOn, turnOff
    • Adjustable methods: setLevel
    • Max level constant: [MAX_LEVEL value] (Adjustable 인터페이스에서 상수에 접근하세요)
    그런 다음 Setting level to: [input level]을 출력하세요.

하나의 입력으로 레벨 값(int)을 받게 됩니다.

이 챌린지는 기능을 설명하는 청사진인 인터페이스를 정의하는 데에만 집중합니다. 다음 레슨에서는 클래스가 이러한 인터페이스를 실제로 구현하여 실제 동작을 제공하는 방법을 배우게 됩니다!

치트 시트

인터페이스(interface)는 클래스가 무엇을 할 수 있는지를 정의하는 계약이며, 어떻게 수행하는지는 명시하지 않습니다. 인터페이스는 구현 없이 메서드 시그니처만을 포함합니다.

인터페이스는 interface 키워드를 사용하여 선언됩니다:

public interface Drawable {
    void draw();
}

인터페이스의 모든 메서드는 암시적으로 public이며 abstract입니다:

public interface Playable {
    void play();    // 암시적으로 public abstract
    void pause();
    void stop();
}

인터페이스는 상수를 선언할 수 있으며, 이는 암시적으로 public static final입니다:

public interface GameConstants {
    int MAX_PLAYERS = 4;  // 암시적으로 public static final
}

클래스는 여러 클래스를 상속받는 것과 달리, 여러 인터페이스를 구현할 수 있습니다.

직접 해보기

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int level = scanner.nextInt();
        
        // TODO: 인터페이스에 대한 정보 출력
        // 출력: "Switchable methods: turnOn, turnOff"
        // 출력: "Adjustable methods: setLevel"
        // 출력: "Max level constant: " 뒤에 Adjustable.MAX_LEVEL
        // 출력: "Setting level to: " 뒤에 입력받은 level
        
    }
}
quiz icon실력 점검

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

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