본문 바로가기
Java

객체지향이란? 객체지향 설계원칙?

by leo21c 2012. 12. 3.
  1. 객체란?
    - 객체는 실제로 존재하는 구체적인 대상이다.
      : 눈으로 보고 손으로 만질 수 있는 모든 대상을 객체라고 말할 수 있다.
    - 객체는 다른 객체와 구분되며 고유하다.
    - 객체는 상태를 가지며 행위를 제공할 수 있다.
      : 상태는 객체가 가질 수 있는 속성을 나타낸다.
       
       속성(Property) 표현
       + : Public
       - : Private
       # : Protected
       ~ : Package
       underline : static data member
      
    - 객체는 문제 영역에서 의미있는 존재이다.
      : 세상에서 인식 가능한 모든 대상이 객체가 될 수 있다.

  2. 클래스란?
    - 클래스는 동일한 유형의 여러 객체들을 주상화 시킨 것이다.
      : 유사한 객체들을 만들 수 있는 것을 클래스라고 할 수 있다. 
    - 동일한 유형의 객체란 객체의 상태와 행위가 유사함을 뜻한다.
      : 같은 속성과 함수를 가지고 있는 클래스로 만들어진 것?

  3. Instance
    - 추상적 개념인 클래스로부터 객체를 만드는 것을 인스턴스화라고 하고 그렇게 만들어진 객체를 인스턴스라고 부른다.
    - 객체는 클래스의 인스턴스다.

  4. UML 구성 요소
    - Element  
    - Relation  
    - Diagram (View)
    Element, Relation 두개를 합친 개념을 Model이라고 한다.

  5. 객체지향 설계원칙(SOLID)
    - SRP: Single Responsibility Principle(단일 책임의 원칙)
     한가지 책임만을 가진다.
     수정할 이유가 존재하면 이것 또한 한가지 이유여야만 한다.

    - OCP: Open Closed Principle (개방 폐쇄의 원칙)
      확장이 가능하고 변경은 불가능해야 한다.
      새로운 요구사항에 대해서 많은 수정을 하지 않게 만들어지면 OCP를 잘 지켜 개발한 것이다.

    - LSP: Liskov Substitution Principle (리스코프 대체 원칙)
      확장된 소스가 기존의 소스를 대체 할 수 없다.
      Client가 어떤 상속관계에 있을 때 객체를 상위 클래스로 캐스팅을 할 때 문제가 발생하는지? is a 관계가 맞는지 확인해 본다.

    - ISP: Interface Segregation (Interface 분리 원칙)
      사용하지 않는 인터페이스에 영향을 받지 않아야 한다.

    - DIP: Dependency Inversion Principle (의존 역전의 원리)
      클라이언트는 사용을 할때 구체 클래스보다는 인터페이스, 추상클래스를 사용하라는 것. 인터페이스를 바라보고 있으면 구체클래스가 바뀌더라도 클라이언트가 변경할 필요가 없다.

  6. 연관관계(Association)
    - 연관관계는 상대 클래스의 객체에게 메세지를 전달할 때 사용되는 통로의 역할을 한다.   연관관계를 맺은 클래스의 객체에게만 메세지를 전송하여 무엇인가를 요청 할 수 있다.

일부 내용 출처: 클래스 구조의 이해와 설계 (한빛미디어)