1. 객체 지향 모델링
2021. 5. 11. 17:14ㆍDesignPattern
1.1 모델링이란?
- 모델링이란 소프트웨어 시스템의 구조와 행위를 명세하는 것을 의미한다.
1.2 UML(Unified Modeling Language)
- UML은 표준화된 통합 모델링 언어이다.
- 요구 분석, 시스템 설계, 시스템 구현 등 시스템 개발 과정에서 개발자 사이의 의사 소통이 원할하게 이루어지도록 하는 언어이다.
1.3 클래스 다이어그램
- UML의 정적 구조 다이어그램
- 클래스와 클래스들끼리의 관계를 표현
- 주요 구성 요소
- 클래스 : 속성과 기능으로 구성된 객체의 집합
- 관계 : 2개 이상의 클래스들간에 기능을 호출하는 것
1.3.2 관계의 종류
관계 | 설명 |
연관 관계(Association) | 한 클래스가 다른 클래스에서 제공하는 기능을 사용하는 상황에서 사용됨 |
일반화 관계(Generalization) | 객체지향모델리에서 상속 관계를 표현 |
집합 관계(Composition, Aggregation) | 클래스들 사이의 전체 또는 부분 관계 |
의존 관계(Dependency) | 두 클래스의 관계가 하나의 메서드를 실행하는 동안과 같은 매우 짧은 시간만 유지되는 관계 |
실체화 관계(Realization) | 인터페이스와 추상 메서드들을 실제로 구현한 클래스들 사이의 관계를 표현 |
연관 관계(Association)
- 한 클래스가 다른 클래스에서 제공하는 기능을 사용하는 상황
- 예를 들어 Professor 클래스는 필드로 student 인스턴스를 활용하여 Student 클래스의 기능을 호출한다.
- 단방향 연관 관계(Unidirectional Association)
- 한쪽으로만 방향성이 있는 연관 관계, 화살표를 지목당한 클래스는 지목한 클래스를 알지 못한다.
- 예를 들어 Student 클래스는 Course 클래스를 알골 있지만 Course 클래스는 Student 클래스를 알지 못한다.
- 양방향 연관 관계(Bidirectional Association)
- 양방향 연관 관계는 서로의 클래스가 존재를 알고 있다.
- M:N 양방향 연관 관계같은 경우 구현하기가 복잡하여 1:N 단방향 연관 관계로 변환하여 구현한다.
- 예를 들어 Student 클래스는 여러개의 Course 클래스를 수강이 가능하고 Course 클래스에도 여러명의 학생이 존재할 수 있다.
- 아래와 같이 중간에 Transcript 클래스를 두어 M:N 양방향 연관 관계를 1:N, N:1 단방향 연관 관계로 변환한다.
- 예를 들어 Student 클래스는 여러개의 Course 클래스를 수강이 가능하고 Course 클래스에도 여러명의 학생이 존재할 수 있다.
- 재귀적 연관 관계(Recursion Association)
- 같은 클래스들끼리 연관 관계를 갖고 있으며 상하 관계가 존재하고 사이클이 존재하지 않는다.
일반화 관계(Generalization)
- 하나의 클래스가 다른 클래스를 포함하는 상위 개념일때 구성되는 관계
집합 관계(Composition, Aggregation)
- 집합 관계는 한 객체가 다른 객체를 포함하는 것을 나타낸다.
- 집약 관계(Aggregation)와 합성 관계(Composition) 모두 한 객체가 다른 객체를 포함한다.
- 집약 관계(Aggregation)
- 전체 객체와 부분 객체가 독립적
- 전체 객체가 메모리에서 사라져도 부분 객체는 사라지지 않는다.
public class Computer{
private MainBoard mb;
private CPU c;
private Memory m;
private PowerSupply ps;
public Computer(MainBoard mb, CPU c, Memory m, PowerSupply ps){
this.mb = mb;
this.c = c;
this.m = m;
this.ps = ps;
}
}
위와 같이 집약 관계(Aggregation)은 Computer 객체가 사라져도 부품을 구성하는 MainBoard, CPU, Memory, PowerSupply 객체는 사라지지 않는다.
- 합성 관계(Composition)
- 부분 객체가 전체 객체에게 의존적
- 전체 객체가 메모리에서 사라지면 부분 객체도 삭제
public class Computer{
private MainBoard mb;
private CPU c;
private Memory m;
private PowerSupply ps;
public Computer(){
this.mb = new MainBoard();
this.c = new CPU();
this.m = new Memory();
this.ps = new PowerSupply();
}
}
위와 같이 합성 관계(Composition)는 생성자 내에서 MainBoard, CPU, Memory, PowerSupply 객체를 생성하기 때문에 Computer 객체가 사라지면 같이 사라진다. 즉, 부품 객체들의 생명주기가 Computer 객체의 생명주기에 의존하는 관계가 형성된다.
의존 관계(Dependency)
- 한 클래스가 다른 클래스를 사용하는 관계
- 의존 관계를 사용하는 경우
- 클래스의 속성에서 참조
- 기능의 매개변수로 사용
- 메서드 내부의 지역 객체로 사용
public class Car{
...
public void fillGas(GasPump p){
p.getGas(amount);
}
}
위와 같이 Car 클래스는 GasPump 클래스를 인자로 일시적으로 사용한다.
실체화 관계(Realization)
- 인터페이스란 책임(Responsibility)이다.
- 책임이란 객체가 해야 하는 일을 의미함
- 객체가 외부에 제공하는 서비스나 기능은 객체가 수행하는 책임을 본다.
- 예를 들어 TV 리모컨은 TV를 켜거나 끄는 것과 같은 책임을 수행한다.
- 인터페이스를 어떤 공통되는 능력이 있는 것들을 대표적인 관점으로 볼 수 있다.
- 예를 들어 비행기(Plane)과 새(Bird)는 공통적으로 날 수 있는 능력이 존재함. 공통 능력(Flayable)이라는 관점에서 아래와 같이 비행기와 새를 그룹화 할 수 있는 메커니즘이 바로 인터페이스이다.
- 인터페이스는 실체화된 클래스들의 공통된 기능들을 그룹화 한 것을 의미
- 실체화는 인터페이스를 기반으로 실제 생성된 클래스를 의미
References
JAVA 객체지향 디자인 패턴
'DesignPattern' 카테고리의 다른 글
6. 싱글턴 패턴(Singleton Pattern) (0) | 2021.05.27 |
---|---|
5. 전략 패턴(Strategy Pattern) (0) | 2021.05.26 |
4. 디자인패턴 (0) | 2021.05.24 |
3. Solid 원칙 (0) | 2021.05.14 |
2. 객체지향원리 (0) | 2021.05.11 |