객체지향 특성, 추상화 , 캡슐화, 상속성, 다형성 예제

반응형
//추상화 -인터페이스를 통한 사물의 추상화
//달리는 것의 추상화
interface 달리는것{    
    void 달린다();
}

class 자동차 implements 달리는것{
    public void 달린다(){
        engine(); //구체적인 자동차의  달리는 기능 구현
    }
}

class 자전거 implements 달리는것{
    public void 달린다(){
        패달(); // 구체적인 자전거의 달리는 기능구현
    }
}

//캡슐화 - 주요기능/정보를 외부에 노출시키지 않고 인터페이스 대상만 노출하여 재사용성 향상
class 캡슐화된클래스{
    private data1;
    public String getData(){
        return 처리로직(data1);//data1,처리로직은 외부에 숨겨지고 해당 값만으로 외부와 인터페이스한다.
    }
    private String 처리로직(data1){
        ...//복잡한 처리로직
    }
}
        
//상속성- super class의 내용을 sub class에서 사용
class 자동차{
    public void 달린다(){..};
}

class 스포츠카 extends 자동차{
    //달린다 기능 사용가능
    public void 급정거(){..};//상속외에 기능 추가가능
}

//다형성 - overriding, overloading :폴리모피즘

//overloading
class 자동차{
    public void 달린다(int data1){
        //100km
    }
    public void 달린다(int data1, int data2){
        //1000km
    }
}
//Object의 .toString();메소드
//.toString();, .toString('#'); 등이 가능

//클래스 사용시에 달리다 메소드에 파라메터 갯수와 형식에 따라 같은 이름의 메소드호출시에도
//다른 처리 가능

//overriding
interface 자동차{
    void 달린다(; //자동차 추상화 ;
}

class 스포츠카 implements 자동차{
    public void 달린다(..200km..){ //200km };
}
class 트럭  implements 자동차{
    public void 달린다(..50km..){ //50km };
}
//subclass들이 overring 하여 superclass의 메소드 재정의

//Object를 상속받은 클래스들이 toString();을 별도 구현
//클래스별로 toString()을 재정의 해서 사용-->메소드 재사용성 증가

//어디다 사용하느냐? --> 메소드의 동적처리시 사용(Virtual Method Invocation)
// -컴파일시점이 아닌 실행 시점에 메소드 정의 : 디자인패턴의 핵심
//strategy pattern
    
//구현 main class
//구현 class 별로 재사용, 확장이 용이
 if(돈이 많으면)
      자동차 = new 스포츠카();
 else(돈이 없으면)
      자동차 = new 트럭();
자동차.달린다();//동적메소드 실행     

//장점 : 자동차 추가시 새로운 차종을 인터페이스에 맞게 추가 해주면 된다.
//       사용 업무별 자동차 확장 축소가 가능하다.         
//다형성이 없다면..    바뀌는 부분을 찾아내어 바뀌지 않는 부분으로부터 분리
class 렌트{    
    if(돈이 많으면)
        스포츠카 렌트카 = new 스포츠카();
        렌트카.달린다();
    else(돈이 없으면)
        트럭 렌트카 = new 트럭();
        렌트카.달린다();
    else...//추가시.. 어떤 규칙을 갖는가? 리어카.리어카달린다(); 규격없이 생성
    //재사용성 향상: 인터페이스나 추상클래스의 규격에 맞게 사용하여 재사용이 용이
    //유연성 향상 : 인터페이스를 통한 유연한 기능확장 및 클래스 추가(차종추가) 가능
//             :사용자는 규격에 맞는 차를 추가하여 사용가능
   
   
반응형

'T-prj' 카테고리의 다른 글

디자인 패턴 설명/구분  (0) 2009.12.15
D-80  (0) 2009.12.03
study 시작..  (0) 2009.10.14

Top