public class User {
private int id;
private String name;
public Todo getTodo() {
// 투두리스트를 확인한다.
return null;
}
public void write(String text) {
// 투두리스트에 글을 적는다.
}
}
+ : Public
- : Private
# : Protected
- 접근 제어자 이름 : 타입 = 기본 값
- 기본 값 생략 가능
- title : String = ""
- 접근제어자 이름(파라미터 속성): 리턴값
- void 리턴 값은 생략 가능
- + setTitle(String)
- + getTitle(): String
// Java 코드 입니다.
public interface Shape {
public double area;
}
public class Math {
public static final double PI = 3.14;
public static double cos(double theta) {
// Cosine 계산...
return 0.0
}
}
// Java 코드 입니다.
public abstract class User {
public abstract void work();
}
부모(슈퍼) 클래스와 자식(서브) 클래스 간의 상속 관계 (Inheritance) 를 나타냅니다.
부모 클래스 : 자식 클래스를 일반화한(Generalize) 것
자식 클래스 : 부모 클래스를 구체화한(Spectialize) 것
IS - A 관계
상속 : 부모 클래스의 필드 및 메소드를 구체화하여 사용하며, 필드 및 메소드를 추가하거나 필요에 따라 메소드를 재정의하여(overriding) 사용합니다.
부모 클래스가 추상 클래스인 경우는 추상 메소드를 반드시 오버라이딩 해야합니다.
// User
public class User {
private int id;
private String name;
public Todo getTodo() {
// 투두리스트를 확인한다.
return null;
}
public void write(String text) {
// 투두리스트에 글을 적는다.
}
}
// 자바에서는 extends 키워드를 사용해 상속을 구현합니다.
// Student
public class Student extends User {
public void study() {
// 공부한다.
}
}
// Teacher
public class Teacher extends User {
public void teach() {
// 가르친다.
}
}
public interface Shape {
public double area;
public abstract double calcArea();
}
// 자바에서는 implements 키워드를 사용하여 인터페이스를 구현합니다.
public class Circle implements Shape {
@Override
public double calcArea() {
// 면적 계산
return area;
}
}
클래스 사이를 점선과 참조할 클래스에 화살표를 선으로 그려 표현합니다.
참조의 형태는 아래와 같습니다.
메서드의 호출이 끝나면 의존 관계의 클래스와 관계가 끝이 납니다.
다이어 그램은 위에 그려진 어떤 형태로도 모두 가능합니다.
예제 코드
// 자바에서 참조하는 형태에 따른 코드입니다.
public class User {
public Todo createTodo() {
// 객체 생성 및 리턴
return new Todo();
}
public void writeTodo(Todo todo) {
// 객체를 매개변수로 받아 사용
Todo todo = todo.getTodo();
}
}
public class User {
private List<Phone> phones;
}
part를 가지는 whole 인스턴스가 part 인스턴스의 전체 수명을 책임집니다.
part 에 해당하는 인스턴스는 공유될 수 없습니다.
Aggregation과 Composition을 UML 툴에서 그린 후 코드를 만들면 똑같은 코드가 생성됩니다.
part 인스턴스의 공유 방지를 위한 Deep Copy
를 구현합니다.
whole 인스턴스가 part 인스턴스의 수명을 책임져야 하므로 whole 클래스의 생성자 또는 기타 메소드 내에서 part 인스턴스를 생성합니다.
외부에서 part 객체를 생성하지 못하도록 whole 클래스에는 part 인스턴스에 대한 setter를 삭제합니다.