JAVA101

준비중..

JAVA101

자바 프로그래밍 입문

16 인터페이스

# 인터페이스 ## 들어가며 --- 이전 시간 우리는 상속에 대한 내용을 배웠습니다. ![클라우드스터딩-자바-상속-예](https://i.imgur.com/1TYV6ln.png) 그럼 이번 시간에는 인터페이스에 대해 알아보도록 할까요? ## 목차 --- 1. 인터페이스란 2. 정의하기 3. 구현하기 ## 1. 인터페이스란 --- #### 무엇? 인터페이스란, 역할을 부여하는 것입니다. #### 실생활 예 스마트폰을 예로 들어 인터페이스를 이해해볼까요? 참 다양한 역할을 수행하는 스마트 폰. 대표적 기능으로는 알람/전화기/메신저 등이 있는데요. 이를 도식화하면 다음과 같이 표현할 수 있습니다. ![클라우드스터딩-자바-인터페이스-예](https://i.imgur.com/XB9GsHC.png) 위 그림에서 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>