Skip to content

Chapter 4: Motivation #1438

Description

@jongfeel

04 동기유발

50년전 Edward Yourdon과 Larry. L. Contantine은 < Structured Design: Fundamentals of a Discipline of Computer Program and Systems Design > 에서
소프트웨어 설계의 원동력은 경제성이라고 이야기 했다.
소프트웨어 비용은 최초 개발 비용과 유지 보수 비용의 합으로 볼 수 있는데, 이 비용을 줄이는 방향으로 설계되어야 한다.

전체 비용 = 개발 비용 + 유지 비용

유지보수가 어렵고 비싼 이유는 기존 코드를 이해하는 작업에 시간이 많이 걸리기 때문이다.
또 코드 수정 이후 테스트를 거쳐 배포까지 해야 하므로 유지 비용은 다음과 같다고 볼 수 있다.

유지 비용 = 이해 비용 + 수정 비용 + 테스트 비용 + 설치 비용

전체 비용을 줄이는 전략으로 유지 비용을 줄일 수 있을 거라 생각하고 초기 개발 비용에 더 투자하는데 보통 전체 비용을 절감하지 못한다.
나중에 코드를 어떻게 수정해야 할지 알 수 없으므로 미리 고민한다고 해도 나중에 수정할 것 까지 대비해 코드를 작성하는 건 불가능하다.
오히려 섣부른 일반화가 수정에 방해가 되기도 한다.

초기 개발 비용에 대한 투자를 확대하는 건 두 가지 경제적 측면에서 부합하비 않는다.
여기서 살펴볼 경제적 측면은 시간에 따른 화폐 가치 변화와 비래에 대한 불확실성 관점이다.

시간이 지날수록 화폐가치는 떨어지므로 비용 발생 시점을 뒤로 미루는 것이 좋다.
불확실성도 나중에 이득을 위해 시간을 쓰는 것 보다는 당장 이득을 얻을 수 있는 쪽을 선택하는 것이 좋다.

그렇다고 해서 지금 코드를 엉망으로 짜도 된다는 건 아니다.
구현 패턴은 미래 코드 확장이나 수정이 쉬운 깔끔한 코드를 추구함과 동시에 당장 얻을 수 있는 이득에도 초점을 맞춘다.

여기서 소개하는 구현 패턴은 경험적인 내용과 함께 과거 프로그래머의 코드를 종합한 것이다.
실제 JDK와 이클립스 코드, 스스로 과거에 작성한 코드를 포함해 비교했다.
사람들이 이해할 수 있는 코드를 작성하는 걸 중점으로 두기 때문에
특정 요소에 가치를 두고 패턴을 작성했다면 또 다른 종류의 패턴이 나올 것이다.

코드는 사람들이 만들고 사람들이 읽어야 하는 목적이 있다.
구현 패턴은 프로그래머의 인간적인 욕구를 성취하도록 도와준다.
그 욕구란 자신의 일에 자긍심을 갖고 싶어하고 커뮤니티에 속해 있고 싶어하는 걸 뜻한다.

Metadata

Metadata

Assignees

Projects

Status
Done

Relationships

None yet

Development

No branches or pull requests

Issue actions