인터페이스 소개
Coddy Java 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 87개 중 34번째.
abstract class가 하위 클래스가 따라야 하는 계약을 정의하는 방식을 살펴보았습니다. 하지만 class가 여러 계약을 따르도록 하려면 어떻게 해야 할까요? Java에서는 class가 여러 class를 상속하도록 허용하지 않지만, interfaces를 사용하여 이 문제를 해결합니다.
An interface은 class가 무엇을 할 수 있는지를 정의하는 계약이며, 그것을 어떻게 하는지는 명시하지 않습니다. abstract class와 달리, interface에는 구현 없이 method 시그니처만(기본적으로) 포함됩니다:
public interface Drawable {
void draw();
}
public interface Resizable {
void resize(int width, int height);
}interface를 약속이라고 생각해 보세요. class가 interface를 구현하면, 해당 interface에 선언된 모든 methods에 대한 구현을 제공하겠다고 약속하는 것입니다. interface는 능력을 정의하고, class는 동작을 제공합니다.
interface 키워드를 사용하여 class 대신 interfaces를 선언합니다. interface의 모든 methods는 implicitly 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 키워드를 사용하여 인터페이스를 구현하는 방법을 배우게 됩니다.
챌린지
쉬움서로 다른 장치가 할 수 있는 일을 설명하는 interface를 정의하여 장치 제어 시스템을 만들어 봅시다. 이 challenge는 작동 방식을 지정하지 않고 기능을 정의하는 계약인 interface를 만드는 데 중점을 둡니다.
코드를 세 개의 파일에 나누어 구성합니다.
Switchable.java: 장치를 켜고 끌 수 있다는 것이 무엇을 의미하는지 정의하는 interface를 만듭니다. Switchable 장치는 켜고 끌 수 있어야 합니다. 두 개의 methods인turnOn()과turnOff()를 Declare합니다. interface methods는 implicitly public이자 abstract이므로 method signatures만 작성하면 됩니다.Adjustable.java: 장치의 level을 조절할 수 있다는 것이 무엇을 의미하는지 정의하는 또 다른 interface를 만듭니다. Adjustable 장치는 level을 설정할 수 있어야 합니다.setLevel(int level)method를 Declare합니다. 또한100값을 갖는MAX_LEVELconstant도 Include합니다. interface의 constants는 implicitlypublic static final이라는 점을 Remember하세요.Main.java: interface가 올바르게 정의되었음을 해당 interface에 대한 information을 Print하여 보여 줍니다. 하나의 input을 받습니다. level 값(int)입니다. 다음 세 줄을 Print합니다.Switchable methods: turnOn, turnOffAdjustable methods: setLevelMax level constant: [MAX_LEVEL value](Adjustable interface에서 constant에 access합니다.)
Setting level to: [input level]을 Print합니다.
하나의 input을 받습니다. level 값(int)입니다.
이 challenge는 기능을 설명하는 청사진인 interface를 정의하는 데만 중점을 둡니다. 다음 lesson에서는 class가 실제 동작을 제공하기 위해 이러한 interface를 실제로 어떻게 implement하는지 배우게 됩니다!
직접 해보기
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int level = scanner.nextInt();
// TODO: 인터페이스에 대한 정보를 출력
// Print: "Switchable methods: turnOn, turnOff"
// Print: "Adjustable methods: setLevel"
// Print: "Max level constant: " followed by Adjustable.MAX_LEVEL
// Print: "Setting level to: " followed by the input level
}
}
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
객체 지향 프로그래밍의 모든 레슨
4상속
상속의 기초 (extends)super 키워드메서드 오버라이딩 (@Override)생성자 체이닝Object 클래스단일 및 다중 레벨 상속다중 클래스 상속이 불가능한 이유요약 - 직원 계층 구조6인터페이스와 추상 클래스
인터페이스 소개인터페이스 구현하기다중 인터페이스 구현인터페이스의 Default 및 Static 메서드추상 클래스 vs 인터페이스함수형 인터페이스복습 - 결제 시스템직접 연습해 보세요: 온라인 Java 컴파일러