SlideShare a Scribd company logo
1 of 14
자바 인터페이스
JAVA Interface
2015.01
http://blog.naver.com/mvcjsp
어원풀이 inter = 뭐 뭐 사이, 가운데, ~간
Interface (면과 면 사이)
두 면이 마주치는 사이 face=직면하다
• Intercept (중간에서) 가로채다
• Interaction (사이에서 액션!) 상호작용
• Interpret (서로 다른 언어를 사용하는 중간에서) 통역하다
• Interrupt (중간에 껴~들어) 방해하다
• Interval (벽과 벽 사이) 간격 val = 벽
• Intercontinental (대룩과 대륙 사이) 대륙간
User Interface
물리적인 제품 혹은 추상적인 서비스나 소프트웨어를
이용할 수 있도록 사용자에게 드러낸 부분
게임컨트롤러나 자동차 핸들, 키보드, 마우스
심지어 TV 리모컨까지 모두 User Interface!
GUI (Graphics User Interface)
명령어를 타이핑 하던 불편한 UI DOS에서
마우스만 까딱 거리면 되는 GUI windows!
일상에서 발견되는 Interface (전원)
건축업
건물을 지을 때 나중에 어떤
가전제품들이 그 건물에 들어올
지 고민하지 않아도 됨
가전제조업
모든 제품의 전원연결선의 끝은
왼쪽 그림처럼 만들면 됨
인터페이스를 통하여 상호동작 하는 두 주체는 인터페이스까지만 관심이 있다.
다시 말하자면 인터페이스 너머 그 실체가 무엇인지 알 필요도 없고 알고 싶지도 않다.
일상에서 발견되는 Interface (TV)
TV 제조사
누구나 직관적으로 이용할 수 있는
리모컨을 제공하는 것으로 끝.
사용자 마다 버튼이 다르게 배치된 리모컨을
각각 개발할 필요는 없다.
TV 사용자
원하는 채널과 적절한 음량으로
조절할 수 있으면 그만이다.
옛날처럼 TV에 다가가서 손잡이를 드르륵
돌려가며 채널을 바꾸지 않아도 되니 더욱 편리하다
인터페이스는 규격이다
• 사회적 통념 혹은 막강한 누군가가 정해버린 표준
• 사용되기 시작하면 쉽게 변경할 수 없음
• 잘 정의된 인터페이스가 있다면 그 것을 사용하는 양측은 서로
간섭하지 않고 독립적으로 일을 할 수 있다.
인터페이스덕분에 실체는 추상화된다.
TV 실체의 추상화 (네모난 디스플레이와 리모컨)
수많은 부속으로 복잡하게 만들어진 TV의 실체와
적용된 기술들을 누군가 쉽게 들여다 볼 수 없도록
일반적인 모습의 TV라는 껍질로 감싸고 사용자에게
필요한 기능들은 버튼과 리모컨으로 제공한다.
TV 사용자
리모컨을 통하여 원하는 데로 TV를 조작하여 원하는
소리와 영상이 화면과 스피커를 통해서 나오면 된다.
내부가 어떻게 만들어져 있는지는 전혀 궁금하지
않다. 경쟁사 기술자라면 관심이 있을 수도…
자바 인터페이스 JAVA Interface
• 멤버변수가 없다.
• 추상메소드의 정의만 나열되어 있다.
제공되어야할 기능(메소드)들만 정의한 규약인 것이다. 따라서 정의된 메소드들을 모두 구현하기만 하면 그
인터페이스타입으로 취급되는 것이다. 아래예제는 TV타입 변수(tv)에 서로 다르게 구현한 클래스의 객체참
조를 담을 수 있음을 보여준다. TVImpl1 ~ 3 은 모두 TV라는 Interface를 구현한 클래스임.
TV tv = new TVImpl1();
tv = new TVImpl2();
tv = new TVImpl3();
따라서 그 구현의 실체가 개떡같이 만들어 놓은 토마토캐찹같은 소스라 할 지라도 누구나 협업에 참여할
수 있고 유사시 문제가 되는 구현 클래스만 교체가 가능하다.
자바 인터페이스 J2EE
• javax.servlet.http.HttpServletRequest
• javax.servlet.http.HttpServletResponse
• javax.servlet.http.HttpSession
자바로 웹 개발을 하면서 항상 사용하는 위와 같은 것들이 실상 모두 인터페이스이다. 썬
마이크로시스템즈(현 오라클)가 아주 잘 정의해 놓았다. JAVA Web Application Server는 그
종류가 Tomcat, WebLogic, WebSphere, Resin등 아주 많다. 해당 WAS제조사는 서로 다른
방법으로 위에 나열한 인터페이스들을 구현한 것이다.
하지만 우리는 저 인터페이스를 누가 어떻게 구현했는지 상관하지 않고 웹 개발을 할 수 있
다. 그것이 인터페이스의 위력이다.
자바 인터페이스 및 구현 예제
왼쪽 소스와 같이 Class X는 세가지 기능을 조합하여
만들어지는 응용프로그램이다. 그 세가지 기능은 곱셈, 덧
셈 그리고 뺄셈이다. X를 담당한 개발자는 곱셈기능의 구
현을 다른 개발자에게 시키기 위하여 Multiplier 라는
Interface를 정의하고 multiply라는 abstract method를 선
언하여 다른 개발자에게 배포했다.
우선 아쉬운데로 MultiplierTestImpl 이라는 클래스로 항상
0을 리턴하는 multiply method를 구현하여 일을 진행할 수
있다. 다른 개발자가 그 기능을 구현하건 말건 일단 Class
X를 담당한 개발자는 자신의 진도를 뽑을 수 있는 것이다.
자바 인터페이스 및 구현 예제 (계속)
다른 개발자가 만들어온 클래스의 이름은 MultiplierImpl1
이다 따라서 X담당자의 소스코드는 최종적으로 오른쪽 처
럼 바뀐다. 바뀌는 부분은 Multiplier의 instance를 생산하
는 getMultiplierInstance() Method의 내용이다.
MultiplierTestImpl을 MultiplierImpl1로 바꾸는 단순한 일.
모두 적용하고 수행을 해보니 정상동작을 하긴 하는데 묘
하게 느리다. Profiling을 해보니 예상했던 대로 multiply가
병목이다.
자바 인터페이스 및 구현 예제 (계속)
해당 기능의 소스를 까보니 아래왼쪽처럼 만들어져 있는 것이다. X담당자는 맹꽁이에게 일을 시킨 자
신이 문제라며 스스로 위로하면서 아래오른쪽과 같이 다시 구현하여 프로젝트를 완수했다. 물론 Class
X의 getMultiplierInstance() Method 안쪽 MultiplierImpl1은 MultiplierImpl2로 수정했다.
3장의 슬라이드를 통하여 보여준 예제는 너무 간단하고 억지스럽지만 인터페이스를 통하여 규격을 정
의하고 그 구현을 분리하면 얻을 수 있는 장점을 묘사하기에 부족하지 않다고 본다. 여러 복합기능을
정의한 실전 인터페이스라고 상상해 본다면 더욱 공감할 수 있을 것이다.
결론
• 인터페이스라는 개념을 정확히 이해하는 것은 OOP를 공부하기 위한 첫걸음이라 할 수
있다.
• 좀 더 수준 높은 자바 어플리케이션을 생산하려면 디자인 패턴 공부가 필수인데 클래스,
추상클래스 그리고 인터페이스를 이해하지 못하면 디자인 패턴을 이해할 수 없다.
• 우리가 습관처럼 사용하는 API라는 용어도 결국 인터페이스이다. Application
Programming Interface!
• 네트워크를 설명할 때 항상 등장하는 OSI-7Layer 라는 개념도에서 두 개의 7층 탑을 가로
로 엮는 것은 Protocol 이라 하고 각 층간 세로로 정의된 것은 Interface라고 한다.

More Related Content

Similar to 자바 인터페이스 Java interface

당신의 디버깅에 니코니코니
당신의 디버깅에 니코니코니당신의 디버깅에 니코니코니
당신의 디버깅에 니코니코니Lusain Kim
 
랩탑으로 tensorflow 도전하기 - tutorial
랩탑으로 tensorflow 도전하기 - tutorial랩탑으로 tensorflow 도전하기 - tutorial
랩탑으로 tensorflow 도전하기 - tutorialLee Seungeun
 
Design pattern study 6 command pattern
Design pattern study 6 command patternDesign pattern study 6 command pattern
Design pattern study 6 command patterndragor0123
 
[1B1]스위프트프로그래밍언어
[1B1]스위프트프로그래밍언어[1B1]스위프트프로그래밍언어
[1B1]스위프트프로그래밍언어NAVER D2
 
[D2 CAMPUS] 안드로이드 오픈소스 스터디자료 - HTML, Android Animation
[D2 CAMPUS] 안드로이드 오픈소스 스터디자료 - HTML, Android Animation[D2 CAMPUS] 안드로이드 오픈소스 스터디자료 - HTML, Android Animation
[D2 CAMPUS] 안드로이드 오픈소스 스터디자료 - HTML, Android AnimationNAVER D2
 
임베디드 시스템 설계 프로젝트: EMPOS-II를 활용한 영어단어 학습기
임베디드 시스템 설계 프로젝트: EMPOS-II를 활용한 영어단어 학습기임베디드 시스템 설계 프로젝트: EMPOS-II를 활용한 영어단어 학습기
임베디드 시스템 설계 프로젝트: EMPOS-II를 활용한 영어단어 학습기Daegi Kim
 
HolubOnPatterns/chapter2_1
HolubOnPatterns/chapter2_1HolubOnPatterns/chapter2_1
HolubOnPatterns/chapter2_1정환 임
 
Holub on-patterns-2-1
Holub on-patterns-2-1Holub on-patterns-2-1
Holub on-patterns-2-1정환 임
 
[Td 2015]프로그래밍 언어의 f1머신 c++을 타고 windows 10 uwp 앱 개발의 세계로~(유영천)
[Td 2015]프로그래밍 언어의 f1머신 c++을 타고 windows 10 uwp 앱 개발의 세계로~(유영천)[Td 2015]프로그래밍 언어의 f1머신 c++을 타고 windows 10 uwp 앱 개발의 세계로~(유영천)
[Td 2015]프로그래밍 언어의 f1머신 c++을 타고 windows 10 uwp 앱 개발의 세계로~(유영천)Sang Don Kim
 
프로그래밍 언어의 F1머신 C++을 타고 Windows 10 UWP 앱 개발의 세계로~
프로그래밍 언어의 F1머신 C++을 타고 Windows 10 UWP 앱 개발의 세계로~프로그래밍 언어의 F1머신 C++을 타고 Windows 10 UWP 앱 개발의 세계로~
프로그래밍 언어의 F1머신 C++을 타고 Windows 10 UWP 앱 개발의 세계로~YEONG-CHEON YOU
 
Java8 - Oracle Korea Magazine
Java8 - Oracle Korea MagazineJava8 - Oracle Korea Magazine
Java8 - Oracle Korea MagazineJay Lee
 
OpenJigWare(V02.00.04)
OpenJigWare(V02.00.04)OpenJigWare(V02.00.04)
OpenJigWare(V02.00.04)Jinwook On
 
온라인 게임 처음부터 끝까지 동적언어로 만들기
온라인 게임 처음부터 끝까지 동적언어로 만들기온라인 게임 처음부터 끝까지 동적언어로 만들기
온라인 게임 처음부터 끝까지 동적언어로 만들기Seungjae Lee
 
Project Anarchy(Vision Engine)으로 게임 툴 만들기! part2
Project Anarchy(Vision Engine)으로 게임 툴 만들기! part2Project Anarchy(Vision Engine)으로 게임 툴 만들기! part2
Project Anarchy(Vision Engine)으로 게임 툴 만들기! part2진상 문
 
카사 공개세미나1회 W.E.L.C.
카사 공개세미나1회  W.E.L.C.카사 공개세미나1회  W.E.L.C.
카사 공개세미나1회 W.E.L.C.Ryan Park
 
Corona study_2
Corona study_2Corona study_2
Corona study_2Mfaj Chung
 
선언형 UI가 대세임을 선언합니다
선언형 UI가 대세임을 선언합니다선언형 UI가 대세임을 선언합니다
선언형 UI가 대세임을 선언합니다HyunWoo Lee
 
[NDC 2016] 유니티, iOS에서 LINQ 사용하기
[NDC 2016] 유니티, iOS에서 LINQ 사용하기[NDC 2016] 유니티, iOS에서 LINQ 사용하기
[NDC 2016] 유니티, iOS에서 LINQ 사용하기Daehee Kim
 
파싱테이블 만들기 Project
파싱테이블 만들기 Project파싱테이블 만들기 Project
파싱테이블 만들기 ProjectK
 

Similar to 자바 인터페이스 Java interface (20)

당신의 디버깅에 니코니코니
당신의 디버깅에 니코니코니당신의 디버깅에 니코니코니
당신의 디버깅에 니코니코니
 
랩탑으로 tensorflow 도전하기 - tutorial
랩탑으로 tensorflow 도전하기 - tutorial랩탑으로 tensorflow 도전하기 - tutorial
랩탑으로 tensorflow 도전하기 - tutorial
 
Design pattern study 6 command pattern
Design pattern study 6 command patternDesign pattern study 6 command pattern
Design pattern study 6 command pattern
 
[1B1]스위프트프로그래밍언어
[1B1]스위프트프로그래밍언어[1B1]스위프트프로그래밍언어
[1B1]스위프트프로그래밍언어
 
[D2 CAMPUS] 안드로이드 오픈소스 스터디자료 - HTML, Android Animation
[D2 CAMPUS] 안드로이드 오픈소스 스터디자료 - HTML, Android Animation[D2 CAMPUS] 안드로이드 오픈소스 스터디자료 - HTML, Android Animation
[D2 CAMPUS] 안드로이드 오픈소스 스터디자료 - HTML, Android Animation
 
임베디드 시스템 설계 프로젝트: EMPOS-II를 활용한 영어단어 학습기
임베디드 시스템 설계 프로젝트: EMPOS-II를 활용한 영어단어 학습기임베디드 시스템 설계 프로젝트: EMPOS-II를 활용한 영어단어 학습기
임베디드 시스템 설계 프로젝트: EMPOS-II를 활용한 영어단어 학습기
 
HolubOnPatterns/chapter2_1
HolubOnPatterns/chapter2_1HolubOnPatterns/chapter2_1
HolubOnPatterns/chapter2_1
 
Holub on-patterns-2-1
Holub on-patterns-2-1Holub on-patterns-2-1
Holub on-patterns-2-1
 
[Td 2015]프로그래밍 언어의 f1머신 c++을 타고 windows 10 uwp 앱 개발의 세계로~(유영천)
[Td 2015]프로그래밍 언어의 f1머신 c++을 타고 windows 10 uwp 앱 개발의 세계로~(유영천)[Td 2015]프로그래밍 언어의 f1머신 c++을 타고 windows 10 uwp 앱 개발의 세계로~(유영천)
[Td 2015]프로그래밍 언어의 f1머신 c++을 타고 windows 10 uwp 앱 개발의 세계로~(유영천)
 
프로그래밍 언어의 F1머신 C++을 타고 Windows 10 UWP 앱 개발의 세계로~
프로그래밍 언어의 F1머신 C++을 타고 Windows 10 UWP 앱 개발의 세계로~프로그래밍 언어의 F1머신 C++을 타고 Windows 10 UWP 앱 개발의 세계로~
프로그래밍 언어의 F1머신 C++을 타고 Windows 10 UWP 앱 개발의 세계로~
 
Java8 - Oracle Korea Magazine
Java8 - Oracle Korea MagazineJava8 - Oracle Korea Magazine
Java8 - Oracle Korea Magazine
 
OpenJigWare(V02.00.04)
OpenJigWare(V02.00.04)OpenJigWare(V02.00.04)
OpenJigWare(V02.00.04)
 
온라인 게임 처음부터 끝까지 동적언어로 만들기
온라인 게임 처음부터 끝까지 동적언어로 만들기온라인 게임 처음부터 끝까지 동적언어로 만들기
온라인 게임 처음부터 끝까지 동적언어로 만들기
 
Project Anarchy(Vision Engine)으로 게임 툴 만들기! part2
Project Anarchy(Vision Engine)으로 게임 툴 만들기! part2Project Anarchy(Vision Engine)으로 게임 툴 만들기! part2
Project Anarchy(Vision Engine)으로 게임 툴 만들기! part2
 
Spring Boot 1
Spring Boot 1Spring Boot 1
Spring Boot 1
 
카사 공개세미나1회 W.E.L.C.
카사 공개세미나1회  W.E.L.C.카사 공개세미나1회  W.E.L.C.
카사 공개세미나1회 W.E.L.C.
 
Corona study_2
Corona study_2Corona study_2
Corona study_2
 
선언형 UI가 대세임을 선언합니다
선언형 UI가 대세임을 선언합니다선언형 UI가 대세임을 선언합니다
선언형 UI가 대세임을 선언합니다
 
[NDC 2016] 유니티, iOS에서 LINQ 사용하기
[NDC 2016] 유니티, iOS에서 LINQ 사용하기[NDC 2016] 유니티, iOS에서 LINQ 사용하기
[NDC 2016] 유니티, iOS에서 LINQ 사용하기
 
파싱테이블 만들기 Project
파싱테이블 만들기 Project파싱테이블 만들기 Project
파싱테이블 만들기 Project
 

자바 인터페이스 Java interface

  • 2. 어원풀이 inter = 뭐 뭐 사이, 가운데, ~간 Interface (면과 면 사이) 두 면이 마주치는 사이 face=직면하다 • Intercept (중간에서) 가로채다 • Interaction (사이에서 액션!) 상호작용 • Interpret (서로 다른 언어를 사용하는 중간에서) 통역하다 • Interrupt (중간에 껴~들어) 방해하다 • Interval (벽과 벽 사이) 간격 val = 벽 • Intercontinental (대룩과 대륙 사이) 대륙간
  • 3. User Interface 물리적인 제품 혹은 추상적인 서비스나 소프트웨어를 이용할 수 있도록 사용자에게 드러낸 부분 게임컨트롤러나 자동차 핸들, 키보드, 마우스 심지어 TV 리모컨까지 모두 User Interface!
  • 4. GUI (Graphics User Interface) 명령어를 타이핑 하던 불편한 UI DOS에서 마우스만 까딱 거리면 되는 GUI windows!
  • 5. 일상에서 발견되는 Interface (전원) 건축업 건물을 지을 때 나중에 어떤 가전제품들이 그 건물에 들어올 지 고민하지 않아도 됨 가전제조업 모든 제품의 전원연결선의 끝은 왼쪽 그림처럼 만들면 됨 인터페이스를 통하여 상호동작 하는 두 주체는 인터페이스까지만 관심이 있다. 다시 말하자면 인터페이스 너머 그 실체가 무엇인지 알 필요도 없고 알고 싶지도 않다.
  • 6. 일상에서 발견되는 Interface (TV) TV 제조사 누구나 직관적으로 이용할 수 있는 리모컨을 제공하는 것으로 끝. 사용자 마다 버튼이 다르게 배치된 리모컨을 각각 개발할 필요는 없다. TV 사용자 원하는 채널과 적절한 음량으로 조절할 수 있으면 그만이다. 옛날처럼 TV에 다가가서 손잡이를 드르륵 돌려가며 채널을 바꾸지 않아도 되니 더욱 편리하다
  • 7. 인터페이스는 규격이다 • 사회적 통념 혹은 막강한 누군가가 정해버린 표준 • 사용되기 시작하면 쉽게 변경할 수 없음 • 잘 정의된 인터페이스가 있다면 그 것을 사용하는 양측은 서로 간섭하지 않고 독립적으로 일을 할 수 있다.
  • 8. 인터페이스덕분에 실체는 추상화된다. TV 실체의 추상화 (네모난 디스플레이와 리모컨) 수많은 부속으로 복잡하게 만들어진 TV의 실체와 적용된 기술들을 누군가 쉽게 들여다 볼 수 없도록 일반적인 모습의 TV라는 껍질로 감싸고 사용자에게 필요한 기능들은 버튼과 리모컨으로 제공한다. TV 사용자 리모컨을 통하여 원하는 데로 TV를 조작하여 원하는 소리와 영상이 화면과 스피커를 통해서 나오면 된다. 내부가 어떻게 만들어져 있는지는 전혀 궁금하지 않다. 경쟁사 기술자라면 관심이 있을 수도…
  • 9. 자바 인터페이스 JAVA Interface • 멤버변수가 없다. • 추상메소드의 정의만 나열되어 있다. 제공되어야할 기능(메소드)들만 정의한 규약인 것이다. 따라서 정의된 메소드들을 모두 구현하기만 하면 그 인터페이스타입으로 취급되는 것이다. 아래예제는 TV타입 변수(tv)에 서로 다르게 구현한 클래스의 객체참 조를 담을 수 있음을 보여준다. TVImpl1 ~ 3 은 모두 TV라는 Interface를 구현한 클래스임. TV tv = new TVImpl1(); tv = new TVImpl2(); tv = new TVImpl3(); 따라서 그 구현의 실체가 개떡같이 만들어 놓은 토마토캐찹같은 소스라 할 지라도 누구나 협업에 참여할 수 있고 유사시 문제가 되는 구현 클래스만 교체가 가능하다.
  • 10. 자바 인터페이스 J2EE • javax.servlet.http.HttpServletRequest • javax.servlet.http.HttpServletResponse • javax.servlet.http.HttpSession 자바로 웹 개발을 하면서 항상 사용하는 위와 같은 것들이 실상 모두 인터페이스이다. 썬 마이크로시스템즈(현 오라클)가 아주 잘 정의해 놓았다. JAVA Web Application Server는 그 종류가 Tomcat, WebLogic, WebSphere, Resin등 아주 많다. 해당 WAS제조사는 서로 다른 방법으로 위에 나열한 인터페이스들을 구현한 것이다. 하지만 우리는 저 인터페이스를 누가 어떻게 구현했는지 상관하지 않고 웹 개발을 할 수 있 다. 그것이 인터페이스의 위력이다.
  • 11. 자바 인터페이스 및 구현 예제 왼쪽 소스와 같이 Class X는 세가지 기능을 조합하여 만들어지는 응용프로그램이다. 그 세가지 기능은 곱셈, 덧 셈 그리고 뺄셈이다. X를 담당한 개발자는 곱셈기능의 구 현을 다른 개발자에게 시키기 위하여 Multiplier 라는 Interface를 정의하고 multiply라는 abstract method를 선 언하여 다른 개발자에게 배포했다. 우선 아쉬운데로 MultiplierTestImpl 이라는 클래스로 항상 0을 리턴하는 multiply method를 구현하여 일을 진행할 수 있다. 다른 개발자가 그 기능을 구현하건 말건 일단 Class X를 담당한 개발자는 자신의 진도를 뽑을 수 있는 것이다.
  • 12. 자바 인터페이스 및 구현 예제 (계속) 다른 개발자가 만들어온 클래스의 이름은 MultiplierImpl1 이다 따라서 X담당자의 소스코드는 최종적으로 오른쪽 처 럼 바뀐다. 바뀌는 부분은 Multiplier의 instance를 생산하 는 getMultiplierInstance() Method의 내용이다. MultiplierTestImpl을 MultiplierImpl1로 바꾸는 단순한 일. 모두 적용하고 수행을 해보니 정상동작을 하긴 하는데 묘 하게 느리다. Profiling을 해보니 예상했던 대로 multiply가 병목이다.
  • 13. 자바 인터페이스 및 구현 예제 (계속) 해당 기능의 소스를 까보니 아래왼쪽처럼 만들어져 있는 것이다. X담당자는 맹꽁이에게 일을 시킨 자 신이 문제라며 스스로 위로하면서 아래오른쪽과 같이 다시 구현하여 프로젝트를 완수했다. 물론 Class X의 getMultiplierInstance() Method 안쪽 MultiplierImpl1은 MultiplierImpl2로 수정했다. 3장의 슬라이드를 통하여 보여준 예제는 너무 간단하고 억지스럽지만 인터페이스를 통하여 규격을 정 의하고 그 구현을 분리하면 얻을 수 있는 장점을 묘사하기에 부족하지 않다고 본다. 여러 복합기능을 정의한 실전 인터페이스라고 상상해 본다면 더욱 공감할 수 있을 것이다.
  • 14. 결론 • 인터페이스라는 개념을 정확히 이해하는 것은 OOP를 공부하기 위한 첫걸음이라 할 수 있다. • 좀 더 수준 높은 자바 어플리케이션을 생산하려면 디자인 패턴 공부가 필수인데 클래스, 추상클래스 그리고 인터페이스를 이해하지 못하면 디자인 패턴을 이해할 수 없다. • 우리가 습관처럼 사용하는 API라는 용어도 결국 인터페이스이다. Application Programming Interface! • 네트워크를 설명할 때 항상 등장하는 OSI-7Layer 라는 개념도에서 두 개의 7층 탑을 가로 로 엮는 것은 Protocol 이라 하고 각 층간 세로로 정의된 것은 Interface라고 한다.