본문바로가기

 UML v1.1 개념-UML의 기본-관계(Relationships)

 UML  2013. 5. 19. 21:05  창조컨서턴트

2.2.         관계(Relationships)

 

 

그림 25 Relationship 구성도

 

2.2.1.     Association (연관)

: 한 사물의 객체가 다른 사물에 대한 객체와 연결되어 있음을 표현한다.

n  Association은 구조적 관계를 표현한다.

n  두 클래스가 서로 Association이 있다면 한쪽 객체에서 다른 객체를 참조 할 수 있음을 의미한다.

n  Association 관계의 본질을 설명하기 위해 이름을 사용한다.

       의미상 모호함을 없애기 위해 이름에 방향을 표시 할 수 있다.

       Association의 의미가 명확할 경우는 보통 역할 명을 생략하지만, 한 쌍의 클래스에 두개 이상의 Association이 있는 경우에는 반드시 역할 명을 표시한다.

       Association에 연결된 클래스는 역할 명(Role name)을 가질 수 있다.

       Association은 방향성을 갖는다.

-        방향성은 화살표로 표현한다.

-        방향성이 표시되지 않은 것은 양방향을 의미한다.

       Association은 다중성(Multiplicity)를 갖는다.

-        다중성은 숫자로 표현한다.

-        특정 개수가 두 개 이상일 때에는 ‘,.’로 분리한다.

-        연속적인 숫자는 ‘..’을 사용하여 표시한다.

-        ‘*’문자는 다수임을 의미한다.

-        다중성을 표시하지 않은 것은 1을 의미한다.

n  표기법

그림 26 Association

 

n  Example 1

       Class Diagram

 

그림 27 Bi-Directional Association



       Implement Source

class Company {

    Person employee;    // 직원

    

    Company(Person employee) {

        this.employee = employee;

    }

}

 

class Person {

    Company employer;    // 직장

 

    private String name;

    private int age;

    private String job;

 

    Person(String name, int age, String job, Company employer) {

        this.name = name;

        this.age = age;

        this.job = job;

        this.employer = employer;

    }

}

  

n  Example 2

       Class Diagram

 

그림 28 Directional Association

 

       Implement Source

public class Attacker {

 

             public String field;

             public Attacker(){

             }

 

             public void attack(Gun gun){

             }

}

 

public class Healer{

 

             public String healKinds;

             public int healPower;

             public Attacker patient;

 

             public Healer(){

             }

 

             public void heal(){

             }

}

 


2.2.2.     Aggregation (집합연관)

:  전체와 부분간의 관계를 표현한다.

n  두 클래스가 연관관계를 갖고 있으면서 전체/부분관계를 띄고 있다면 집합연관으로 표기한다.

n  표기법

 

그림 29 Aggregation

 

n  Example 1

       Class Diagram

 

그림 30 Aggregation Example 1



       Implement Source

class Car {

             public Handle m_Handle;

             public Engine m_Engine;

             public Wheel m_Wheel;

 

             Car(){

            this("Benz", "Kia", "Hankook");

             }

             Car(Handle handle, Engine engine, Wheel wheel){

                 this.m_Handle = handle;

                 this.m_Engine = engine;

                 this.m_Wheel = wheel;

             }

}

 

class Handle {

             Handle(){

             }

}

 

class Engine {

             Engine(){

             }

}

 

class Wheel {

             Wheel(){

             }

}

 

n  Example 2

       Class Diagram

 

그림 31 Aggregation Example 2



       Implement Source

public abstract class Terran {

 

             public String name;

             public String healthLvl;

             public int movementSpeed;

 

             public Terran(){

             }

 

             public abstract void move();

 

             public abstract void stop();

 

}

 

public class Squad {

 

             public Terran[] unit;

             public Terran m_Terran;

 

             public Squad(){

             }

 

             public void Squad(Terran[] Unit){

             }

 

}

 

2.2.3.     Composition (합성연관)

: Composition Aggregation의 특수한 경우이며, 전체에 해당하는 클래스가 소멸될 때 부분에 해당하는 클래스도 함께 소멸된다..

n  표기법

 

그림 32 Composition

 

n  Example 1

       Class Diagram

 

그림 33 Composition Example 1



       Implement Source

public class Button {

             public Button(){

             }

}

 

public class Headset {

             public Headset(){

             }

}

 

public class Telephone {

             private Button m_Button;

             private Headset m_Headset;

 

             public Telephone(){

                 m_Button  = new Button();

                 m_Headset = new Headset();

             }

 

}

 

n  Example 2

       Class Diagram

 

그림 34 Composition Example 2



       Implement Source

public class Squad {

 

             public Terran[] unit;

             public Terran m_Terran;

 

             public Squad(){

             }

 

             public void Squad(Terran[] Unit){

             }

 

}

 

public class SquadManager {

 

             public Squad[] Group;

 

             public void SquadManager(){

           Group[0] = new Squad();

Group[1] = new Squad();

Group[2] = new Squad();

 

             }

 

}

 

2.2.4.     Generalization(일반화:상속)

: 일반화 된 개념적인 사물과 특수화된 구체적인 사물과의 관계를 표현한다.

n  자식은 부모의 속성과 행동을 공유한다.

n  부모가 사용되는 곳에는 항상 자식으로 대체 할 수 있으며 그 반대는 성립하지 않는다.

n  표기법

-        속이 빈 화살 촉 모양의 실선으로 표현.

 

그림 35 Generalization

  

n  Example

       Class Diagram

 

그림 36 Generalization Example



       Implement Source

public abstract class Terran {

 

             public String name;

             public String healthLvl;

             public int movementSpeed;

 

             public Terran(){

             }

 

             public abstract void move();

 

             public abstract void stop();

 

}

 

public class Attacker extends Terran {

 

             public String field;

 

             public Attacker(){

             }

 

             public void attack(Gun gun){

             }

 

             public void steamPack(){

             }

}

 

public class Healer extends Terran {

 

             public String healKinds;

             public int healPower;

             public Attacker patient;

 

             public Healer(){

             }

 

             public void heal(){

             }

}

 

 

2.2.5.     Realization(실체화:구현)

: 인터페이스와 실제 구현 클래스들과의 관계

n  Use Case에 정의된 기능을 구현하는 Collaboration과 연결할 때 사용

n  정의된 Interface와 이를 구현하는 class를 연결할 때 사용한다.

n  표기법

 

그림 37 Realization

  

§   Example

-        Class Diagram

 

그림 38 Realization Example



-        Implement Source

Public abstract class Terran {

 

             public String name;

             public String healthLvl;

             public int movementSpeed;

 

             public Terran(){

 

             }

 

             public abstract void move();

 

             public abstract void stop();

 

}

 

public interface IfSteamPack {

 

             public void steamPack();

 

}

 

public class Attacker extends Terran implements IfSteamPack {

 

             public String field;

 

             public Attacker(){

 

             }

 

             public void attack(Gun gun){

 

             }

 

             public void steamPack(){

 

             }

}

 

 

2.1.6.     Dependency (의존)

: 한 클래스가 변경 되었을 때 이것을 사용하는 다른 클래스에 영향이 미치는 관계

n  한 클래스의 메소드가 다른 클래스의 객체를 인자로 받아 그 메소드를 사용한다 ( 가장 일반적 ).

n  한 클래스의 메소드 내부에서 다른 클래스의 객체를 생성하여 그 메소드를 사용한다.

n  다른 클래스의 메소드가 또 다른 클래스의 객체를 반환한다. 이때 이 메소드를 호출하여 반환되는 객체의 메소드를 사용한다.

n  표기법

 

그림 39 Dependency

  

§   Example 1

-        Class Diagram

 

그림 40 Dependency Example 1



-        Implement Source

public class Student {

    private String grade;

 

    public String getGrade() {

        return grade;

    }

 

}

 

public class School {

    public boolean isAdmitable(Student st) {

        // st 객체의 메소드를 호출하여 입학이 가능한지를 체크한다.

        if( st.getGrade().equals("A"))

            return true;

        else

            return false;

    }

}

 

  

§   Example 2

-        Class Diagram

 

그림 41 Dependency Example 2



-        Implement Source

public class Gun {

 

             public String gunKinds;

             public int gunPower;

             public boolean airAttack;

 

             public Gun(){

             }

             public void shoot(){

             }

 

}

 

public class Attacker extends Terran implements IfSteamPack {

 

             public String field;

 

             public Attacker(){

             }

 

             public void attack(Gun gun){

 

             }

 

             public void steamPack(){

             }

}

 

2.2.7.     Association Class (연관관계 Class)

: 연관 자체가 속성을 가질 때 사용한다.

§   표기법

 

그림 42 Association Class

§   Example

-        Class Diagram

 

그림 43 Association Class Example



-        Implement Source

public class Attacker extends{

 

             public String field;

 

             public Attacker(){

             }

 

             public void attack(Gun gun){

             }

}

 

public class Medicine {

 

             public Medicine(){

             }

}

 

public class Healer{

 

             public String healKinds;

             public int healPower;

             public Attacker patient;

             public Medicine m_Medicine;

 

             public Healer(){

             }

 

 

             public void heal(){

             }

}

 

 

2.2.8.     Recursive Association (재귀적 연관관계)

: 자기 자신을 참조할 때 표현.

§   표기법

 

그림 44 Recursive Association

 


그림 45 StarCraft Class Diagram

 

 

2.2.9.     클래스 설계 실습

§   냉장고

§   선풍기

§   빔프로젝터

§   학생

 

2.2.10.   관계 실습 예제

n  강의실에는 의자와 책상들이 있다.

n  강사가 수강생들을 가르친다.

n  학생은 시험으로 평가된다.

n  컴퓨터는 메인보드, 하드디스크, 메모리, CPU로 이루어져 있다.

n  웨이터는 직원이다.

n  컴퓨터는 USB방식을 지원한다.

n  객체지향과목은 UML의 선수 과목이다.

n  회사와 프리랜서는 비즈니스로 이루어진 관계이다.

n  컴퓨터는 책상 위에 있다.