모르지 않다는 것은 아는것과 다르다.

객체지향

클래스 다이어그램

채마스 2022. 4. 23. 21:22

클래스 다이어그램

  • 대표적인 UML 구조 다이어그램이다.
  • 객체 지향 프로그래밍에서 여러 클래스 상호관의 혐력 관계를 나타내는 다이어그램이다.
  • 클래스 간의 관계를 설계 할때 유용하다.

  • 가장 윗부분이 클래스 이름이다.
  • 메소드와 비슷하게 괄호가 붙은 것이 연산이다.
  • 변수명 처럼 나타난 것이 속성이다.
  • 이텔릭체로 되어있는 것은 추상클래스나 인터페이스를 의미한다. (메소드도 마찬가지다)
    • 스테레오 타입으로 표현하기도 한다. (<>, <>)
  • 다이어몬드 포살표가 되었다는 의미는 의존관계를 나타내는데, 위와 같은 경우는 Decorator 클래스가 Component 형 변수를 component 라는 이름으로 가지고 있다는 것을 의미한다.

 

접근 제어자 표시

  • public : +
  • protected: *
  • default: ~
  • private: -

 

연관 관계

  • 클래스 상호 간에 서로 연관되어 있음을 나타내며, 각 클래스의 객체는 해당 연관 관계에서 어떤 역할 을 수행하게 된다.
  • 실선으로 되어있다.
  • 단방향 연관관계의 경우는 화살표(->)로 표시한다.
  • 양방향 연관관계는 직선(-)으로 표시한다.
  • 클래스간의 연관된 개체의 수를 표현해야 하는 경우에는 선의 끝쪽에 다중성(multiplicity)를 나타낸다.
  • 예시는 아래와 같다.
public class Student {

    int studentID;
    String studentName;
    ArrayList<Subject> subjectList;
  • 위와 같이 Student 클래스의 맴버 변수로 Subject 변수를 가지고 있다.

 

집합 관계 (composition, aggregation)

  • 연관관계의 특별한 경우인데, 클래스간의 포함관계를 나타낸다.
  • 전체 객체와 부분 객체의 인스턴스 생존 주기( life time ) 에 따라 두가지로 구분할 수 있다.

집약 관계

  • 클래스 다이어그램에 빈 마름모로 표시한다.
  • 전체 객체와 부분 객체의 라이프 타임이 독립적 즉, 포함하는 객체(전체 객체)가 사라져도 포함된 객체 (부분 객체)는 사라지지 않는다.
  • 예를들어, 버스랑 학생이 연관이 있다고 했을때, 버스 객체가 사라져도 버스와 연관된 학생 객체는 사라지지 않는것을 예로 들 수 있다.
  • 공유하는 리소스가 해당된다.
  • 전체 객체가 생성될 때 매개 변수로 전달 받는다.

합성 관계

  • 클래스 다이어그램에 채워진 마름모로 표시 한다.
  • 전체 객체의 라이프 타임에 부분객체가 종속된 경우를 말한다.
  • 전체 객체가 사라지면 부분 객체도 사라진다.
  • 주로 멤버 변수로 포함되어있다.
  • 전체 객체의 생성자에서 부분 객체를 생성하는 경우이다.

 

의존 관계 (dependency)

  • 연관 관계 보다는 짧은 life time 을 갖는 경우를 말한다.
  • 프로그램 내에서는 참조 변수가 매개변수나 지역 변수로 구현한다.
  • 아래와 같이 매개변수로 밖에서 들어와서 사용되는 경우이다. -> 연관관계의 경우는 내부에서 생성돼서 매개변수로 사용되는 것에서 차이가있다.
  • 점선으로 되어있다.
  • 예시는 아래와 같다.
class Student {

    int money;
...
    public void takeBus(Bus bus) {
          bus.take(1000);
          this.money -= 1000;

     }

    public void takeSubway(Subway subway) {
          subway.take(1500);
          this.money -= 1500;
     }
}

 

일반화 관계 (generalization)

  • 객체 지향에서 상속을 의미한다.
  • 일반적인 클래스(상위 클래스)를 보다 구체적인 클래스(하위 클래스)가 상속한다.
  • 실선으로 되어있다.

 

실체화 관계 ( realization )

  • 기능이 선언된 인터페이스를 구현하는 클래스는 선언된 기능을 구현할 책임이 있다.
  • 여러 클래스가 하나의 인터페이스를 구현함으로써 다형성을 제공힌다.
  • 점선으로 되어있다.

REFERENCES

  • 박은종님의 디자인패턴