14
자자 자자자자자 JAVA Interface 2015.01 [email protected]

자바 인터페이스 Java interface

Embed Size (px)

Citation preview

Page 1: 자바 인터페이스 Java interface

자바 인터페이스JAVA Interface

2015.01

[email protected]

Page 2: 자바 인터페이스 Java interface

어원풀이 inter = 뭐 뭐 사이 , 가운데 , ~간Interface ( 면과 면 사이 )

두 면이 마주치는 사이 face= 직면하다

• Intercept ( 중간에서 ) 가로채다• Interaction ( 사이에서 액션 !) 상호작용• Interpret ( 서로 다른 언어를 사용하는 중간에서 ) 통역하다• Interrupt ( 중간에 껴 ~ 들어 ) 방해하다• Interval ( 벽과 벽 사이 ) 간격 val = 벽• Intercontinental ( 대룩과 대륙 사이 ) 대륙간

Page 3: 자바 인터페이스 Java interface

User Interface물리적인 제품 혹은 추상적인 서비스나 소프트웨어를

이용할 수 있도록 사용자에게 드러낸 부분

게임컨트롤러나 자동차 핸들 , 키보드 , 마우스 심지어 TV 리모컨까지 모두 User Interface!

Page 4: 자바 인터페이스 Java interface

GUI (Graphics User Interface)

명령어를 타이핑 하던 불편한 UI DOS 에서 마우스만 까딱 거리면 되는 GUI windows!

Page 5: 자바 인터페이스 Java interface

일상에서 발견되는 Interface ( 전원 )

건축업

건물을 지을 때 나중에 어떤가전제품들이 그 건물에 들어올

지 고민하지 않아도 됨

가전제조업

모든 제품의 전원연결선의 끝은왼쪽 그림처럼 만들면 됨

인터페이스를 통하여 상호동작 하는 두 주체는 인터페이스까지만 관심이 있다 .

다시 말하자면 인터페이스 너머 그 실체가 무엇인지 알 필요도 없고 알고 싶지도 않다 .

Page 6: 자바 인터페이스 Java interface

일상에서 발견되는 Interface (TV)

TV 제조사

누구나 직관적으로 이용할 수 있는 리모컨을 제공하는 것으로 끝 .

사용자 마다 버튼이 다르게 배치된 리모컨을 각각 개발할 필요는 없다 .

TV 사용자

원하는 채널과 적절한 음량으로조절할 수 있으면 그만이다 .

옛날처럼 TV 에 다가가서 손잡이를 드르륵돌려가며 채널을 바꾸지 않아도 되니 더욱 편리하다

Page 7: 자바 인터페이스 Java interface

인터페이스는 규격이다• 사회적 통념 혹은 막강한 누군가가 정해버린 표준• 사용되기 시작하면 쉽게 변경할 수 없음• 잘 정의된 인터페이스가 있다면 그 것을 사용하는 양측은 서로

간섭하지 않고 독립적으로 일을 할 수 있다 .

Page 8: 자바 인터페이스 Java interface

인터페이스덕분에 실체는 추상화된다 .

TV 실체의 추상화 ( 네모난 디스플레이와 리모컨 )

수많은 부속으로 복잡하게 만들어진 TV 의 실체와적용된 기술들을 누군가 쉽게 들여다 볼 수 없도록

일반적인 모습의 TV 라는 껍질로 감싸고 사용자에게필요한 기능들은 버튼과 리모컨으로 제공한다 .

TV 사용자

리모컨을 통하여 원하는 데로 TV 를 조작하여 원하는소리와 영상이 화면과 스피커를 통해서 나오면 된다 .

내부가 어떻게 만들어져 있는지는 전혀 궁금하지않다 . 경쟁사 기술자라면 관심이 있을 수도…

Page 9: 자바 인터페이스 Java interface

자바 인터페이스 JAVA Interface

• 멤버변수가 없다 .

• 추상메소드의 정의만 나열되어 있다 .

제공되어야할 기능 ( 메소드 ) 들만 정의한 규약인 것이다 . 따라서 정의된 메소드들을 모두 구현하기만 하면 그 인터페이스타입으로 취급되는 것이다 . 아래예제는 TV 타입 변수 (tv) 에 서로 다르게 구현한 클래스의 객체참조를 담을 수 있음을 보여준다 . TVImpl1 ~ 3 은 모두 TV 라는 Interface 를 구현한 클래스임 .

TV tv = new TVImpl1();

tv = new TVImpl2();

tv = new TVImpl3();

따라서 그 구현의 실체가 개떡같이 만들어 놓은 토마토캐찹같은 소스라 할 지라도 누구나 협업에 참여할 수 있고 유사시 문제가 되는 구현 클래스만 교체가 가능하다 .

Page 10: 자바 인터페이스 Java interface

자바 인터페이스 J2EE

• javax.servlet.http.HttpServletRequest• javax.servlet.http.HttpServletResponse• javax.servlet.http.HttpSession

자바로 웹 개발을 하면서 항상 사용하는 위와 같은 것들이 실상 모두 인터페이스이다 . 썬

마이크로시스템즈 ( 현 오라클 ) 가 아주 잘 정의해 놓았다 . JAVA Web Application Server 는 그

종류가 Tomcat, WebLogic, WebSphere, Resin 등 아주 많다 . 해당 WAS 제조사는 서로 다른

방법으로 위에 나열한 인터페이스들을 구현한 것이다 .

하지만 우리는 저 인터페이스를 누가 어떻게 구현했는지 상관하지 않고 웹 개발을 할 수 있다 . 그것이

인터페이스의 위력이다 .

Page 11: 자바 인터페이스 Java interface

자바 인터페이스 및 구현 예제왼쪽 소스와 같이 Class X 는 세가지 기능을 조합하여만들어지는 응용프로그램이다 . 그 세가지 기능은 곱셈 , 덧셈 그리고 뺄셈이다 . X 를 담당한 개발자는 곱셈기능의 구현을 다른 개발자에게 시키기 위하여 Multiplier 라는 Interface

를 정의하고 multiply 라는 abstract method 를 선언하여 다른 개발자에게 배포했다 .

우선 아쉬운데로 MultiplierTestImpl 이라는 클래스로 항상 0 을 리턴하는 multiply method 를 구현하여 일을 진행할 수 있다 . 다른 개발자가 그 기능을 구현하건 말건 일단 Class X

를 담당한 개발자는 자신의 진도를 뽑을 수 있는 것이다 .

Page 12: 자바 인터페이스 Java interface

자바 인터페이스 및 구현 예제 (계속 )다른 개발자가 만들어온 클래스의 이름은 MultiplierImpl1

이다 따라서 X 담당자의 소스코드는 최종적으로 오른쪽 처럼 바뀐다 . 바뀌는 부분은 Multiplier 의 instance 를 생산하는 getMultiplierInstance() Method 의 내용이다 . Multipli-

erTestImpl 을 MultiplierImpl1 로 바꾸는 단순한 일 .

모두 적용하고 수행을 해보니 정상동작을 하긴 하는데 묘하게 느리다 . Profiling 을 해보니 예상했던 대로 multiply 가 병목이다 .

Page 13: 자바 인터페이스 Java interface

자바 인터페이스 및 구현 예제 (계속 )해당 기능의 소스를 까보니 아래왼쪽처럼 만들어져 있는 것이다 . X 담당자는 맹꽁이에게 일을 시킨 자신이 문제라며 스스로 위로하면서 아래오른쪽과 같이 다시 구현하여 프로젝트를 완수했다 . 물론 Class X 의 get-

MultiplierInstance() Method 안쪽 MultiplierImpl1 은 MultiplierImpl2 로 수정했다 .

3장의 슬라이드를 통하여 보여준 예제는 너무 간단하고 억지스럽지만 인터페이스를 통하여 규격을 정의하고 그 구현을 분리하면 얻을 수 있는 장점을 묘사하기에 부족하지 않다고 본다 . 여러 복합기능을 정의한 실전 인터페이스라고 상상해 본다면 더욱 공감할 수 있을 것이다 .

Page 14: 자바 인터페이스 Java interface

결론

• 인터페이스라는 개념을 정확히 이해하는 것은 OOP 를 공부하기 위한 첫걸음이라 할 수 있다 .

• 좀 더 수준 높은 자바 어플리케이션을 생산하려면 디자인 패턴 공부가 필수인데 클래스 ,

추상클래스 그리고 인터페이스를 이해하지 못하면 디자인 패턴을 이해할 수 없다 .

• 우리가 습관처럼 사용하는 API 라는 용어도 결국 인터페이스이다 . Application Pro-

gramming Interface!

• 네트워크를 설명할 때 항상 등장하는 OSI-7Layer 라는 개념도에서 두 개의 7층 탑을 가로로 엮는 것은 Protocol 이라 하고 각 층간 세로로 정의된 것은 Interface 라고 한다 .