234. 클래스 간 관계 - 일반화(상속), 실체화(인터페이스), 의존, 연관, 집합, 합성 UML 다이어그램 객체지향 결합도

핵심 인사이트: (233번 클래스 다이어그램 화살표 심화) 칠판에 [사람], [차], [바퀴] 네모 상자를 그렸다. 상자들끼리 짝대기를 이어야 하는데, 그냥 다 똑같은 선으로 그어놓으면 개발자가 "차가 사람을 먹는 건가?" 하고 혼동한다. "야! 관계마다 화살표 모양(머리통)을 칼같이 다르게 그려야지!! [사람]이 [동물]의 자식이면 '비어있는 세모 화살표(일반화/상속)'! [차]가 [기름]을 1초만 빨아먹고 버리면 '점선 화살표(의존)'! [차]가 [바퀴]를 평생 달고 다니면 '실선에 까만 마름모(합성)'!! 이 6가지 화살표 꼬라지만 슥 봐도, 객체들끼리 끈끈하게 평생 같이 가는지, 아니면 일회용으로 쓰다 버리는지 '결합도'가 한 방에 파악되잖아!!" 객체들의 사랑, 배신, 상속 관계를 정의하는 UML 화살표 문법 6형제다.

Ⅰ. 화살표 모양이 코드(Java)를 결정한다

UML 클래스 다이어그램에서 클래스 상자들을 잇는 6가지 화살표는 단순히 예쁘라고 그리는 게 아닙니다. 화살표 머리 모양에 따라 개발자가 치는 자바 코드가 완전히 달라지는 절대 문법입니다. (정보처리기사 100% 출제 영역)

Ⅱ. 6대 화살표 완전 정복 🌟 무조건 암기 🌟

1. 일반화 관계 (Generalization / 상속 Inheritance) 🌟

  • 개념: "A는 B의 한 종류다 (is-a)". 자식 클래스가 부모 클래스의 유산을 물려받는 관계입니다.
  • 그림 모양: 자식에서 부모를 향해 쏘는 실선 + 빈 세모(△) 화살표
  • 예시: [사자] ──▷ [동물] (사자는 동물의 한 종류이므로 동물 상자를 향해 빈 세모를 쏩니다.)

2. 실체화 관계 (Realization / 인터페이스 구현)

  • 개념: "네가 이 껍데기(Interface)의 행동을 실제로 구현해라(can-do)". 날 수 있다는 자격증(인터페이스)을 비둘기가 따서 진짜로 날아다니는 기능을 코딩하는 것입니다.
  • 그림 모양: 구현체에서 인터페이스를 향해 쏘는 점선 + 빈 세모(△) 화살표 (상속과 똑같이 빈 세모지만, 껍데기(가짜)니까 선이 점선입니다!)
  • 예시: [비둘기] - - -▷ [날수있는기능(인터페이스)]

3. 연관 관계 (Association) - "우린 평등한 깐부"

  • 개념: "A가 B를 가진다 (has-a)". 서로 평등하게 연결되어 오랫동안 지속해서 참조하는 관계입니다.
  • 그림 모양: 실선 + 단순 V자 화살표(또는 화살표 없는 실선)
  • 예시: [선생님] ─── [학생] (서로가 서로를 참조 멤버 변수로 가지고 있습니다.)

4. 의존 관계 (Dependency) - "1초 쓰고 버리는 일회용 도구" 🌟

  • 개념: "A가 B를 찰나의 순간에만 쓴다 (use-a)". 평생 가지는 게 아니라, 어떤 함수를 돌릴 때 잠깐 매개변수(파라미터)나 지역 변수로 쓱 가져다 쓰고 함수가 끝나면 가차 없이 뇌에서 지워버리는 쿨한 관계입니다.
  • 그림 모양: 쓰는 놈에서 쓰이는 놈을 향해 쏘는 점선 + 단순 V자 화살표
  • 예시: [자동차] - - - > [주유기] (자동차가 평생 주유기를 달고 다니진 않습니다. 주유소에 들렀을 때 주유하기() 함수 안에서 잠깐 1분 쓰고 버립니다.)

5. 집합 관계 (Aggregation) - "빈 마름모, 이혼 가능한 부부"

  • 개념: "전체와 부분"의 관계지만, **부분이 없어도 전체가 살아있고, 전체가 죽어도 부분은 살아남는 '약한 결합'**입니다. (빈 마름모 = 속이 비어서 연결이 약함)
  • 그림 모양: 부분에서 전체 쪽으로 그어진 실선 + 속이 빈 마름모(◇)
  • 예시: [컴퓨터] ◇── [프린터] (컴퓨터를 부숴서 버려도, 옆에 연결된 프린터는 멀쩡히 살아남아 다른 컴퓨터에 꽂아 쓸 수 있습니다.)

6. 합성 관계 (Composition) - "까만 마름모, 운명 공동체" 🌟

  • 개념: "전체와 부분"의 관계이면서, **전체가 죽으면 그 안의 부분 객체도 도미노처럼 다 같이 박살 나서 죽어버리는 '미치도록 강한 결합'**입니다. (까만 마름모 = 속이 까맣게 꽉 찬 독한 결합)
  • 그림 모양: 부분에서 전체 쪽으로 그어진 실선 + 속이 꽉 찬 까만 마름모(◆)
  • 예시: [사람] ◆── [심장] (사람이 늙어 죽으면 심장도 같이 썩어 없어집니다. 심장 혼자 살아남을 수 없는 절대적 샴쌍둥이 관계입니다.)

📢 섹션 요약 비유: 클래스 간의 UML 화살표는 인간관계의 강도를 그리는 기호입니다. 1. 길을 가다 우산이 없어 남의 우산을 잠깐 1분만 빌려 쓰고 돌려주는 사이(쿨가이 일회용)는 점선 화살표인 '의존(Dependency)' 관계입니다. 2. 평소에 밥을 같이 먹는 동네 친구 사이는 실선인 '연관(Association)' 관계입니다. 3. 회사를 다니며 사장님 차에 타고 있는 운전기사의 관계는 빈 마름모인 **'집합(Aggregation)'**입니다. 사장님이 죽어서 회사가 망해도 운전기사는 자기 집으로 돌아가 살아남아 딴 회사로 이직합니다(약한 소유). 4. 내 몸과 내 팔, 다리의 관계는 까만 마름모인 **'합성(Composition)'**입니다. 내가 죽으면 내 팔다리도 무덤에서 다 같이 썩어 없어지는 피 터지는 운명 공동체입니다(강한 소유). 5. 아버지가 죽으면서 아들에게 100억을 남겨주어 아들이 아버지를 이어받는 건 빈 세모 화살표인 **'일반화(상속)'**입니다. 화살표 머리통(세모냐, 마름모냐) 하나만 딱 보면, 객체들이 얼마나 지독하게 얽혀있는지 결합도(Coupling)를 0.1초 만에 파악할 수 있는 개발자들의 그림 언어입니다.