정적(구조) 다이어그램
- UML모델링에서 가장 일반적으로 사용
- 시스템의 구조와 구조 간 상호 관계를 나타내며 시스템의 논리적 및 물리적 구성 요소 설계 시 주로 활용
기호 | 예약어 | 적용 범위 |
---|---|---|
+ | public | 전체 |
# | protected | 같은 패키지 + 상속 관계 |
~ | (default) | 같은 패키지 |
- | private | 같은 클래스 |
표현법 | 적용 범위 | 예약어 |
---|---|---|
field / method (밑줄) | 속성, 연산 | static |
FIELD (대문자) | 속성 | final |
Class / method (기울임) | 클래스명, 연산 | abstract |
한 클래스가 필드로 다른 클래스를 참조
- 클래스 간의 관련성을 뜻하는 것으로 메시지 전달의 통로 역할을 함
방향성 : 메시지 전달의 방향
-> 반대 방향은 불가능함
(지역 변수, 매개 변수)
두 클래스의 연산 간의 호출 관계
- 제공자의 변경이 이용자에 영향을 미칠 수 있음
(대상 클래스의 객체를 전달 받거나, 생성하여 사용하는 것을 의미함)
(다형성, 동적 바인딩)
(상속)
보다 일반적인 클래스와 보다 구체적인 클래스 간의 관계
- 한 클래스(상위 클래스)가 다른 클래스(하위 클래스)보다 일반적인 개념/대상임을 의미하는 관계
(인터페이스)
인터페이스에 명세된 기능을 상속받은 클래스에서 구현한 관계
두 대상 간의 포함(소속) 표현
- 부분 객체가 다수의 전체 객체에 의해 공유될 수 있음
-> 전체 객체가 사라져도 부분 객체는 존재한다.
ex) 생성자에서 참조값을 인자로 받아 멤버 변수를 세팅
두 대상 간의 포함(소속) 표현
- 부분 객체가 오직 하나의 전체 객체에 포함 될 수 있음
-> 전체 객체가 사라지면 부분 객체도 사라진다.
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;
}
}