클래스 다이어그램 (23.06.27)

·2023년 6월 27일
0

etc.

목록 보기
4/7
post-thumbnail

📝 클래스 다이어그램

정적(구조) 다이어그램

  • UML모델링에서 가장 일반적으로 사용
  • 시스템의 구조와 구조 간 상호 관계를 나타내며 시스템의 논리적 및 물리적 구성 요소 설계 시 주로 활용

📌 클래스의 표현

📌 접근제한자

기호예약어적용 범위
+public전체
#protected같은 패키지 + 상속 관계
~(default)같은 패키지
-private같은 클래스

📌 클래스 다이어그램 표기 방법

표현법적용 범위예약어
field / method (밑줄)속성, 연산static
FIELD (대문자)속성final
Class / method (기울임)클래스명, 연산abstract

📌 클래스 다이어그램의 관계

💡 연관 관계(Association)

한 클래스가 필드로 다른 클래스를 참조

  • 클래스 간의 관련성을 뜻하는 것으로 메시지 전달의 통로 역할을 함

방향성이 있는 연관 관계

방향성 : 메시지 전달의 방향
-> 반대 방향은 불가능함

연관 관계의 다중성

  • 관계를 맺을 수 있는 실제 상대 객체의 수를 다중성을 통하여 지정 가능
  • 동일한 의미/역할의 복수 개의 객체와의 관계

다중 연관

  • 동일한 클래스 간의 존재하는 복수 개의 연관 관계
  • 다른 의미/역할의 복수 개의 객체와의 관계


💡 의존 관계(Dependency)

(지역 변수, 매개 변수)
두 클래스의 연산 간의 호출 관계

  • 제공자의 변경이 이용자에 영향을 미칠 수 있음
    (대상 클래스의 객체를 전달 받거나, 생성하여 사용하는 것을 의미함)

인터페이스 의존 관계

(다형성, 동적 바인딩)

  • 인터페이스와 인터페이스 이용자 간의 이용 관계를 표현할 때 사용될 수 있음


💡 일반화 관계(Generalization)

(상속)
보다 일반적인 클래스와 보다 구체적인 클래스 간의 관계

  • 한 클래스(상위 클래스)가 다른 클래스(하위 클래스)보다 일반적인 개념/대상임을 의미하는 관계


💡 실체화 관계(Realization)

(인터페이스)
인터페이스에 명세된 기능을 상속받은 클래스에서 구현한 관계


💡 집합 관계(Aggregation)

두 대상 간의 포함(소속) 표현

  • 부분 객체가 다수의 전체 객체에 의해 공유될 수 있음
    -> 전체 객체가 사라져도 부분 객체는 존재한다.
    ex) 생성자에서 참조값을 인자로 받아 멤버 변수를 세팅


💡 합성 관계(Composition)

두 대상 간의 포함(소속) 표현

  • 부분 객체가 오직 하나의 전체 객체에 포함 될 수 있음
    -> 전체 객체가 사라지면 부분 객체도 사라진다.
    ex) 생성자에서 필드에 대한 객체를 생성

🔎 연습 문제

[예제 1]

public class A{
	private B b;
}

public class B{
	private String f1;
	private int f2;
}

[예제 2]

public class Test1{
	private Test2 t2;
    
    public Test3 method1(){
		Test3 t3 = new Test3();
        return t3;
    }
}

public class Test2{
	private int f1;
}

public class Test3{
	private String str;
    
    public String getStr(){
    	return str;
    }
    
    public void setStr(String str){
    	this.str = str;
    }
}

[예제 3]

public abstract class Parent{
	public void parentMethod(){}
    protected abstract void print();
}

public class Child extends Parent{
	private String name;
    
    public void childMethod(){};
    protected void print(){...}; // 오버라이딩
}

[예제 4]

public abstract class Shape{
	public void draw(){};
    public void erase(){};
    public int getLength(){
    	return gl;
    }
    
	protected abstract double getArea();
}
    
public class Triangle extends Shape implements Resizable{
	public boolean isEquilateral(){};
    protected double getArea(){};
    public void resize(){};
}
    
public abstract class Resizable{
	public void resize();
}
    
public class Rectangle extends shape implements Resizable{
	public boolean isSquare(){};
    public void resize(){};
    protected double getArea(){};
}

[예제 5]

public class ClassRoom{
	private Student std;
    
    public ClassRoom(Student std){
    	this.std = std;
    }
}

public class Student{
	private String name;
    private int age;
}

[예제 6]

public class Library{
	private Book book;
    
    public Library(){
    	this.book = new Book();
    }
}

public class Book{
	private String title;
    private String author;
}

[예제 7]

public class Shop{
	private Product product;
    private Employee emp;
    
    public Shop(Product p){
    	this.product = p;
        this.emp = new Employee();
    }
}

public class Employee{
	private String name;
}

public class Product{
	private String pName;
    private int price;
}

[예제 8]

public abstract class Coffee{
	public String beans;
}

public class CafeLatte extends Coffee{
	private String temperature;
    private int price;
   
	public void drink(){
    	Option option = new Option();
    }
}

public class Option{
	private int shot;
    private String ice;
    private int syrup;
}

public class Cafe{
	private String name;
    private String address;
    private CafeLatte latte;
    
    public Cafe(CafeLatte latte){
    	this.latte = latte;
    }
}

profile
풀스택 개발자 기록집 📁

0개의 댓글