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 객체 지향 디자인패턴 - 객체지향 모델링

  • 222