JAVA 객체지향
디자인패턴
2018.06.19
Chapter 01 객체지향 모델링
1. 객체지향 모델링
- 1.1 모델링
- 1.2 UML
- 1.3 클래스 다이어그램
1.1 모델링
모델의 역할
- 서로의 해석을 공유해 합의를 이루거나 해석의 타당성 검토
- 현재 시스템 또는 앞으로 개발할 시스템의 원하는 모습 가시화
- 시스템의 구조와 행위를 명세할 수 있으며 시스템을 구축하는 틀 제공
모델 특징
- 모델은 추상화(abstraction)에 바탕을 두고 만들어야 한다. 특정 관점에서 관련이 있는 점은 부각시키고 관련이 없는 면은 무시한다.
1.2 UML
UML(Unified Modeling Language)
- 요구 분석, 시스템 설계, 시스템 구현 등의 시스템 개발 과정에서 사용하는 표준화된 통합 모델링 언어
1.2 UML
UML 다이어그램 종류
클래스 다이어그램 | 시스템을 구성하는 클래스 사이의 관계 표현 |
객체 다이어그램 | 객체 정보를 보여준다 |
복합체 구조 다이어그램 | 복합 구조의 클래스와 컴포넌트 내부 구조 표현 |
배치 다이어 그램 | 소프트웨어, 하드웨어, 네트워크를 포함한 실행 시스템의 물리 구조 표현 |
컴포넌트 다이어그램 | 컴포넌트 구조 사이의 관계 표현 |
패키지 다이어그램 | 클래스나 유즈 케이스 등을 포함한 여러 모델 요소들을 그룹화해 패키지를 구성하고 패키지들 사이의 관계 표현 |
구조 다이어그램
1.2 UML
UML 다이어그램 종류
활동 다이어그램 | 업무 처리 과정이나 연산이 수행되는 과정 표현 |
상태 머신 다이어그램 | 객체의 생명 주기 표현 |
유즈 케이스 다이어그램 | 사용자 관점에서 시스템 행위 표현 |
순차 다이어그램 | 시간 흐름에 따른 객체 사이의 상호작용 표현 |
상호작용 개요 다이어그램 | 여러 상호작용 다이어그램 사이의 제어 흐름 표현 |
통신 다이어그램 | 객체 사이의 관계를 중심으로 상호작용 표현 |
타이밍 다이어그램 | 객체 상태 변화와 시간 제약을 명시적으로 표현 |
행위 다이어그램
1.3 클래스 다이어그램
1.3.1 클래스
- 동일한 속성과 행위를 수행하는 객체의 집합
- 객체를 생성하는 설계도
학생 |
---|
-이름 -전공 -학번 -과목 |
+수강하다() |
UML 클래스의 표현 예
클래스 이름
속성
연산
1.3 클래스 다이어그램
1.3.1 클래스
접근 제어자 | 표시 | 설명 |
---|---|---|
public | + | 어떤 클래스의 객체에서든 접근 가능 |
private | - | 이 클래스에서 생성된 객체들만 접근 가능 |
protected | # | 클래스와 동일 패키지 또는 상속 관계에 있는 하위 클래스의 객체들만 접근 가능 |
package | ~ | 동일 패키지에 있는 클래스의 객체들만 접근 가능 |
표기 방법 | |
---|---|
속성 | [+|-|#|~]이름:타입[다중성 정보][=초기값] |
연산 | [+|-|#|~]이름(인자1:타입1, ..., 인자n:타입n)반환 타입 |
1.3 클래스 다이어그램
1.3.1 클래스
Course |
---|
id name numOfStudents |
addStudent() deleteStudent() |
Course |
---|
-id: String -name: String -numOfStudents: Integer |
+addStudent(student: Student): void deleteStudent(id: Integer): void |
분석 단계 클래스
설계 단계 클래스
1.3 클래스 다이어그램
1.3.2 관계
관계 | 설명 |
---|---|
연관 관계(association) | - 클래스들이 개념상 서로 연결되었음을 나타냄 - 한 클래스가 다른 클래스에서 제공하는 기능을 사용하는 상황일 때 표시 - 실선이나 화살표로 표시 |
일반화 관계(generalization) | - 상속 관계 - 한 클래스가 다른 클래스를 포함하는 상위 개념일 때 - IS-A 관계 - 속이 빈 화살표로 표시 |
집합 관계 (composition, aggregation) |
- 클래스들 사이의 전체 또는 부분 같은 관계 - 집약(aggregation), 합성(composition) 관계 존재 |
의존 관계(dependency) | - 연관 관계와 같이 한 클래스가 다른 클래스에서 제공하는 기능을 사용할 때 - 두 클래스의 관계가 한 메서드를 실행하는 동안과 같은, 매우 짧은 시간만 유지 - 점선 화살표로 표시 |
실체화 관계(realization) | - 책임들의 집합인 인터페이스와 이 책임들을 실제로 실현한 클래스들 사이의 관계 - 빈 삼각형, 점선으로 표시 |
1.3 클래스 다이어그램
1.3.2 관계 - 연관 관계
Professor
Student
상담한다
-advisor
-student
연관 관계의 역할 이름은 연관된 클래스의 객체들이 서로를 참조할 수 있는 속성의 이름으로 활용할 수 있다
- 양방향 관계는 화살표 사용 안함
- 두 클래스 사이의 선에 숫자가 없으면 일대일 관계
1.3 클래스 다이어그램
1.3.2 관계 - 연관 관계
다중성 - 연관된 객체 수를 명시
다중성 표기 | 의미 |
---|---|
1 | 엄밀하게 1 |
* | 0 또는 그 이상 |
0..* | 0 또는 그 이상 |
1..* | 1 이상 |
0..1 | 0 또는 1 |
2..5 | 2 또는 3 또는 4 또는 5 |
1, 2, 6 | 1 또는 2 또는 6 |
1, 3..5 | 1 또는 3 또는 4 또는 5 |
1.3 클래스 다이어그램
1.3.2 관계 - 연관 관계
연관 클래스 - 연관 관계에 추가할 속성이나 행위가 있을 때 사용
Student
Course
수강하다
1..*
1..*
Transcript
Student
Course
1..*
1..*
Transcript
연관 클래스를 일반 클래스로 변환한 예
1.3 클래스 다이어그램
1.3.2 관계 - 연관 관계
재귀적 연관 관계
직원
0..*
0..1
-사원
-관리자
{계층}
1.3 클래스 다이어그램
1.3.2 관계 - 일반화 관계
- 한 클래스가 다른 클래스를 포함하는 상위 개념일 때 두 클래스 사이에 일반화 관계가 존재
- 자식 클래스는 부모 클래스로부터 속성과 연산을 물려 받음
- 상속 관계 - is a kind of
- 추상 클래스는 이탤릭체 또는 스테레오 타입('<<', '>>')으로 표시
가전 제품
세탁기
TV
식기세척기
부모 클래스
(슈퍼 클래스)
자식 클래스
(서브 클래스)
1.3 클래스 다이어그램
1.3.2 관계 - 집합 관계
- UML 연관 관계의 특별 경우로 전체와 부분의 관계를 명확하게 명시하고자 할 때 사용
- 집약(aggregation), 합성(composition) 두 종류 존재
집약관계
- 한 객체가 다른 객체를 포함
- '전체', '부분'과의 관계
- 전체를 가리키는 방향에 빈 마름모로 표시
- 전체 객체가 메모리에서 사라져도 부분 객체는 사라지지 않음
합성관계
- 부분 객체가 전체 객체에 속하는 관계
- 전체를 가리키는 방향에 채워진 마름모로 표시
- 전체 객체가 메모리에서 사라지면 부분 객체도 사라짐
- 공유할 수 있는 객체를 사용할 경우 집약관계
1.3 클래스 다이어그램
1.3.2 관계 - 집합 관계
전체
부분
전체
부분
집약
- 전체 객체와 부분 객체의 생명 주기가 다르다.
- 부분 객체를 여러 전체 객체가 공유할 수 있다.
합성
- 전체 객체가 없어지면 부분 객체도 없어진다.
- 부분 객체를 여러 전체 객체가 공유할 수 있다.
1.3 클래스 다이어그램
1.3.2 관계 - 의존 관계
- 연관 관계는 오랜 시간 동안 같이할 객체와의 관계
person
car
-owns
- 의존 관계는 짧은 시간 동안 같이할 객체와의 관계
person
car
-owns
gas pump
1.3 클래스 다이어그램
1.3.2 관계 - 인터페이스와 실체화 관계
- 인터페이스란 책임이다.
- 책임 - 객체가 할 일 or 할 수 있는 일
- 객체가 외부에 제공하는 서비스나 기능
- 공통되는 능력을 대표
- 빈 삼각형, 점섬으로 표현
- 실체화 관계 'can do this 관계'
plane
bird
<<interface>>
Flyable
plane
bird
Flyable
+fly()
JAVA 객체 지향 디자인패턴 - 객체지향 모델링
By Sungbin, Song
JAVA 객체 지향 디자인패턴 - 객체지향 모델링
- 194