22장. 유익한 관련 요소
이 작품은 AI를 사용하여 번역되었습니다. 여러분의 피드백과 의견을 환영합니다: translation-feedback@oreilly.com
소프트웨어 디자인이란 무엇인가요? 저는 정의로 시작하는 것을 좋아하지 않지만, 지금부터는 거의 시작하지 않겠습니다. 제가 말하는 디자인이 무엇인지에 대한 예를 보셨을 겁니다. 개별적인 결정이 어떻게 서로 연결되어 더 큰 목표를 달성하는지 보셨을 것입니다. "소프트웨어 디자인은 인간 관계의 연습이다"라는 제 말의 의미를 처음으로 엿보셨을 것입니다. 이제 제가 말하는 "소프트웨어 디자인"의 의미, 즉 유익한 관계 요소에 대해 말씀드릴 수 있습니다.
큰 개념에 비해 단어가 많지 않습니다. 각 단어는 상당한 무게를 지니고 있어야 합니다. 이 단어들을 분리하여 다시 조합해 봅시다.
요소
실질적인 구조에는 부품이 있습니다.
기관 → 기관 → 유기체.
원자 → 분자 → 결정.
우리 세계에서는 토큰 → 표현식 → 문 → 함수 → 객체/모듈 → 시스템으로 이어집니다.
요소에는 경계가 있습니다. 어디에서 시작하고 끝나는지 알 수 있습니다.
요소에는 하위 요소가 포함됩니다. 우리 세계에서는 동질적인 계층 구조( 예: 복합 패턴)를 선호합니다. 앞의 예시처럼 자연 계층 구조는 동질적이지 않습니다. 포함된 하위 요소는 컨테이너와 다릅니다. (이 점이 크게 중요한지는 모르겠지만, 언젠가 자연스러운 과정으로서의 소프트웨어 디자인에 대한 철학적인 책을 쓸 생각입니다.) 이 점을 염두에 두고 싶습니다.
관련
자, 여기에는 요소의 계층 구조가 있습니다. 이러한 요소는 서로 연관되어 존재합니다. 하나의 함수가 다른 함수를 호출합니다. 함수가 요소입니다. "호출/호출"은 관계입니다. 자연계에서는 "먹는다", "그늘을 만든다", "비옥하게 한다"와 같은 관계가 있습니다.
소프트웨어 디자인에는 다음과 같은 몇 가지 관계가 있습니다:
-
호출
-
게시
-
듣기
-
참조(변수 값을 가져올 때와 같이)
유익한 점
여기서 마법이 일어납니다. 하나의 설계는 작은 하위 요소로 구성된 하나의 거대한 수프를 만드는 것입니다. 전역 네임스페이스가 있는 어셈블리 언어를 생각해 보세요. 이 프로그램이 작동할 것입니다. 외부 관찰자의 관점에서는 잘 설계된 프로그램과 똑같이 동작할 것입니다. 하지만 금방 변경할 수 없을 것입니다. 요소들 사이에는 암묵적으로 너무 많은 관계가 존재할 것입니다.
기계 명령어와 전체 사이에 중간 요소를 만들어 설계하면 이러한 중간 요소는 서로에게 도움이 되기 시작합니다. 함수 B가계산의 복잡한 부분을 처리하기 때문에 함수 A는 더 간단해질 수 있습니다.
유익한 관련 요소
"유익한 관련 요소"라는 문구를 읽으면 "디자인은...."으로 시작됩니다. 디자인이란 무엇인가요? 요소와 요소 간의 관계, 그리고 이러한 관계에서 파생되는 이점입니다.
"디자이너는...."로 시작하는 또 다른 글은 다음과 같습니다. 디자이너는 무엇을 할까요? 디자이너는 요소를 유익하게 연관시킵니다. 이러한 관점에서 보면 소프트웨어 ...