'인터페이스'에 해당되는 글 1건

  1. 2010.01.21 인터페이스(interface)



인터페이스는 다중상속을 구현하기 위한 꼼수 입니다.
그렇다면 다중상속이 필요한 이유가 무엇이냐?

예를 들자면 이렇습니다.
한 회사의 부서들을 클래스로 나타내고 각 직원들을 각각의 부서에 할당했다고 하죠.
일단
1. 영업부 class
2. 기술부 class

정도로 크게 나눴다고 하고 영업부를 더 자세하게 나눈다고 치죠.

1-1 해외영업부class
1-2 국내영업부class

그리고 기술부 역시

2-1 시스템개발부 class
2-2 소프트웨어개발부 class

정도로 나눴다고 치고 모든 직원을 아래의 4개의 클래스에 속한다고 칩시다..(사실 클래스의 개념에 좀 안맞기는 하지만 예를 들기 위해서..^^;;;)
그런데 문제가 생겼습니다... 영업부 직원 중에 운전을 할줄 아는 사람과 할줄 모르는 사람이 있어서 이것을 구분해야 하는 거죠... 그렇다면 어떻게 해야 할까요....

이때 인터페이스라는 개념이 필요한 것입니다.

운전을 하고 못하고는 위의 네개의 클래스 구분과는 무관하겠죠. 다시 말하면 국내영업부 직원이나 소프트웨어개발부 직원이나 모두 운전을 할 수 있습니다.
이것은 다시 말하면 전혀 다른 방식으로 전 직원들을 구분할 필요가 있다는 것을 나타냅니다. 하지만 자바에서는 다중 상속이 불가능하죠. 왜 다중상속이 안되느냐 하면 만일 한 클래스가 두개의 클래스를 상속받을 경우에 그 클래스를 정의하는 두개의 방식이 존재해서 혼란이 일어납니다. 간단하게 이놈이 김씨 아들인지 박씨 아들인지 알수가 없어진다는 정도로 이해하면 되겠습니다. ^^;;

여기서 Drivable 이라는 인터페이스를 구현하고 운전을 할줄 아는 직원들에 대해서 이 인터페이스를 implements 하도록 하면 직책에 따른 직원의 구분 이외에 운전 여부에 대해서 다시 직원들을 구분할 수가 있을 겁니다.

어떤 직원이
extends 시스템개발부class implements Drivable
가 되었다면 이 직원은 시스템개발부에 속하면서 운전을 할줄 아는 직원이 되는 거죠.

여기에 부가적으로 일어를 할 수 있는 직원과 영어를 할 수 있는 직원 그리고 중국어를 할 수 있는 직원을 더 구분하고 싶다면 JPSpeakable, ENGSpeakable, CHNSpeakable 이라는 인터페이스를 정의하고 각각의 직원이 구사할 수 있는 외국어에 대해서 위의 인터페이스를 implements 해주면 될겁니다.


그러면 일괄적으로 일본어를 할 수 있는 직원을 부서에 관계없이 참조할 수 있겠죠.

중요한 것은 여기서 직원들에 대한 구분을 해당 부서가 가장 중요한 분류 기준이고 부가적으로 운전을 할 수 있는지로 다르게 분류하고 있다는 겁니다.
운전을 할 수 있는지가 더 중요한 기준이 된다면
Drivable 을 implements 하지 않고 extends 해서 처리하겠죠.. extends와 implements는 이런 차이입니다.

ps. 개인적으로 구현이든 상속이든 별 차이 없다고 생각합니다. 언어 차원에서 깊게 파고 들어가면 그 차이가 보이겠지만 프로그래밍을 하는 입장에서는 문법의 문제라기보다는 개념의 문제인것 같습니다.

http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=1040201&docId=65288998

'Application Programming > Java' 카테고리의 다른 글

입력된 문자열 뒤에 공백 추가해주는거  (0) 2008.11.10
Posted by Finebe
,