← 블로그 목록

소프트웨어 설계를 배우려면 UML보다 먼저 구조를 설명하는 습관부터 익히는 편이 낫다

소프트웨어 설계 입문에서 중요한 것은 다이어그램 도구를 많이 아는 것이 아니라, 시스템의 경계와 책임을 설명하는 습관을 익히는 것이다. UML과 C4 모델은 그 다음에 붙이는 도구에 가깝다.

소프트웨어 설계를 배우려면 UML보다 먼저 구조를 설명하는 습관부터 익히는 편이 낫다

소프트웨어 설계를 배우려면 UML보다 먼저 구조를 설명하는 습관부터 익히는 편이 낫다

소프트웨어 설계를 처음 배우는 사람은 종종 UML부터 외우려 한다. 클래스 다이어그램, 시퀀스 다이어그램, 유스케이스 다이어그램 같은 이름이 먼저 쏟아지기 때문이다. 물론 UML은 중요한 표준이다. OMG는 UML을 소프트웨어와 시스템을 시각화하고 명세하고 문서화하는 표준 언어로 설명한다.

하지만 입문 단계에서 더 먼저 필요한 것은 도형 이름이 아니다. 이 시스템이 어떤 경계를 갖고 있고, 어떤 책임이 어디에 있으며, 무엇이 자주 바뀌는지 설명하는 습관이 먼저다.


UML은 언어이지 설계 그 자체는 아니다

UML을 배우면 구조를 표현하는 데 도움이 된다. 특히 클래스 관계나 상호작용 흐름을 빠르게 보여줄 수 있다는 장점이 있다. 다만 UML을 배운다고 설계가 저절로 좋아지는 것은 아니다.

흔한 실수는 이렇다.

그래서 UML은 필요한 내용을 더 빨리 설명하기 위한 도구로 쓰는 편이 낫다. 목적은 그림이 아니라 설명이다.


입문자에게는 C4 모델처럼 단계가 분명한 시각화도 유용하다

Simon Brown의 C4 모델은 소프트웨어 구조를 시스템, 컨테이너, 컴포넌트, 코드의 네 단계로 보여 주는 접근이다. 복잡한 표기법보다 “지금 어느 해상도에서 설명하고 있는가”를 분명히 해 준다는 점에서 초보자에게 특히 유용하다.

예를 들어 이런 순서가 자연스럽다.

  1. 이 시스템이 바깥과 어떻게 연결되는가
  2. 내부에 어떤 큰 실행 단위가 있는가
  3. 각 단위 안에 어떤 책임이 모여 있는가
  4. 마지막에 필요하면 클래스나 코드 구조를 본다

이 흐름을 익히면 설계 설명이 훨씬 덜 막막해진다.


패턴 공부는 “해법 암기”보다 “문제 분류” 쪽이 더 중요하다

설계를 공부하다 보면 곧 디자인 패턴으로 넘어가게 된다. 이때도 중요한 것은 패턴 카탈로그를 외우는 것이 아니라, 반복되는 문제를 어떻게 분류하느냐다.

예를 들어 이런 질문이 먼저다.

이 질문을 분명히 할 수 있어야 패턴이 유용해진다. 질문 없이 패턴 이름부터 떠올리면 설계는 금방 과해진다.


설계 학습 순서는 “표현 도구”보다 “변화의 경계”가 먼저다

1971년 파나스(D. L. Parnas)는 모듈 분해의 기준으로 정보 은닉을 강조했다. 자주 바뀔 가능성이 있는 설계 결정을 모듈 뒤에 숨기라는 이야기다. 이 원칙은 지금 읽어도 여전히 강하다.

결국 설계 공부의 핵심은 다음 순서에 가깝다.

  1. 무엇이 자주 바뀌는지 본다.
  2. 그 변화를 어디에 가둘지 정한다.
  3. 책임 경계를 설명한다.
  4. 필요하면 UML이나 C4 같은 도구로 시각화한다.

즉 표기법보다 구조 감각이 먼저다.


핵심 정리

소프트웨어 설계를 배우려면 UML이나 패턴 이름부터 외우기보다, 시스템의 경계와 책임, 그리고 자주 바뀌는 결정이 어디에 있는지를 설명하는 습관부터 익히는 편이 낫다. UML은 유용한 표준이지만 언어일 뿐이고, C4 모델은 해상도를 나눠 구조를 설명하는 데 도움이 되는 도구다.

설계 학습의 출발점은 결국 하나다. “이 구조는 왜 이렇게 나뉘었는가”를 스스로 설명할 수 있는가. 그 답이 생기면 도구는 그다음에 붙는다.

참고 자료

← 목록으로
Related

함께 읽으면 좋은 글

소프트웨어 설계프로그래밍디자인 패턴
게임 엔진 개발에서 시작하는 소프트웨어 설계 실전 노하우

UML, 디자인 패턴, 개방-폐쇄 원칙 같은 개념을 게임 개발 맥락에서 어떻게 익히고 적용할지 정리한다.

프로그래밍디자인 패턴소프트웨어 설계
『Design Patterns』를 다시 읽을 때 중요한 것은 23개 암기가 아니라 공통 언어다

Erich Gamma 외 3인의 『Design Patterns』는 23개 패턴 목록보다도, 반복되는 설계 문제를 이름 붙이고 토론하게 만든 공통 언어로서 영향력이 컸다.

소프트웨어 설계입문객체지향
소프트웨어 설계가 처음이라면 이 5가지 질문부터 던지는 편이 낫다

처음 설계를 시작할 때는 클래스 수를 늘리는 것보다, 무엇이 책임이고 무엇이 자주 바뀌는지 먼저 묻는 편이 훨씬 안전하다. 입문자가 바로 적용할 수 있는 5가지 질문으로 정리한다.