어떻게 하면 모델링을 잘할 수 있을까?
지난 글마지막에 인용한 표에 대해서는 설명이 부족했습니다. 뒤를 이어 표를 해석하는 글을 씁니다.
해석(解釋)을 한자사전을 찾아 그 씨말을 보면 결국 '풀어내기'라는 한국말로 대체해도 된다는 사실을 알게 됩니다.
그런데 풀어낼 때 해석하는 주체(혹은 임자)가 목적에 따라 맥락이나 범위를 설정할 수 있습니다. 제가 설정한 범위이자 초점은 두 카지노 가입 쿠폰의 활용 관점에서 핵심적인 지식이 무엇인가 입니다.
이번에는 퍼플렉시티 대신에 클로드를 불러서 번거로운 일을 요청했습니다. 먼저 지난 글에서 예를 든 몇 가지 형태의 카지노 가입 쿠폰 클로드에 주고 이를 읽어서 자바 코드로 바꿔 달라고 요청했습니다.
모델을 코드로 실체화Realization한 내용은 UML 자체의 내용은 아닙니다만 (굳이 MDD 같은 기술을 쓰지 않더라도) 사실상 일대일 대응 카지노 가입 쿠폰를 유추할 수 있습니다.[1] 클로드에게 이를 기대한 것인데, 오류가 좀 있었습니다. 하지만, 오류가 없는 내용만 추려서 주제에 관해서 활용하도록 하겠습니다.
Class1이라는 객체에 연관이 있고 방향성이 Class2로 향한다면, Class1 객체는 Class2 객체를 멤버 변수로 갖습니다. 멤버 변수로 갖는 카지노 가입 쿠폰를 지칭하는 표현이 앞선 표에 있습니다. 바로 '구조적 연결'입니다. 링크가 지속적이라는 의미입니다. 객체의 라이프사이클 동안 계속 연결될 수 있다는 의미입니다. 그런 점에서 영구적이라고 합니다. 그리고 이는 컴파일할 때 실제 참조를 생성합니다. 자바 개발자라면 많이들 알고 있을 클래스 로딩 이후 객체가 생성된 이후에 setter 함수가 쓰이는 순간과 연결할 수 있습니다.
그런데 연관 카지노 가입 쿠폰는 여러 개의 객체와 연관을 맺을 수 있습니다. 흔히들 Multipicity라고 부르는 특성인데, 클로드가 생성해 준 코드에서는 다수를 담을 수 있는 변수로 List<Claass06 타입을 제안(?)합니다. 주제에서 벗어나는 카지노 가입 쿠폰로 이런 디테일은 생략하고 연관카지노 가입 쿠폰란 멤버 변수로 객체 사이의 영구적인 통로가 생긴다는 점을 기억하시길 바랍니다.
여기서 설명의 편의를 위해 다시 한번 '인터페이스 기반 카지노 가입 쿠폰Programming to interfaces'을 떠올립니다.[2]
스프링 덕분에 자바 프로그래머들 사이에서 인터페이스 기반 카지노 가입 쿠폰은 이미 보편화되어 있습니다. UML 용어를 써서 인터페이스 기반 카지노 가입 쿠폰을 다음과 같이 설명할 수 있습니다.
연관카지노 가입 쿠폰를 제한하여 명확하게 확립된 Role에만 사용하고,
Role을 Concete class가 아닌 Interface로 구현한다.
물론, 정교한 표현이 아니라 딴지를 걸 수 있는 말입니다. 기본적으로 인터페이스 기반 카지노 가입 쿠폰은 모듈화 방법을 전제로 하거나 분산 혹은 네트워크 환경에서 구동할 수 있는 컴포넌트를 전제로 하는 접근법입니다. 모든 객체에 그렇게 하자는 것은 아니죠. 다만, '컴포넌트가 뭐냐?'라는 내용에 빠지면 다른 길로 한참 나아갈 수 있어서 그 내용을 여기서 제외합니다.
그러고 나면 인터페이스만으로 프로그램이 구동하지 않는다는 점을 지적할 수 있습니다. 그래서, 스프링은 카지노 가입 쿠폰 Injection이라는 패턴이자 개념을 제안합니다. UML 스펙에서 추출한 최초의 표를 다시 볼까요? 먼저 가장 아래 행을 보면 실체화에 대해 '실행 시 가상 연결'이라고 요약되어 있습니다.
그 구체적인 방법을 스프링이 제시한 것이죠. 동적으로 dependency 주입을 해 주자고 제안합니다.[3] Dependency는 일시적인 사용 카지노 가입 쿠폰를 드러냅니다. 일시적으로 쓰면 되는데, association을 남발(?)하면 영구적 링크가 필요 이상으로 늘어나게 됩니다.
하지만, Association은 나쁘고 카지노 가입 쿠폰는 좋은 것으로 오해하시면 안 됩니다. 각자 기능(역할)에 맡는 형태가 있다는 것이죠. 그것이 FFF 즉, Form Follows Function이라는 보편적 설계 원칙에 따르는 길이기도 합니다.
예를 들어 설명해 볼까요? 앞서 다뤘던 '인터페이스 사이의 상호작용 지점을 정의한 포트'가 있습니다. 어떤 경우는 명확하게 구조적으로 연결을 지어줬을 때 가치가 증가합니다. 매번 새롭게 고민할 필요가 없는 것들이 패턴, 템플릿으로 쓰이는 이치이죠.
그런데 이때는 어디까지 그대로 쓰이고 어디부터는 가변적인지 경계를 짓는 일이 매우 중요합니다. 마치 협업이 어려운 이유가 떠오릅니다. 맥락에 따라 상황에 따라그리고 협업하는 주체에 따라항상 달라질 수 있습니다.
제가 쓴 글인데 마음에 쏙 드는 문장이 되어서 강조를 해 봅니다.
맥락에 따라 상황에 따라 그리고 협업하는 주체에 따라 항상 달라질 수 있습니다.
어쩌면 위 문장이 하드웨어에 대조적으로 소프트웨어라 불리는 인공물이 갖는 핵심적인 특징이자 가치일 수도 있다는 생각이 듭니다. 머릿속에는 OCP(Open Closed Principle)를 예로 들고 싶은 충동이 생각을 키우고 있지만 자제하겠습니다. 일단 글이 길어져서 마무리를 하려고 합니다.
다음 표는 제목으로 정한 '의존 관계Dependency와 카지노 가입 쿠폰Association을 잘 쓰기'에 대한 힌트가 들어 있습니다.
일단, 협업의 구조를 드러내고 싶다면 그래서 프로그램의 뼈대나 얼개를 구성하기로 하고 Association을 활용하세요. 협업 대상에 가변성이 있거나 분산 환경(다른 컴퓨터)에서 구동하는 객체를 부를 수 있는 환경이라면 멤버 변수를 인터페이스로 구현하라는 의미입니다. 그렇다고 해서 모든 멤버 변수를 인터페이스로 만들라는 의미는 아닙니다.
항상 같은 컴퓨터에서 구동하거나 가변성이 높지 않은 코드는 모아 놓는 것이 변경하기 쉽습니다. 반면에 구동을 위해 실제로 사용할 코드는 일시적으로 참조할 수 있도록 Depedency Injection을 활용합니다.
[1] 유추를 넘어서서 Rational Rose나 IBM이 인수했던 각종 Rational 제품군 그리고 대부분의 UML 저작 도구에서 지원하는 기능이기도 했습니다.
[2] 더불어 제가 로드 존슨의 팬이었고, 한국 스프링 사용자 모임(KSUG)의 공동 설립자란 사실도 알려 드리죠. :)
[3] 그리고 프레임워크가 out of box로 그 일을 하는 코드를 제공하죠.
(11회 이후 링크만 표시합니다.)
11. 소프트웨어 설계에 대한 한국말 오리지널 글 쓰기
13. 상태도는 객체 설계의 꽃이다
14. 상태가 꽃이라면 왜 Stateless를 권하는가?
15. 모델링 초보자의 그림과 기능이 형식을 정한다는 FFF
16. 현상을 개념으로 포착한다
17. 그때그때 그려서 쓰는 모델링
18. 모델링을 계속하려면 어떻게 직무 환경을 설계해야 할까
19. 나는 카지노 가입 쿠폰에 인공 지능 역할을 이렇게 보고 있어요
20. 다른 맥락에서 글을 보다가 생각을 정제하여 문제 찾기