# 인터페이스
## 들어가며
---
이전 시간 우리는 상속에 대한 내용을 배웠습니다.

그럼 이번 시간에는 인터페이스에 대해 알아보도록 할까요?
## 목차
---
1. 인터페이스란
2. 정의하기
3. 구현하기
## 1. 인터페이스란
---
#### 무엇?
인터페이스란, 역할을 부여하는 것입니다.
#### 실생활 예
스마트폰을 예로 들어 인터페이스를 이해해볼까요? 참 다양한 역할을 수행하는 스마트 폰. 대표적 기능으로는 알람/전화기/메신저 등이 있는데요. 이를 도식화하면 다음과 같이 표현할 수 있습니다.

위 그림에서 SmartPhone은 클래스이고, Phone과 Alarm 그리고 Messager는 인터페이스입니다. 따라서 해당 그림은 아래와 같은 의미를 지니게 됩니다.
> SmartPhone에게 역할을 부여할거야! (어떤 역할?)
> 바로 Phone과 Alarm과 그리고 Messager 역할을!
어때요~ 쉽죠?
## 2. 인터페이스의 정의하기
---
인터페이스의 의미를 배웠으니, 이제 코드로 작성해봐야겠네요!
#### 코드 형식
인터페이스(역할)는 아래와 같은 형식으로 작성합니다.
```
interface NAME {
// 프로토타입 메소드들..
}
```
여기서 프로토타입 메소드란, 중괄호 내부가 없는 껍데기 메소드인데요. 위에서 언급한 Alarm 인터페이스를 참고하여 이를 확인해보겠습니다.
#### 코드 예
아래의 코드는 Alarm이라는 역할에 두 가지 기능을 정의한 코드입니다. 위에서 말한 프로토타입 메소드가 2개 정의되어 있네요. 정말 메소드임에도 불구하고 중괄호와 그 내부가 없죠?
```
interface Alarm {
// 프로토타입 메소드 정의
public void beep();
public void playMusic();
}
```
그럼 이러한 껍데기 메소드의 수행부 즉, 중괄호 부분은 어디서 구현해야 하는 걸까요? 정답은, 역할 수행을 맡은 클래스(구현체)에서 구현해주어야 합니다.
## 3. 인터페이스의 구현하기
---
그럼 Alarm 인터페이스를 SmartPhone 클래스에서 구현해볼까요? 어떻게요? 바로 implements 키워드를 사용해서요.
```
class SmartPhone implements Alarm {
// 내부 구현 생략..
}
```
위 코드의 의미는 다음과 같습니다.
> SmartPhone 클래스는 Alarm 역할을 수행한다.
간단하죠? 이제 마지막 단계 오버라이딩(재정의)이 남았습니다. 뭘 오버라이딩 해야할까요? 맞습니다. Alarm 인터페이스의 프로토타입 메소드들을 오버라이딩 해야 합니다. 왜죠? 프로토타입 메소드는 중괄호 내부가 없기 때문입니다. 메소드가 수행되려면 반드시 중괄호 내부가 구현돼있어야 합니다.
```
class SmartPhone implements Alarm {
// 프로토타입 메소드를 재정의!
public void beep() {
System.out.println("삐~ 삐삑, 삐비비빅!");
}
// 프로토타입 메소드를 재정의!
public void playMusic() {
System.out.println("아침 해가 빛나는~ 끝이 없는 바닷가!");
}
}
```
그럼 이론은 여기까지 하고, 실습을 통해 인터페이스에 대한 연습을 더 진행해보도록 하죠!
## 요약
---
#### 인터페이스란
- 인터페이스란, 역할을 부여하는 것이다.
- 인터페이스는 프로토타입 메소드를 가진다.
- 프로토타입 메소드란 중괄호 내부가 없는 즉, 메소드 수행영역이 없는 껍데기 메소드이다.
#### 구현하기
- 인터페이스 구현 시, implements 키워드를 사용한다.
- 해당 인터페이스(역할)를 구현하는(부여받은) 클래스를 구현체 클래스라 한다.
- 구현체 클래스는 반드시 인터페이스에 명시된 메소드를 오버라이딩(재정의)해야 한다.
## 확인하기
---
<div class="interact_responsive_padding" style="padding:100% 0 0 0;position:relative;margin-bottom:5px;"><div class="interact_responsive_wrapper" style="height:100%;left:0;position:absolute;top:0;width:100%;"><iframe id="interactApp5d1af869a0598b0014546c39" width="100%" height="100%" style="border:none;max-width:100%;margin:0;" allowTransparency="true" frameborder="0" src="https://quiz.tryinteract.com/#/5d1af869a0598b0014546c39/q/1?method=iframe"></iframe></div></div>