인터페이스 구현하기
Coddy Java 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 87개 중 35번째.
인터페이스를 사용하려면 클래스가 구현 키워드를 사용하여 인터페이스를 구현해야 합니다. 그러면 클래스는 인터페이스에 선언된 모든 메서드에 대한 구체적인 구현을 제공합니다:
public interface Drawable {
void draw();
}
public class Circle implements Drawable {
private double radius;
public Circle(double radius) {
this.radius = radius;
}
@Override
public void draw() {
System.out.println("Drawing a circle with radius " + radius);
}
}class가 interface를 implements하지만 모든 method에 대한 구현을 제공하지 않으면 컴파일러가 오류를 발생시킵니다. @Override 어노테이션은 선택 사항이지만 실수를 발견하는 데 도움이 되므로 사용하는 것이 좋습니다.
추상 클래스와 마찬가지로, interface를 참조 타입으로 사용할 수 있습니다. 이를 통해 동일한 interface를 구현하는 서로 다른 클래스들을 일관되게 다룰 수 있는 다형성이 가능합니다:
Drawable shape1 = new Circle(5.0);
Drawable shape2 = new Rectangle(4.0, 3.0);
shape1.draw(); // 반지름 5.0인 원 그리기
shape2.draw(); // 4.0 x 3.0 직사각형 그리기이는 강력합니다. Drawable 참조와 함께 작동하는 코드는 구체적인 클래스 유형을 알 필요가 없기 때문입니다. 객체를 그릴 수 있다는 점만 신경 쓰면 됩니다.
다음 레슨에서는 하나의 class가 여러 interface를 동시에 구현할 수 있는 방법을 살펴봅니다.
챌린지
쉬움클래스가 인터페이스를 구현하는 방식을 보여 주는 speaker 시스템을 만들어 보자. 모든 speaker가 할 수 있는 일을 정의하는 인터페이스를 만든 다음, 이 계약을 각자의 방식으로 구현하는 두 가지 speaker 유형을 만들어 보자.
코드를 네 개의 파일로 구성한다:
Speaker.java: 모든 speaker가 수행할 수 있어야 하는 작업을 선언하는Speaker라는 인터페이스를 Define한다. 모든 speaker는 String을 반환하는speak()method를 가져야 한다. 이것이 모든 구현 클래스가 충족해야 하는 계약이다.Human.java:Speaker인터페이스를 implements하는 클래스를 Create한다. Human에는namefield (String)가 있다. name을 초기화하는 constructor를 포함하고,speak()method가 다음을 returns하도록 구현한다:[name] says: Hello everyone!Robot.java:Speaker인터페이스를 implements하는 또 다른 클래스를 Create한다. Robot에는modelfield (String)이 있다. model을 초기화하는 constructor를 포함하고,speak()method가 다음을 returns하도록 구현한다:Robot [model] says: Beep boop!Main.java: 인터페이스 기반 다형성을 사용해 모든 내용을 하나로 결합한다. 두 개의 inputs를 받는다: human의 이름과 robot의 model이다. Human과 Robot을 Create한 다음, 이들을Speakerreferences의 array에 저장한다. array를 Loop하며 각 speaker에서speak()를 호출한 result를 print한다.
두 개의 inputs를 받는다: human의 이름 (String)과 robot의 model (String)이다.
출력에는 두 줄이 표시되어야 한다. 각 speaker마다 한 줄씩 출력한다. Human과 Robot은 서로 완전히 다른 방식으로 말하지만, Speaker 인터페이스를 통해 두 object를 모두 동일한 방식으로 다룰 수 있다는 점에 주목하자!
직접 해보기
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 입력 읽기
String humanName = scanner.nextLine();
String robotModel = scanner.nextLine();
// TODO: 주어진 이름으로 Human 객체 생성
// TODO: 주어진 모델로 Robot 객체 생성
// TODO: 두 객체를 포함하는 Speaker 참조 배열 생성
// TODO: 배열을 순회하며 각 speaker의 speak() 결과 출력
}
}
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
객체 지향 프로그래밍의 모든 레슨
4상속
상속의 기초 (extends)super 키워드메서드 오버라이딩 (@Override)생성자 체이닝Object 클래스단일 및 다중 레벨 상속다중 클래스 상속이 불가능한 이유요약 - 직원 계층 구조6인터페이스와 추상 클래스
인터페이스 소개인터페이스 구현하기다중 인터페이스 구현인터페이스의 Default 및 Static 메서드추상 클래스 vs 인터페이스함수형 인터페이스복습 - 결제 시스템직접 연습해 보세요: 온라인 Java 컴파일러