πŸ“Œ 클래슀 λ‹€μ΄μ–΄κ·Έλž¨μ˜ 관계 총정리 + μ‹€μ „ 예제 뢄석 (StarCraft 예제둜 λ°°μš°λŠ” 객체 관계)

My Pale Blue DotΒ·2025λ…„ 3μ›” 24일
0

DBMS

λͺ©λ‘ 보기
4/10
post-thumbnail

πŸ“… λ‚ μ§œ

2025λ…„ 3μ›” 24일


πŸ“ ν•™μŠ΅ λ‚΄μš©

이번 κΈ€μ—μ„œλŠ” 클래슀 λ‹€μ΄μ–΄κ·Έλž¨μ—μ„œ 자주 λ“±μž₯ν•˜λŠ” λ‹€μ„― κ°€μ§€ 관계λ₯Ό μ •μ˜ + UML ν‘œκΈ° + Java μ‹€μ „ μ½”λ“œλ‘œ μ •λ¦¬ν–ˆλ‹€.

  • 연관관계 (Association)
  • μ˜μ‘΄κ΄€κ³„ (Dependency)
  • 집약관계 (Aggregation)
  • 포함관계 (Composition)
  • 상속관계 (Inheritance)

1️⃣ 연관관계 (Association)

βœ… κ°œλ…

ν•œ ν΄λž˜μŠ€κ°€ λ‹€λ₯Έ 클래슀λ₯Ό ν•„λ“œλ‘œ μ°Έμ‘°ν•˜μ—¬ 관계λ₯Ό μœ μ§€ν•˜λŠ” ꡬ쑰.
객체가 μƒμ„±λœ 후에도 μ§€μ†μ μœΌλ‘œ μ—°κ²°λ˜μ–΄ 있음.

βœ… UML ν‘œκΈ°

μ‹€μ„  ν™”μ‚΄ν‘œ (β†’), μ–‘λ°©ν–₯은 ↔

βœ… Java 예제: Marine β†’ Gun

public class Marine extends Unit {
    public Gun myGun;

    public void setGun(Gun gun) {
        this.myGun = gun;
    }
}

β†’ Marine이 Gun을 ν•„λ“œλ‘œ 보유 β†’ 연관관계 (has-a 관계)


2️⃣ μ˜μ‘΄κ΄€κ³„ (Dependency)

βœ… κ°œλ…

ν•œ ν΄λž˜μŠ€κ°€ μΌμ‹œμ μœΌλ‘œ λ‹€λ₯Έ 클래슀의 객체λ₯Ό μ‚¬μš©ν•˜λŠ” 관계.
보톡 λ©”μ„œλ“œ νŒŒλΌλ―Έν„°λ‘œ μ „λ‹¬λ˜λ©°, 객체λ₯Ό 직접 μƒμ„±ν•˜κ±°λ‚˜ λ³΄κ΄€ν•˜μ§€ μ•ŠμŒ.

βœ… UML ν‘œκΈ°

점선 ν™”μ‚΄ν‘œ (β†’)

βœ… Java 예제: Medic β†’ Marine (Healing)

public class Medic extends Unit {
    public void Healing(Unit unit) {
        unit.hp += 30;
        System.out.println(unit.type + "을 νšŒλ³΅μ‹œν‚΅λ‹ˆλ‹€");
    }
}

β†’ Medic이 Marine을 μΌμ‹œμ μœΌλ‘œ νŒŒλΌλ―Έν„°λ‘œ λ°›μ•„ μ‚¬μš© β†’ μ˜μ‘΄κ΄€κ³„


3️⃣ 집약관계 (Aggregation)

βœ… κ°œλ…

"전체-λΆ€λΆ„" 관계. λΆ€λΆ„ κ°μ²΄λŠ” 전체에 ν¬ν•¨λ˜μ§€λ§Œ, 생λͺ…μ£ΌκΈ°λ₯Ό κ³΅μœ ν•˜μ§€ μ•ŠμŒ.
전체가 사라져도 λΆ€λΆ„ κ°μ²΄λŠ” λ…λ¦½μ μœΌλ‘œ 쑴재 κ°€λŠ₯.

βœ… UML ν‘œκΈ°

빈 λ§ˆλ¦„λͺ¨ (β—‡)

βœ… Java 예제: Barrack β†’ UnitGenerator

public class Barrack extends Building {
    Map<String, UnitGenerator> generator = new HashMap<>();

    void setGenerator(UnitGenerator gen, String type) {
        generator.put(type, gen);
    }
}

β†’ Barrack은 UnitGeneratorλ₯Ό λ“±λ‘ν•˜μ§€λ§Œ 생λͺ… μ£ΌκΈ°λ₯Ό κ³΅μœ ν•˜μ§„ μ•ŠμŒ β†’ 집약관계


4️⃣ 포함관계 (Composition)

βœ… κ°œλ…

전체가 사라지면 뢀뢄도 ν•¨κ»˜ μ‚¬λΌμ§€λŠ” κ°•ν•œ 생λͺ…μ£ΌκΈ° 곡유 관계.
λΆ€λΆ„ κ°μ²΄λŠ” 전체에 μ™„μ „νžˆ 쒅속됨.

βœ… UML ν‘œκΈ°

검은 λ§ˆλ¦„λͺ¨ (β—†)

βœ… Java 예제: Person β†’ Heart (μ˜ˆμ‹œλ‘œλ§Œ μ„€λͺ…)

class Heart {}

class Person {
    private Heart heart = new Heart(); // 포함관계: Person이 μ—†μœΌλ©΄ Heart도 의미 μ—†μŒ
}

β€» ν˜„μž¬ ν”„λ‘œμ νŠΈμ—λŠ” Composition μ˜ˆμ‹œκ°€ μ§μ ‘μ μœΌλ‘œ μ‘΄μž¬ν•˜μ§„ μ•Šμ§€λ§Œ, μœ„μ™€ 같은 ꡬ쑰가 해당됨


5️⃣ 상속관계 (Inheritance)

βœ… κ°œλ…

μžμ‹ ν΄λž˜μŠ€κ°€ λΆ€λͺ¨ 클래슀의 속성과 λ©”μ„œλ“œλ₯Ό λ¬Όλ €λ°›λŠ” 관계
"is-a 관계"λ₯Ό λ‚˜νƒ€λƒ„

βœ… UML ν‘œκΈ°

빈 μ‚Όκ°ν˜• (β–³) ν™”μ‚΄ν‘œ

βœ… Java 예제

public abstract class Unit {
    public int hp;
    public int amor;
    public String type;
    public abstract void move();
    public abstract void underAttact(int damage);
}

public class Marine extends Unit {
    @Override
    public void move() {
        System.out.println(type + " μ΄λ™ν•©λ‹ˆλ‹€");
    }
}

β†’ Marine, MedicλŠ” Unit을 μƒμ†λ°›μŒ β†’ 상속관계 (is-a)
β†’ Barrack extends Building, Pistol extends Gun, Rifle extends Gun μ—­μ‹œ 상속관계


πŸ“Œ κ²°κ³Ό


πŸ”₯ 클래슀 관계 μš”μ•½ λΉ„κ΅ν‘œ

관계 μœ ν˜•μƒλͺ…μ£ΌκΈ° 곡유UML ν‘œκΈ°μ˜λ―ΈJava ꡬ쑰 μ˜ˆμ‹œ
μ—°κ΄€κ΄€κ³„βŒμ‹€μ„  (β†’/↔)지속적 μ°Έμ‘° (ν•„λ“œλ‘œ μ—°κ²°)Marine β†’ Gun
μ˜μ‘΄κ΄€κ³„βŒμ μ„  ν™”μ‚΄ν‘œ(β†’)μΌμ‹œμ  μ‚¬μš© (λ©”μ„œλ“œ λ‚΄λΆ€)Medic β†’ Marine
μ§‘μ•½κ΄€κ³„βŒβ—‡ 빈 λ§ˆλ¦„λͺ¨μ „체-λΆ€λΆ„ (λŠμŠ¨ν•œ 포함 관계)Barrack β†’ UnitGenerator
ν¬ν•¨κ΄€κ³„βœ…β—† 검은 λ§ˆλ¦„λͺ¨μ „체-λΆ€λΆ„ (κ°•ν•œ μ†Œμœ  관계)Person β†’ Heart (μ˜ˆμ‹œ)
μƒμ†κ΄€κ³„βœ…β–³ 빈 μ‚Όκ°ν˜•κΈ°λŠ₯ λ¬Όλ €λ°›μŒ (is-a 관계)Marine β†’ Unit λ“±

πŸ”— μ°Έκ³  자료


λŠλ‚€ 점

λ‹¨μˆœνžˆ 클래슀 간에 μ—°κ²°λ˜μ–΄ μžˆλ‹€λŠ” 것을 λ„˜μ–΄μ„œ,
"μ–΄λ–€ 생λͺ…μ£ΌκΈ°λ₯Ό κ°€μ§€λŠ”κ°€?", "μ–΄λ–»κ²Œ μ„€κ³„ν–ˆλŠ”κ°€?", "μ–΄λ–€ μ±…μž„μ„ μœ„μž„ν•˜λŠ”κ°€?" λ₯Ό μ€‘μ‹¬μœΌλ‘œ 관계λ₯Ό κ΅¬λΆ„ν•˜λ‹ˆ
객체지ν–₯ 섀계가 ν•œμΈ΅ 더 λͺ…ν™•ν•˜κ²Œ λŠκ»΄μ‘Œλ‹€.

특히 StarCraft 예제λ₯Ό 톡해 UML 관계λ₯Ό μ½”λ“œμ— λ°”λ‘œ λ§€ν•‘ν•΄λ³Ό 수 μžˆμ—ˆλ˜ 점이 정말 μ’‹μ•˜κ³ ,
객체의 독립성 / 결합도 / μœ μ—°μ„± 같은 섀계 μ›μΉ™κΉŒμ§€λ„ μžμ—°μŠ€λŸ½κ²Œ 체득할 수 μžˆμ—ˆλ˜ κΈ°νšŒμ˜€λ‹€.


μš”μ•½ (Summary)

  • 클래슀 λ‹€μ΄μ–΄κ·Έλž¨μ—μ„œμ˜ κ΄€κ³„λŠ” λ‹¨μˆœν•œ 선이 μ•„λ‹ˆλΌ 객체 μ‚¬μ΄μ˜ μ² ν•™κ³Ό μ±…μž„μ˜ 관계이닀.
  • 각각의 κ΄€κ³„λŠ” UML 문법뿐 μ•„λ‹ˆλΌ μžλ°” μ½”λ“œμ™€ 싀무 적용 μ˜ˆμ‹œλ‘œ 이해해야 μ œλŒ€λ‘œ μ“Έ 수 μžˆλ‹€.
  • 이번 예제λ₯Ό 톡해 μ—°κ΄€, 의쑴, μ§‘μ•½, 포함, μƒμ†μ˜ 차이점과 ν‘œν˜„ 방식, 그리고 적용 λ°©λ²•κΉŒμ§€ 정리 μ™„λ£Œ!

profile
Here, My Pale Blue.🌏

0개의 λŒ“κΈ€