본문 바로가기
컴퓨터과학[4-1]/소프트공학

소프트웨어 공학 - [제13강] 클래스 다이어그램과 객체 다이어그램

by boolean 2017. 1. 4.
728x90

소프트웨어 공학 - [제13강] 클래스 다이어그램과 객체 다이어그램

주요용어

클래스: 동종의 객체들을 추상화한 것으로 객체가 가질 수 있는 속성과 행위로 구성됨

객체: 특정 클래스의 인스탄스

상속 관계: 부모 클래스와 자식 클래스 간의 관계. 자식 클래스들이 가지고 있는 공통점을 추출하여 일반적 부모 클래스를 만들 수 있음

의존 관계: 클래스 간의 단순 사용 관계로 가장 약한 형태의 결합


개요

클래스 다이어그램

클래스들과 클래스들 간의 관계를 보여줌

클래스는 객체에 대한 설계를 제공

UML에서 가장 활용도가 높은 다이어그램으로 실제 동작에 필요한 구성 요소들과 이들의 관계를 보여줌

클래스와 객체

클래스는 객체의 설계도이며 객체는 클래스의 인스턴스

예) BnW3 시리즈는 클래스, 홍길동의 BnW3는 객체

하나의 객체는 세상에서 유일함

클래스로부터 만들어진 객체들은 시스템 동작 중에 생성되거나 소멸되며, 메시지를 주고받음

클래스는 상태와 동작으로 구성됨

상태는 객체의 속성들이 가지고 있는 정보들로 나타남

실제 구현에서 속성은 변수로 표현됨

예) 자동차의 경우 차량 번호, 색상, 연식, 소유자, 주행 거리 등

동작은 객체가 할 수 있는 기능으로 메소드로 표현됨

예) 자동차의 경우 기어 변속, 가속, 정지, 문 잠그기, 시동 걸기 등

추상화

객체가 가질 수 있는 속성들 중에서 필요한 속성과 메소드만을 추려 구성하는 것

클래스의 설계 목적에 맞는 속성과 메소드를 선택하고 불필요한 것을 제거하는 것

분석이나 설계에서 나오는 모델이란 용어는 추상화된 표현을 의미

캡슐화

객체의 구성 요소들 중에서 필요한 부분만 외부에 노출하는 것

노출 정보를 제외한 내부의 속성과 메소드를 숨기며 내부에 변경이 있더라도 외부에 영향을 주지 않음

정보 은닉이라고도 함


클래스 다이어그램의 기초

클래스의 작성

사각형으로 표현하며 3개 영역으로 나뉨

위에서부터 클래스의 이름, 속성, 메소드

속성이나 메소드를 생략할 수 있음

속성과 메소드의 가시성을 표현해 줄 수 있으며 노트를 사용하여 자세한 설명을 추가할 수 있음

클래스 다이어그램에서의 접근 제어

클래스의 속성

클래스 기호의 두 번째 영역 안에 표기함

연관을 이용하여 속성을 표시해 줄 수도 있음

다이어그램이 복잡해지나 속성의 유형을 자세히 보여줄 수 있음

예) AnotherClass에서 속성으로 MyClass 유형의 yourAttribute를 가질 때

속성의 형식

접근제어 / 이름 : 타입 관계수 = 기본값

속성의 타입은 구현 언어에 종속적이며 ‘=0’ 이나 ‘=null’과 같이 기본값을 지정해 줄 수 있음.

 ‘/’는 유도된 속성을 의미하고 관계수는 배열임을 표시하기 위한 것

유도된 속성

다른 속성들로부터 값이 얻어지는 속성

유도된 속성은 설계 단계에서 나타나며 구현 단계에서는 메소드로 변환됨

관계수(multiplicity)

속성이 배열과 같이 1개 이상의 객체들인 경우를 표현

예) ‘[1..10]’과 같이 표시함

예) ‘[*]’는 0개 이상을 의미

연관을 사용하여 속성을 표현하는 경우는 연관의 양쪽 끝에 관계수를 표시함

예) 위의 예에서 1개의 ShoppingHistory는 0개 이상의 Shopping 객체를 가짐

제약 조건

지켜야 하는 규칙으로 중괄호{ } 안에 텍스트를 표시함

제약 조건을 기술하여 속성의 성질을 상세하게 명시할 수 있음

{ordered} 객체들이 정렬되어 있어야 함

{readOnly} 속성이 상수임

{ordered, unique} 순서 집합

{ordered, not unique} 시퀀스

{not ordered, unique} 집합

{not ordered, not unique} 중복 집합

클래스의 메소드

클래스 기호의 세 번째 영역 안에 표기함

메소드의 형식은 접근제어 이름 (파라미터들) : 타입 {제약사항}

파라미터의 형식은 방향 이름 : 타입 관계수 = 기본값 {제약사항}

파라미터의 방향은 in/out의 구분으로 입력값인지 출력값인지를 구분하기 위한 것이며 메소드의 시그너처만을 표시한다면 파라미터의 이름은 중요하지 않음

정적 요소

속성, 메소드 및 클래스를 정적(static)으로 선언할 수 있음

밑줄을 그어 표시함정적 속성과 메소드는 클래스 정의 영역에 속함

객체에 속하지 않는다는 것

객체의 생성없이 사용할 수 있음

예) 현재 생성된 객체의 수를 세는 정적 메소드


클래스 다이어그램

클래스 다이어그램

클래스 또는 인터페이스의 명세로 클래스의 이름, 속성과 메소드를 정의

하나의 클래스 외에 클래스 간의 관계를 표현해야 함

관계로 상속, 집합체 연관(aggregation), 구성 집합체 연관(composition) 등이 있음

템플릿의 사용은 일반적 클래스로서 재사용성을 높이기 위한 설계 방법

OCL은 UML 요소의 제약 조건을 명시하기 위한 언어로 중괄호{ }나 노트를 사용하여 표시됨

클래스의 기본 관계

클래스 간의 결합도에 따른 관계의 분류

의존 관계(dependency)

클래스 A가 클래스 B의 객체를 사용하는 경우

단순한 사용이나 참조를 의미. 가장 약한 결합으로 일시적 사용임

B를 사용하려면 B에 대하여 알아야 하고

Java에서 클래스 B를 import 해야 함

예) 클래스 A에서 메소드의 파라미터나 지역 변수로 클래스 B를 사용할 때

예) A에서 유틸리티를 제공하는 B를 사용하는 경우

연관(association)

클래스 A의 속성으로 클래스 B를 사용하는 경우

실선 또는 실선의 화살표로 표시하며 화살표가 없다면 양방향을 의미

연관을 구현한 코드

집합체 연관(aggregation)

연관의 강한 형태로, 전체와 부분의 포함 관계

클래스 B가 클래스 A의 객체를 포함하고 있는 경우

부분은 다른 전체에도 포함될 수 있음. 즉 부분이 2개 이상의 전체에 의해 공유될 수 있음

공유 집합체 연관이라고도 하며

전체 쪽에 속이 빈 마름모를 표시

     예) B has a A, 클래스 A의 객체는 B가 아닌 다른 객체에도 포함될 수 있음Java로 구현하면 코드는 일반 연관의 경우와 유사하게 됨

구성 집합체 연관(composition)

집합체 연관보다 강한 포함 관계로 전체와 부분은 생명주기가 같음

부분은 공유되지 않으며 검은 마름모로 표시

일반화

부모와 자식 사이의 상속 관계

특정 클래스가 다른 클래스의 한 종류임을 나타냄

자식 클래스는 부모 클래스의 모든 속성과 메소드를 상속 받음

부모 클래스쪽에 속인 빈 삼각형을 표시

자식 클래스를 파생 클래스 또는 서브 클래스라 하며, 부모 클래스를 기반 클래스 또는 슈퍼 클래스라고도 함

예) A is a kind of B

클래스 관계에 대한 고찰

일반화와 재사용의 관계

자식 클래스는 부모가 가진 속성과 메소드를 상속받기 때문에 상속 관계는 다른 관계에 비해 강한 결합

단순히 코드를 재사용하기 위해 상속 관계를 만들지 말 것

분명히 부모의 한 종류일 때만 자식 클래스로 만들 것

다중 상속

자식 클래스가 2개 이상의 부모로부터 상속받는 경우 문제 발생의 소지가 있음

Java에서는 다중 클래스 상속을 할 수 없으며 다중 인터페이스 상속만 가능함

추상 클래스

추상 메소드를 포함하는 클래스

클래스를 설계하면서 특정 메소드를 정의하고 싶지 않거나, 정의할 수 없을 때 사용

메소드의 시그너처만을 표시하며 이러한 구현이 없는 메소드를 추상 메소드라 함

UML에서는 이탤릭체를 사용하여 추상 메소드나 추상 클래스를 표현함

추상 클래스로부터는 객체를 생성할 수 없으며, 자식 클래스에서 추상 메소드를 구현해 주어야 객체를 생성할 수 있음

인터페이스

추상 메소드들로만 구성된 추상 클래스

스테레오타입 《interface》를 이용하거나 동그라미 모양으로 표시함

추상 클래스와 마찬가지로 객체를 생성할 수 없음

자식 클래스들은 동일한 서비스를 공유하나 다양하게 구현해 줄 수 있음

인터페이스와 이것을 상속받는 클래스 사이에는 구현 관계를 가짐

표기는 상속과 유사하나 점선으로 표현함 또는 동그라미에 실선으로 연결시킴

장점

클래스가 제공하는 서비스와 실제 구현을 분리시킴

인터페이스만 변경되지 않는다면 내부 구현이 바뀌어도 사용하는 클래스에 영향을 주지 않음

템플릿

클래스의 재사용성을 높이기 위해 타입 파라미터를 가지고 있는 클래스

제너릭(generic)이라고도 함

템플릿을 사용하면 클래스를 정의할 때 타입을 미리 정할 필요가 없음

중복 코드를 제거하는 효과

템플릿 클래스를 이용하려면 파라미터 바인딩이 필요함

서브 클래스에 의한 바인딩은 템플릿의 기능을 특정 클래스에 한정시킴


객체 다이어그램

객체 다이어그램

실행 중 특정 시점에서 객체들이 동작하는 상황을 표현

클래스 다이어그램이 표현하는 정적인 구조가 아닌 동적인 상황을 표현

4+1뷰에서 논리적 뷰에 해당

객체

사각형에 객체의 이름을 표기하고 밑줄을 그음

링크

객체 간의 연관 관계를 의미하며 실선으로 연결함

연결된 객체들끼리 메시지를 주고받음

클래스 간에 관계를 맺고 있음을 의미함

객체들은 해당 클래스의 제약 조건을 모두 만족해야 함

상태

속성의 값들로 객체의 상태가 표현됨

특정 순간에 객체가 가지고 있는 속성값들이 객체의 상태가 됨

템플릿에서의 동적 바인딩

객체 다이어그램은 템플릿에 대한 동적 바인딩을 표현

동적 바인딩은 클래스가 아닌 객체로 만들어질 때 타입을 알려주는 것

클래스 다이어그램에서는 표현할 수 없음

01
클래스 또는 객체에 관한 설명으로 잘못된 것은?1 클래스는 동종의 객체들을 추상화한 개념이다.
2 객체의 인스탄스가 클래스이다.
3 클래스를 표현하기 위해 객체들이 가져야 하는 속성과 동작을 기술한다.
4 모든 객체는 유일하게 식별될 수 있다.
정답 | 2
해설 | 클래스의 인스탄스가 객체이다. 세상에 존재하는 모든 객체는 유일하며 동일한 두
객체가 존재할 수 없다.
02
UML 클래스 다이어그램에 관한 설명으로 잘못된 것은 무엇인가?
1 시스템의 정적인 구조를 표현하는 다이어그램이다.
2 클래스들을 나열하고 그들 간의 관계를 표현한다.
3 객체가 가지는 여러 상태와 상태 사이의 전환을 표현한다.
4 4+1 뷰에서 논리 뷰에 속한다.
정답 | 3
해설 | 3의 설명은 객체 다이어그램에 관한 것이다. 논리 뷰는 시스템의 구성 요소들을 추
상적으로 표현하고 이들 간의 관계나 상호작용을 보여주는 것으로 객체 다이어그램, 클래스
다이어그램, 상호작용 다이어그램 등이 논리 뷰에 속한다.
03
다음 그림에서 나타나는 클래스 간의 관계는 무엇인가?
1 전체와 부분 관계 2 인터페이스의 구현 관계
3 일반화(상속) 관계 4 의존 관계
정답 | 3
해설 | 상속 관계는 부모/자식 관계로 자식에서 부모 방향으로 화살표가 향한다.
04
다음 그림으로부터 알 수 있는 사항이 아닌 것은?
1 저자는 여러 블로그 계정을 가지고 있다.
2 블로그 계정은 다른 저자와 공유될 수 있다.
3 집합체 연관을 표현한 것이다.
4 블로그 계정은 저자의 모든 속성을 상속받는다
정답 | 4
해설 | 집합체 연관은 구성 집합체 연관과 달리 부분을 다른 전체와 공유할 수 있다. 상속
관계는 부모 쪽에 속인 빈 삼각형이 있는 선으로 표시된다.
05
클래스와 클래스 간의 관계를 표시할 때 점선의 화살표로 표시되는 것은 어떤 관계
인가?
1 의존 관계 2 연관
3 상속 관계 4 구성 집합체 연관
정답 | 1
해설 | 의존 관계는 단순 사용 관계를 의미한다. 클래스 간의 관계 중 가장 약한 결합이며
일시적인 사용을 표현한다.06
클래스의 재사용성을 높이기 위해 타입 파라미터를 가지고 있는 클래스를 무엇이라
고 하는가?
1 추상 클래스 2 인터페이스
3 집합체 4 템플릿
정답 | 4
해설 | Java 언어에서 List는 동일 유형의 원소들을 저장하고 관리하기 위한 자료 구조이
다. 저장되는 원소의 유형은 상황에 따라 달라지므로 템플릿으로 구현되었다.
정리하기
01
클래스와 객체를 구별하여 설명하라.
클래스는 동종의 객체들을 추상화한 개념이다. 객체는 클래스의 인스탄스로 클래스가 실체
화된 것이다.
02
클래스 간의 관계를 결합의 강도에 따라 구분하여 설명하라.
가장 단순한 관계는 의존 관계로 클래스들 간의 단순 사용 관계이다. 이러한 의존 관계가
보다 강한 형태가 되면 둘 사이에 연관 관계가 있게 되며 한 클래스에서 다른 클래스의 객
체를 속성으로 가지는 경우이다. 연관의 강한 형태가 포함 관계를 표현하는 집합체 연관이
며, 집합체 연관에서 전체와 부분의 생명주기가 일치하면 보다 강하게 구성 집합체 연관이
된다. 가장 결합이 강한 것은 상속 관계로 분명한 부모/자식 관계인 경우에만 사용하는 것
이 좋다.
03
인터페이스는 무엇인가?
추상 메소드들로만 구성되는 추상 클래스이다. Java 언어에서는 public abst-ract 메소드들
과 public static final 데이터로 구성된다. 인터페이스의 자식 클래스들은 동일한 서비스를
공유하지만 각기 다르게 구현해 줄 수 있다.
04
템플릿이란 무엇인가?
타입 파라미터를 가지는 클래스이다. 클래스의 재사용성을 높이기 위해 클래스에서 다루어
야 하는 객체의 타입을 미리 정하지 않고 파라미터로 남겨둔 것이다. 리스트가 대표적인 예
이며 저장할 객체의 타입이 파라미터가 된다.
05
객체 다이어그램은 무엇인가?
클래스 다이어그램과 유사한 형태이며 실행 중 특정 시점에서 객체들 간의 관련성을 보여준
다. 특정 시점에서 시스템의 스냅샷을 보여주는 다이어그램으로 볼 수 있다. 객체 다이어그
램은 클래스 다이어그램에 비해 단순하고 표현력도 제한적이다.
Q1 클래스 또는 객체에 관한 설명으로 잘못된 것은?
  • 1 클래스는 동종의 객체들을 추상화한 개념이다.
  • 2 객체의 인스탄스가 클래스이다.
  • 3 클래스를 표현하기 위해 객체들이 가져야 하는 속성과 동작을 기술한다.
  • 4 모든 객체는 유일하게 식별될 수 있다.
확인
정답 및 해설
정답입니다.
정답 : 2번
클래스의 인스탄스가 객체이다. 세상에 존재하는 모든 객체는 유일하며 동일한 두 객체가 존재할 수 없다. 
Q2 UML 클래스 다이어그램에 관한 설명으로 잘못된 것은 무엇인가?

  • 1 시스템의 정적인 구조를 표현하는 다이어그램이다.
  • 2 클래스들을 나열하고 그들 간의 관계를 표현한다.
  • 3 객체가 가지는 여러 상태와 상태 사이의 전환을 표현한다.
  • 4 4+1 뷰에서 논리 뷰에 속한다.
확인
정답 및 해설
정답입니다.
정답 : 3번
③의 설명은 객체 다이어그램에 관한 것이다. 논리 뷰는 시스템의 구성 요소들을 추상적으로 표현하고 이들 간의 관계나 상호작용을 보여주는 것으로 객체 다이어그램, 클래스 다이어그램, 상호작용 다이어그램 등이 논리 뷰에 속한다. 
Q3 다음 그림으로부터 알 수 있는 사항이 아닌 것은?



  • 1 저자는 여러 블로그 계정을 가지고 있다.
  • 2 블로그 계정은 다른 저자와 공유될 수 있다.
  • 3 집합체 연관을 표현한 것이다.
  • 4 블로그 계정은 저자의 모든 속성을 상속받는다.
확인
정답 및 해설
정답입니다.
정답 : 4번
집합체 연관은 구성 집합체 연관과 달리 부분을 다른 전체와 공유할 수 있다.
상속 관계는 부모 쪽에 속이 빈 삼각형이 있는 선으로 표시된다. 
Q4 클래스와 클래스 간의 관계를 표시할 때 점선의 화살표로 표시되는 것은 어떤 관계인가?

  • 1 의존 관계
  • 2 연관
  • 3 상속 관계
  • 4 구성 집합체 연관
확인
정답 및 해설
정답입니다.
정답 : 1번
의존 관계는 단순 사용 관계를 의미한다.
클래스 간의 관계 중 가장 약한 결합이며 일시적인 사용을 표현한다. 
Q5 클래스의 재사용성을 높이기 위해 타입 파라미터를 가지고 있는 클래스를 무엇이라고 하는가?

  • 1 추상 클래스
  • 2 인터페이스
  • 3 집합체
  • 4 템플릿
확인
정답 및 해설
정답입니다.
정답 : 4번
예를 들어 Java 언어에서 List는 동일 유형의 원소들을 저장하고 관리하기 위한 자료 구조로 원소의 유형은 파라미터로 제공될 수 있다. Java 언어에서는 제네릭이라고 한다. 


댓글