ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Design Pattern] Object Oriented Paradigm
    Learn/Architecture 2022. 8. 20. 22:18

    # Abstract Data Type (ADT)

    - 데이터를 밖으로 노출하지 않고 operation 구현을 보여주지 않는 방식

    장점 1. 내부 방식을 바꿔도 클라이언트가 영향을 받지 않음

                > 시스템을 관리하고 수정하는데 용이함

    장점2. Encapsulation

     

    # Object-Oriented Paradigm

    Class = ADT + Inheritance (reusability) + Polymorphism (flexibility)

    클래스 재사용 뿐만 아니라 클라이언트 코드의 재사용도 중요

     

    위 그림을 위의 코드와 같이 코딩하는건 좋은 설계가 아니다.

        > 새로운 타입이 들어오면 아래와 같이 추가해야되는데 수천 수만개가 들어오면 어렵다. 

    아래와 같이 코딩해서 클라이언트가 정의하도록 하는게 polymorphic이다. 

    # Inheritance

    자식이 부모를 상속받았다면,

    - 자식은 부모의 모든 메서드와 데이터를 상속받는다. 

    - 자식은 부모다 (is a) --> 자식의 인스턴스는 부모의 인스턴스와 같게 취급할 수 있다. 

     

    즉, 부모 타입의 인스턴스가 필요한 모든 곳에서 자식 타입의 인스턴스를 쓸 수 있다. 

     

    # Polymorphism

    같은 이름의 operation이 각각의 클래스에서 다르게 작동할 수 있다. 

        > conditional statement를 줄이는데 큰 역할을 한다. 

     

    두 가지 타입이 있다. 

     

    1. Runtime Polymorphism (Dynamic Polymorphism) --> Overriding

    - 클래스가 2개 이상 필요

    - 클래스에 따라 메서드가 다르게 동작한다. 

    - 런타임때 이루어진다. 

    - polymorphic variable은 본인 타입의 오브젝트도 될 수 있지만 자식(descendant)타입의 오브젝트도 될 수 있다. 

        > 부모는 안됨에 유의하자. 

        > 아래 예시에서 보면 X 타입의 variable이 X타입의 오브젝트도 당연히 되지만 Y타입의 오브젝트도 가능하다. 

     

    2. Compile Time Polymorphism (Static Polymorphism) --> Overloading

    - 같은 이름의 메서드도 들어오는 값의 타입에 따라 다르게 동작한다. 

    - 컴파일 타임때 결정된다. 

    # Abstact Class, Method (JAVA)

    - abstract method는 body가 없는 method

    - abstract method가 하나라도 있다면 class는 반드시 abstract여야 함

       > 역은 성립하지 않음. (abstract class가 무조건 abstract method를 가지진 않음)

    - abstract class라도 자신의 자식이라면 concrete instance를 타입으로 지정할 수 있다. (polymorphism)

     

    [예시]

    - a 는 polymorphism에 따라 dag나 cat의 인스턴스가 가능하다. 

    - 오른쪽 세 번째 문단에서 Animal, Canine은 Abstract이므로 new가 안된다. (에러남)

    - Canine은 Cat의 인스턴스를 가질 수 없다. (부모가 같은건 의미가 없다.)

    # Interface

    - abstract와 유사한데 모든 메서드가 abstract여야 함. (어떤 것도 구현되어선 안됨)

    - 인스턴스 변수를 가질 수 없음

    - static final로 정의된 상수는 허용함

    - interface도 하나의 타입이다. 

     

    [예시]

    - Animal과 Robot은 관련이 없으므로 aref는 robo가 될 수 없다. 

    - implement도 상속처럼 하위 인스턴스를 가리킬 수 있다. 

    - cref는 nabi나 robo의 인스턴스를 가질 수 없다. 

    # Abstract Class VS Interface

    - 대부분의 경우 별 이유가 없으면 Interface 사용

    - 정확히 "is a" 관계가 성립하고 부분적 구현이 필요할 때만 abstract를 사용한다. 

     

    # Change Propagations

    - target이 변하면 source는 영향을 받는다. 

    - source가 변하는건 target에 영향을 주지 않는다. 

    [예시] 

    # Information Hiding

    자주 변하는 지점에 Interface를 만들어주면 Encapsulation 가능

     

    #QUIZ

    풀 때는 class diagram을 먼저 그리면 쉽다. 

    a - type1은 interface이므로 new가 안된다. 

    c - 형제끼리는 안된다. 

    e - ITpye은 interface이므로 new가 안된다. 

    g - 형제기리는 안된다. 

     

    'Learn > Architecture' 카테고리의 다른 글

    [Design Pattern] Observer Pattern  (0) 2022.08.27
    [Design Pattern] Strategy Pattern  (0) 2022.08.26
    [Design Pattern] GRASP Principle  (0) 2022.08.24
    [Design Pattern] SOLID Principle  (0) 2022.08.21
    [Design Pattern] Introduction  (0) 2022.08.17

    댓글

Designed by Tistory.