4장 클래스 다이어그램

원래벌레·2022년 4월 17일
0

💎 소프트웨어의 구축 순서

  • 바깥쪽에서 안쪽으로 구축을 한다.

💍 바깥쪽

  • 유스케이스 다이어그램 즉 블랙박스로 찍은듯한 구조를 말하는 것이다.
    이것은 시스템의 기능적인 부분을 말하는 것이다.

💍 안쪽

  • 그 시스템 내부가 어떤 요소들로 구성이 되는지, 그리고 그 요소들 간의 관계는 어떻게 맺어 줄 것인지.

  • 기능을 제공할 시스템의 내부 구조와 요소를 모델링한다.
    -> UML 클래스 다이어그램
    1) 클래스 후보 선정
    2) 클래스의 속성과 오퍼레이션
    3) 클래스 간의 관계

💎 클래스 다이어그램의 요소

1) 클래스
2) 속성

3) 오퍼레이션

  • 정형화된 오퍼레이션의 원형
    1) 오퍼레이션의 이름 + 입출력 매개 변수의 리스트
    ex) operationName( parameter:parameter Type, ...) : returnType

  • UML 표준에서의 오퍼레이션의 표기
    1) 매개변수 앞에 in과 out을 이용하여 방향을 표시
    2) 입출력을 같이 사용하는 매개변수의 경우 inout으로 표시
    3) in 또는 out이 생략 -> 입력매개변수
    ex) getNae(out name:String)

  • 오퍼레이션을 정하는 방법
    1) 대부분의 속성은 get과 set이 필요하다
    2) 읽기 전용 속성은 set 오퍼레이션이 필요하지 않다
    3) 일부 속성은 입력 매개 변수가 필요하다
    4) 어떤 오페레이션은 다른 객체와 메시지 호출을 이용하여 통신할 필요 있음
    ex) Person 클래스에서의 직업이 바뀌면 호출하는 changeJob(newJob : Job, effectiveDate : Date) 오퍼레이션 이경우 Organization 통신을 해야한다.

  • 오버로딩된 오퍼레이션
    -클래스 다이어그램에서 이름이 같은 오퍼레이션 하지만 매개변수는 다르다
    -이경우 함수 원형이 전혀 전혀 다르다. 함수 원형이 전부다름
    ex)markDown(discountPct)과 markDown() 서로 다르다 상이하다.
    why? 하는 일이 달라. markDown(dscountPct) 이 경우에는 어떤 할인율에 대해서 깍아주는거라면 markDown() 디폴트이기 때문에 어떤 기본적인 할인율이 적용이 되는 그런 식이ㅏㄷ.

4) 연관관계

-관계에 이름을 붙이고
-관계의 방향을 화살표로 표시하며
-관계 끝에는 역할을 표시

  • 연관 관계의 레이블
    1) 연관 관계의 이름 : 동사나 동사구로 표현 한다. ex) work for
    2) 연관 관계의 역할 이름 : 연관 있는 다른 클래스를 부르는 별칭이다.
  • 다중 연관 관계 : 다대다 관계 이경우 UML 표현
    1) ex) Passenger - Booking - SpecificFlight
    2) 이런 경우 Passenger와 SpecificFlight에 대해서 다른 한가지의 클래스가 튀어 나온다. 그 클래스가 Booking 클래스이다.

5) 상속(일반화) : 화살표로 표시한다.

6) 가시성

1) 관용 표현, 즉 생략 가능
속성이 private인 경우 생략가능
오퍼레이션이 public인 경우 생략가능
2) # 이거는 protected 표현임

7) 다중도 : 연관 관계를 맺을 때 인스턴스 몇 개가 참여하는 지를 나타냄

  • 두 클래스가 서로 어떻게 관련이 있는지를 나타내는데 사용

  • 표기법
    1) 두 클래스 사이에 선분으로 표시를 한다.
    2) 선분 위쪽 각각 끝에 다중도를 표시한다.
    3) 이 선분에서 위쪽 가운데는 관계에 대한 이름
    4) 선분 아래쪽에 클래스에 맞닿는 부분에는 그 관계에 대한 역할을 작성한다.

8) 제약사항 : 연관관계 위에 적힌다. { constarint } 이런식으로

9) 전체/부분 관계

1) 합성관계 : 검은색 다이아몬드( 합성관계) : 클래스 A가 클래스 B로 이루어짐. 클래스 A가 소멸 시 클래스 B도 같이 소멸됨
2) 집합관계 : 흰색 다이아몬드( 집환관계): 클래스 A와 B가 서로 독립적으로 존재 가능한 관계이다.

💎 추상 오퍼레이션과 추상 클래스

  • UML에서의 표현은 그냥 클래스면 Polygon {abstract} 이렇게 하고
    오퍼레이션이면 getArea(out area:Area){abstract}

  • 추상 클래스는 상속을 위해서 존재를 합니다. 인스턴스가 없어요 이녀석은, 그래서 이 녀석은 그냥 뭐 몇가지의 메소드만 가지고 있는 경우가 많습니다. 이 메소드는 서브 클래스들이 공통적으로 가지고 있는 메소드입니다.

  • 추상 오퍼레이션은 구현이 없는 오퍼레이션으로 인터페이스와 기능의 정의만 있고, 실제 구현된 메소드는 없다.

💎 링크

  • 연관관계의 인스턴스가 링크이다.

  • 링크의 방향에 제한을 둘 수 있음
    ex) 캘릭터 또는 다이어리에서 사용되는 Day와 Note 클래스가 있다고 할 때
    특정 Day 인스턴스는 그날과 연관된 Note 인스턴스를 알아낼 필요가 있고, Note 인스턴스는 Day를 알필요가 없다. 이런경우 Day클래스에서 Note 클래스로 화살표가 나간다.

💎 연관 클래스

  • 두 개의 클래스가 다대다로 연관이 되어 있을 때, 그 관계를 통해서 나오는 그 어떠한 데이터가 어느 한 쪽에 위치하기가 애매한 경우에 그 다대다 관계의 클래스를 하나 생성을 하는 것이 연관 클래스이다.

  • ex) 학생 - 강의 이 두 클래스는 다대다 관계로 연관 되어있다. 이 경우 학생이 선택한 강의에 대한 학점 정보를 어느 한쪽의 속성으로 넣기가 애매하다. 이 경우에 이제 연관 클래스에 이 선택된강의 라는 클래스를 만들어서 속성으로 grade를 선언하여, 선택된 각각의 과목에 대한 학점을 이제 선택된 강의 클래스의 객체로서 관리를 한다.

💎 재귀 연관 관계

  • 클래스가 자기 자신과의 연관관계를 맺는 경우
    ex) 수강과목에서 수강과목이 선수과목이 있을 때

💎 일반화 관계

  • 구분자
    -슈퍼클래스를 구체화시킬 때 기준을 나타내는 레이블
    -슈퍼클래스가 하위클래스로 분할 될 때
    1) 하위 클래스가 중첩 되는지(overlapping)
    2) 하위 클래스가 구분 가능한지(disjoint)
    -하위 클래스가 슈퍼클래스의 객체를 모두 포함하는지 여부
    1) 모든 객체를 다 포함하는지 : completed -> 프로그래밍시 추상화 클래스로 구현
    2) 모든 객체를 다 포함하지 않는지 : incompleted

💎 인터페이스

  • 객체 집합이 가지는 행위를 일부 가시화하여 나타낸 것
    -인터페이스는 클래스와 유사, 인스턴스 변수와 구현된 메소드만 없음

  • UML에서 인터페이스의 표기법
    1) 클래스 박스에 <<interface>> 를 표시하고 제공하는 오퍼레이션 리스트를 적는 법
    2) 작은 원이 그려진 막대사탕 모양에 인터페이스 이름을 붙이는 방법

💎 추가 정보 표현법

1) 제약 ( OCL )
2) 상세문서와 자신만의 다이어그램
3) 노트

💎 클래스다이어그램 작성 순서

1) 클래스 후보 집합을 파악
2) 가장 중요한 클래스부터 속성과 연관관계를 추가한다.
3) 확실한 일반화 관계부터 시작하여 파악
4) 클래스의 주요 임무를 찾아 나열 - 각 클래스에 의해 수행될 기능을 간단히 문장으로 나타내는 것
5) 임무를 기준으로 필요한 오퍼레이션을 결정
6) 전체 수행과정을 다시 되풀이

profile
학습한 내용을 담은 블로그 입니다.

0개의 댓글