# 인터페이스(interface)
## 들어가며
---
홍팍이는 개발자다. 동시에 강사이며, 친구이다. 상황에 따라 다양한 역할을 수행한다.
![클라우드스터딩-자바-인터페이스-다형성](https://i.imgur.com/n8DKfTJ.png)
프로그램에서 또한 마찬가지다. 한 객체가 다양한 역할을 수행할 수 있다. 이를 위한 개념. 인터페이스를 학습해보자.
1. 인터페이스란
2. 인터페이스 정의 및 구현
3. 인터페이스의 장점
## 1. 인터페이스란
---
#### 무엇?
인터페이스란, 역할을 부여하는 것이다.
#### 특징?
인터페이스는 추상 메소드로 구성된다. 추상 메소드란, 중괄호 내부가 없는 껍데기 메소드이다.
#### 실생활 예
스마트폰은 알람, 전화기, 메신저의 역할을 한다.
![클라우드스터딩-자바-인터페이스-스마트폰-예](https://i.imgur.com/muKwkfV.png)
## 2. 인터페이스의 정의 및 구현
---
#### 코드 형식?
인터페이스의 형식은 아래와 같다.
```
interface NAME {
// 프로토타입 메소드들..
}
```
#### 코드 예
Alarm 인터페이스 만들어보자. 그 기능으로는 비프음 내기와 음악 재생을 추가한다. 메소드에 중괄호가 없음을 주의하자. 이러한 메소드를 추상 메소드라 한다.
```
interface Alarm {
public void beep(); // 추상메소드
public void playMusic(); // 추상메소드
}
```
#### 인터페이스 구현을 선언
위에서 만든 인터페이스를 클래스에 구현하자. 이를 위해 <kbd>implements</kbd> 키워드를 사용한다.
```
// SmartPhone 클래스가 Alarm 역할을 수행하기로 함!
class SmartPhone implements Alarm {
// 내부 구현 생략..
}
```
#### 추상 메소드 오버라이딩
이제 Alarm 인터페이스의 모든 추상 메소드를 재정의(오버라이딩) 해야 한다. 중괄호 내부가 없기 때문이다.
```
class SmartPhone implements Alarm {
// 프로토타입 메소드를 재정의!
public void beep() {
System.out.println("삐~ 삐삑, 삐비비빅!");
}
// 프로토타입 메소드를 재정의!
public void playMusic() {
System.out.println("아침 해가 빛나는~ 끝이 없는 바닷가!");
}
}
```
## 3. 인터페이스의 장점
---
#### 프로그램 설계의 명확성
인터페이스를 사용하면 프로그램 설계가 보다 명확해 진다.
#### 관계성 부여
서로 다른 객체들이 같은 인터페이스를 구현한다면, 인터페이스를 타입으로 하여 업캐스팅 할 수 있다.
![클라우드스터딩-자바-인터페이스-업캐스팅](https://i.imgur.com/lM5MjzT.png)
### 다형성
여러 인터페이스를 구현하게 함으로써, 한 객체를 여러 타입으로 해석할 수 있게 된다. 이러한 특징을 다형성이라 한다.
![클라우드스터딩-자바-인터페이스-스마트폰-다형성](https://i.imgur.com/muKwkfV.png)
## 요약
---
![클라우드스터딩-자바-인터페이스-요약](https://i.imgur.com/SwREgFf.png)
#### 인터페이스란
- 인터페이스란, 역할을 부여하는 것이다.
- 인터페이스는 추상 메소드로 구성된다.
- 추상 메소드란, 중괄호 내부가 없는 껍데기 메소드이다.
#### 인터페이스 정의 및 구현
- 인터페이스 구현 시, 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>
## 도서구매
<a href="http://www.yes24.com/Product/Goods/104740689"><img src="http://image.yes24.com/goods/104740689/XL" width="50%" /></a>