코드의 확장성과 재사용성을 높이기위해...
당신은 인쇄공장 사장의 의뢰를 받고있는 회사의 소속 개발자야
명함 클래스 하나로 고객의 다양한 주문을 출력하고 싶어
명함 클래스는 print 기능이 있어
손님 1 : name
손님 2 : name , brand , phoneNumber
손님 3 : name , email
음...
또 훨씬 많은 다양한 손님들이 있겠지?
클래스에서 객체를 만들어서 객체.print()를 하기위해서
저 많은 속성과 손님 성향에 따른 메소드를 다 구현해놓는건 굉장히 쓰레기같은 짓이야
새로운 타입의 고객이 생길때마다 나는 이 클래스를 수정하고 경우에 따라 print213()과 같은 메소드를
추가하고 그것을 [출력] 버튼과 몇백줄의 switch문을 연결시켜야 하거든
class NameCard{
String name;
String email;
String brand;
....
void print1(){ // 이름만 출력 }'
void print2(){ // 이름과 회사, 폰번호 출력 };
void print3(){ // 이름과 이메일 출력 };
...
}
이처럼 쓰레기같은 클래스를 만들어야 할꺼야
몇백명의 요구를 들어주기 위해 여려명의 개발자들이 코딩을 할꺼야(분명 저정도의 코드가 아니겠지...)
그런데 저따위 쓰레기코드를 한번 수정할때마다 모두에게 알리고 클레스파일을 넘기고
대학교 1학년때 프로그램짜듯 넘기고 넘기고 넘기고 ....
하지만 인터페이스를 쓴다면
public interface PrintNameCard {
public void print( NameCard nc );
}
음... 이것을 쓴다면...
class NameCard{
PrintNameCard pnc;
setNameCard(printNameCard pnc){
this.pnc = pnc;
}
void print(){
pnc.print();
}
}
그리고 상상해봐. 인터페이스를 확장(impliment)한 클래스를 그때그때(고객의 주문에 따라) 구현하고 그 객체를
NameCard 객체를 생성할때 인자로 넣어주면 깔끔...
그리고 몇백의 수요를 위해 다수의 개발자가 투입된다면 인터페이스를 상속받는 클래스 하나만 작성해서 모아두면 되기때문에 수정이나 관리 및 사용이 용이하다는거지..
또 나중에 비슷한 작업을 하기위해 전체를 다 만들 필요 없이 클래스 하나만 구현해서 그대로 써먹을수가 있을꺼야..
아 머리는 이해한다고 생각하는데 표현하기가 어렵다.. 주저리주저리 써놓긴 했는데
http://dante2k.egloos.com/199169 이곳으로 가보자
사실 이런 예를 들지 않아도 명확하게 이해하고싶다...
'~ 2014 > JAVA & ANDROID' 카테고리의 다른 글
java :: 제네릭 (0) | 2014.06.19 |
---|---|
java :; LinkedList ArrayList Vector (0) | 2014.06.18 |
JAVA :: 예약종료 (0) | 2013.09.03 |
ANDROID :: 액티비티 투명처리 (0) | 2013.07.19 |
ANDROID :: 환경설정창 만들기 preferenceScreen (0) | 2013.07.16 |