반응형

Intro

안녕하세요. 이번에는 클래스 다이어그램 작성 방법에 대해 이야기하려고 합니다. 클래스 다이어그램은 소프트웨어 개발에서 중요한 시각적 도구로서 코드를 이해하고 설계하는 데 도움이 되는 매우 유용한 도구입니다. 

클래스 다이어그램

클래스 다이어그램(Class Diagram)

  • 시간에 따라 변하지 않는 시스템의 정적인 면을 보여주는 대표적인 UML 구조 다이어그램
  • 시스템의 일부 또는 전체의 구조를 나타낼 수 있다.
  • 의존 관계를 명확히 보게 해주며, 순환 의존이 발생하는 지점을 찾아내서 어떻게 순환고리를 깰 수 있을지 결정할 수 있게 해 준다.

클래스 구성

접근 제어자 리스트

  • Attribute와 Method 앞의 기호가 접근 제어자이다.
접근 제어자 표시 설명
private - 이 클래스에서 생성된 객체만 접근 가능
public + 어떤 클래스의 객체에서든 접근 가능
protected # 이 클래스와 상속 관계에 있는 하위 클래스의 객체들만 접근 가능
pakage ~ 동일 패키지에 있는 클래스의 객체들만 접근 가능

클래스 다이어그램 관계 표현

UML 표기

  1. 일반화 (Generalization)
  • 일반화는 일반적으로 상속 관계를 표시할 때 표기 (Is -A 관계)

Class ParentA(){
	//부모클래스
}
Class ChildB():ParentA
{
	//자식클래스B
}

Class ChildC():ParentA
{
	//자식클래스C
}

2. 실체화(Realization)

  • 실체화는 Interface를 자식 클래스에서 실제로 구현

보통 Interface는 클래스 이름에 I를 붙힘

interface ITest{ //인터페이스
public:
	public void DeviceSearch();
    public void DeviceManager();
    public void OpenDevice();
    public void CloseDevice();
}

public Test1 : ITest//인터페이스를 상속받으면 전부 구현 해야 됨
{
    public override void DeviceSearch()
    {
      Console.WriteLine("DeviceSearch");
    }
    public override void DeviceManager()
    {
      Console.WriteLine("DeviceManager");
    }
    public override void OpenDevice()
    {
      Console.WriteLine("OpenDevice");
    }
    public override void CloseDevice()
    {
      Console.WriteLine("CloseDevice");
    }


}

3. 의존 (Dependency)

  • 의존관계는 클래스 간 참조가 일어남을 말함
  • 메서드 내에서 다른 클래스의 객체를 생성하거나 사용을 말함

public class User
{

  private String name;
  privateint age;
  public String Name
  {
    get
    {
      return name;
    }
    set
    {
      name = value;
    }
  }
public int Age
  {
    get
    {
      return age;
    }
    set
    {
      age= value;
    }
  }

}

public class Board
{
  private String name;
  private int age;
  
  User user = new User();
  user.Name = "박순영";
  user.Age = 19;

}

4. 연관( Association , Directed Association)

  • 클래스들이 개념상 서로 연결되었음을 나타냄. 보통은 한 클래스가 다른 클래스에서 제공하는 기능을 사용하는 상황일 때 표시
  • 연관 관계의 숫자 표현

– 1 - 1개의 표현

– * - 0 ~ n 개의 표현

– n... m : n부터 m까지 연관관계를 맺음

4.1 일반 연관(Association)

  • 다른 객체의 참조를 가지는 필드를 의미

public class User
{

  private String name;
  private int age;
  private Board board;
  public String Name
  {
    get
    {
      return name;
    }
    set
    {
      name = value;
    }
  }
public int Age
  {
    get
    {
      return age;
    }
    set
    {
      age= value;
    }
  }

}



public class Board
{
  private String name;
  private int age;
  private List<user> users;
  
  public void Open()
  {
    ///
  }

}

4.2 직접 연관 (Directed Association)

  • 직접 연관 관계는 방향성을 갖는데, 방향성으로 참조하는 쪽과 참조당하는 쪽을 구분

public class User
{

  private String name;
  private int age;
  public String Name
  {
    get
    {
      return name;
    }
    set
    {
      name = value;
    }
  }
public int Age
  {
    get
    {
      return age;
    }
    set
    {
      age= value;
    }
  }

}


public class Board
{
  private String name;
  private int age;
  private List<user> users;
  
  public void Open()
  {
    ///
  }

}

 

5.1 집합 (Aggregation)

  • 집약 관계는 한 객체가 다른 객체를 포함하는 것을 나타냄
  • 부분 객체를 다른 객체와 공유 가능
  • 전체 객체의 라이프타임과 부분 객체의 라이프타임은 독립적

5.2 집합 연관

  • 클래스 다이어그램에서 클래스 간의 관계 중 하나로, 한 클래스의 인스턴스가 다른 클래스의 인스턴스들과 집합 형태의 관계를 가지는 것을 의미
  • 한 클래스가 다른 클래스의 객체들을 소유하거나 포함하는 관계
class CPU
{
    public string Model { get; private set; }

    public CPU(string model)
    {
        Model = model;
    }
}

class MainBoard
{

    public string Model { get; private set; }

    public MainBoard(string model)
    {
        Model = model;
    }



}


// 컴퓨터(Mainboard) 클래스
class Computer
{
    private list<Mainboard> mb;
    private list<CPU> cpu;

    purlic Computer(list<Mainboard> MB, list<CPU> CPU)
  {
      mb = MB;
      cpu = CPU
  }

  
    
}

6.1 합성(Composition)

  • 부분 객체가 전체 객체에 속하는 관계
  • 전체 객체가 사라지면 부분 객체도 사라짐
  • 부분 객체를 다른 객체와 공유 불가
  • 부분 객체의 라이프타임은 전체 객체의 라이프타임에 의존

public class Computer
{
  private Mainboard mb;
  private CPU cpu;
  purlic Computer()
  {
      mb = new MainBoard();
      cpu = new CPU();
  }
}

6.2 복합 연관

  • 클래스 간의 관계 중 하나로, 한 클래스의 인스턴스가 다른 클래스의 인스턴스들과 부분-전체 관계를 가지는 것을 의미
  • 한 클래스의 객체가 다른 클래스의 객체들을 구성하는 관계를 나타냅니다. 이렇게 복합 연관을 가지는 클래스들은 하나의 객체가 여러 개의 다른 객체들을 포함하고 있으며, 이들 객체들은 함께 묶여서 하나의 논리적인 단위를 이룸

마무리

소프트웨어 개발은 협업과 이해를 기반으로 하기 때문에 명확하고 효과적인 클래스 다이어그램 작성은 개발자들 사이의 원활한 소통을 도와줍니다. 이상입니다.

반응형

+ Recent posts