본문 바로가기

💻 개발IT/Design Patterns

2. 객체지향 개념과 설계 원칙 - 객체지향 패러다임

Abstract Data Type(ADT)

  • 데이터, 관련된 operation들을 하나의 문법적인 unit에 캡슐화
  • 장점
    1. 하나의 문법적인 요소라서 관리, 수정에 용이하고 분할 컴파일이 가능함
    2. 외부에서 바로 접근이 불가능하여 내부 변경되어도 외부에 영향을 미치지 않음

 

Object-Oriented Paradigm

  • Class = ADT + Inheritance(재사용) + Polymorphism(유연성)

 

Inheritance

  • class Y가 class X를 상속한다면? (Y is a X)
    • Y는 X의 모든 메소드와 데이터를 상속받음
    • Y의 모든 인스턴스는 X의 인스턴스 → X의 인스턴스를 요청하는 곳에서 Y 인스턴스 사용 가능

 

Polymorphism

  • 한 operation이 서로 다른 방법으로 수행될 수 있음
    • operation은 같은 이름을 가짐
    • if-else, switch같은 조건문을 감소시킬 수 있음
  • Polymorphic한 method가 호출되었을 때 어느 method가 call되는가?
    1. 현재 class (인스턴스의 객체)에 있다면 run
    2. 없으면, superclass에 해당 method가 있다면 run.. 없으면 계속 상위 class로 올라감
    3. 없으면, 에러 (단, java, c++에서는 컴파일 되지 않으므로 발생하지 않음)
  •  종류
    1. Method Overriding : 
      • Runtime Polymorphism (Dynamic polymorphism)
      • polymorphic variable 은 자신의 object나 그 후손의 object만 point할 수 있음
        ex) class Y가 class X를 상속할 때 Y c = new X(); 불가능


    2. Method Overloading : 메소드 이름 동일하지만 파라미터가 다름
      • Compile time Polymorphism (Static polymorphism)
  • 예시 : Polymorphism + Abstract class
    • Canine는 animal의 abstract method를 그대로 받아서 abstract class여야만 함
    • Animal a = null (null은 어떤 타입 변수에도 넣을 수 있어서 가능)

  • 예시 : Polymorphism + interface

 

 

Class Relationship

  • Dependency : Source가 Target class(상속일 때, 부모 class)에 navigation 가능한다는 것은, target이 변화할 경우 source에 영향을 줄 수 있지만 source가 변하는 경우 target은 신경쓰지 않아도 됨

  • 예시 : Class 변경에 대한 영향
    • 단순 직선은 양방향 영향

 

 

※ Abstract Class, Method (in Java)

  • abstract method는 정의(body)가 없고 protocol만 있음
  • abstract method가 하나라도 있으면 abstract class여야만 함 (단, abstract class는 abstract method가 없어도 됨)
  • instance 생성 불가능
  • 상속 가능
  • 사용해야하는 상황
    • 상속 관계
    • 부분적인 implementation이 필요한 경우

※ Interface

  • abstract class와 유사하지만 차이점 존재 (더 추상적임)
    • 모든 method가 abstract method
    • instance variable을 가질 수 없음
    • public static final variable(상수)은 허용
  • 사용해야하는 상황
    • 아무런 다른 제약조건이 없으면(implementation이 필요없을 경우) abstract class보단 interface 사용
    • class의 모든 경우를 대표하는 것이 아닌 작은 일부만 조직화할 때
    • 다른 class의 상속을 이미 받았을 때
  • 예시

 

 

 



 

반응형