좋은 개발이란 무엇일까에 대해서 고민을 해본 적이 있고, 아직도 고민하고 있다.
과거에는 좋은 개발이란 좋은 코드고, 좋은 코드란 좋은 아키텍처와 패턴 혹은 함수형, 유명한 기술들이 적용되어 있는게 좋은 코드라고 생각한 적이 있었다.
지금은 좋은 코드보다 개발한 제품이 전할 수 있는 가치를 더 중요하게 생각한다.
만들어진 제품이 고객에게 충분한 가치를 제공할 수 있다면, 코드가 지저분해도 좋은 개발이라 생각한다.
그렇다면 좋은 코드를 위한 설계, 여러 이론은 쓸모가 없는 것이냐? 물을 수 있다.
내 생각은 때에 따라 쓸모가 없다고 생각한다.
시연 이후 폐기되거나, 신규 기능 없이 운영만 되다가 종료될 제품, 수명이 다해 고객이 없는 제품은 변경할 필요가 없다.
필요 없는 리팩토링이나 오버 엔지니어링은 내 기준에서는 자기만족을 위한 행동이다.
객체지향, 설계의 전제는 고객이 느끼는 가치는 변하고 이에 대응해야한다(요구사항은 계속 변한다)는 가정이 있기 때문이다.
그래서 지금 생각하는 좋은 개발을 다시 서술해보면, 제품으로 고객에게 가치를 전달해야한다. 그런데 고객이 생각하는 가치는 명확하지 않고 빠르게 변하기도 한다. 지속적으로 가치를 전달하기 위해서는 이에 대응해야한다.이다.
지속적으로 가치를 전달하여 좋은 코드를 유지하기 위해 필요한것이 설계와 객체지향과 같이 변화를 도와주는 기법들이다.
내 의견과 별개로, 추천하는 책은 좋은 책이며 내 의견과는 분리하여 보았으면 좋겠다.

조영호, 객체지향의 사실과 오해(역할, 책임, 협력 관점에서 본 객체지향), 위키북스, 2015

객체지향이 무엇을 지향하는지 알기 좋은 책이다.
객체지향이 무엇인지 설명하는 책은 많지만 이 책을 추천하는 이유는 여러가지가 있는데,
우선 읽기 쉽지만 내용이 알차다. 이상한 나라의 앨리스 이야기로 시작하여 요소들을 설명하고 뒤로가면서 이러한 요소들을 종합하여 내용을 서술한다.
저자가 대단하다고 느끼는 부분은 쉬운 문장구조로 내용을 매끄럽게 연결시켰다는 부분이다.
후반으로 가면 동화 이야기가 사라지는데, 사라졌다는것을 인지하지 못할 정도로 자연스럽다.
만약 형식이 명확한 구조를 좋아한다면 (GoF 디자인패턴과 같이) 마음에 들지 않을 수 있다.
코드 예제코드가 거의 없다. 개념 전달에 집중하고 생각할 여지를 제공해준다. 코드로 예제를 모두 설명했다면, 학습자 입장에서 해당 개념과 코드가 동일시 되는 부작용이 있었을것 같다.
자신이 작성했던 코드가 객체지향적인지, 아니라면 어떻게 바꿀 수 있을지 상상하면서 책을 읽으면 좋을듯 하다.

게리 맥린 홀(장현희 역), C#으로 배우는 적응형 코드(디자인 패턴과 SOLID 원칙 기반의 애자일 코딩), 제이펍, 2015

위 책은 개념 전달에 초점이 맞추어져 있다면, 이 책은 구체적인 방법을 제시한다.
C#이지만 Java, C++과 같은 언어의 문법을 안다면 무리없이 볼 수 있는 수준의 코드다.
제목에서 말하는 적응형에 대해 간단하게 말해보자면, 변화하는 요구사항에 적응할 수 있는 코드다.
단순한 코드만 다루는것이 아니라 에자일과 같은 방법론도 함께 나온다.
일부 예시들은 플랫폼에 따라서 적용이 불가능하여 의미가 없는 것들도 있다. 예를들면 C#에 한정된 내용들이나, dll만 바꾸어 동작을 변경 하는 부분들이다.
패턴과 SOLID 원칙을 이해하는데 도움이 되는 내용, 예제코드까지 함께 있다.
이 책을 보면서 리스코프 치환 원칙이 단순한것이 아님을 알았다.

이 글은 책 추천을 빙자한 쓰고 싶은 글을 쓴 글이다.