# 인터페이스 정의 및 구현
#### 무엇?
인터페이스란, 하나의 역할을 정의하는 것입니다.
![클라우드스터딩-자바-인터페이스-정의-구현](https://i.imgur.com/4pRwrhu.png)
#### 인터페이스 만들기
예를 들어, 경보음을 위한 Alarm이라는 역할은 아래와 같이 만들 수 있습니다.
```
interface Alarm {
// 내용 생략..
}
```
#### 추상 메소드?
Alarm 인터페이스는 경보음을 내기위해 어떠한 기능을 해야할까요? 그 대략적인 틀을 프로토타입(추상) 메소드를 통해 정의합니다. 여기서 프로토타입 메소드란, 중괄호 내용이 없는 껍데기 메소드입니다.
```
interface Alarm {
// 비프음을 냈으면 좋겠어? 어떻게? 그건 나중에 정할께!
public void beep();
// 음악을 재생했으면 좋겠어! 어떻게? 그건 나중에 정할께!
public void playMusic();
}
```
#### 구현체 클래스?
인터페이스를 통해 역할을 정의했다면, 이를 클래스에게 부여할 수 있습니다. 이러한 클래스를 구현체라고 합니다.
```
// SmartPhone 클래스는 Alarm 인터페이스를 구현하기로 한다!
class SmartPhone implements Alarm {
내용 생략..
}
```
클래스가 특정 인터페이스를 구현(implements)하기로 했다면, 인터페이스를 구성하는 프로토타입(추상) 메소드를 반드시 오버라이딩(재정의)해야 합니다.
```
class SmartPhone implements Alarm {
// beep음은 이렇게 낼거야!
public void beep() {
System.out.println("삐빅~ 삐비비비빅!");
}
// 음악 재생은 이렇게 할거야!
public void playMusic() {
System.out.println("동해물과 백두산이~🎶");
}
}
```
## 문제
주어진 코드의 SmartPhone 클래스는 Phone 인터페이스를 구현하기로 선언되어있다.
![클라우드스터딩-자바-인터페이스-정의와-구현체-클래스](https://i.imgur.com/dsad3LC.png)
Phone 인터페이스를 오버라이딩(재정의)하여, 출력 예와 같은 결과를 얻으시오.
## 출력 예
```
010-1234-5678로 전화를 겁니다!
전화벨이 울립니다~
```