나는 파이썬만 다뤄보았지 자바에 대한 이해가 거의 없는 상태, 즉 데이터형 정도만 아는 상태에서 api, 인터페이스 등에 대한 용어가 나와서 이해하기 어려웠다. 자바를 배워보고 싶어서 이 책을 신청했지만 안타깝게도 자바에 대한 이해가 선행되어야 하는 책이었다. 우선 자바를 더 잘 다루게 되고나서 다시 읽어봐야 할 것 같다. 그래도 몇몇 이야기는 이해할 수 있었는데, 내가 중요하다고 느낀 핵심 내용만 간략히 소개해보고자 한다. 종합하자면 유지보수가능한 코드를 짜는 것은 코드를 적절하게 잘라 나누고 필요한 기능을 가진 코드만 넣으며 예외를 빼먹으면 안된다는 것이었다. 효율적인 코드가 항상 유지보수가능한 코드인 것은 아니지만, 코드는 항상 바뀌기 때문에 유지보수가능한 코드작성이 필요하다. 코드가 변하지 않을 것이란것은 환상이다. 주변환경에 따라 변할 것 같지 않은 코드라도 언제든지변할 수 있으므로 염두에 두어야한다. 혼자서 모든 코드를 짜거나 내가 짠 코드를 시간이 지나도 항상 이해할 수는 없는 노릇이기 때문에, 식별자의 이름을 잘 정하거나 이해가 쉬운 코드를 짜는 것은 중요하다. 사람에게 이해가 잘 되는 코드가 주석이 많이 달린 코드라고 착각했었는데, 그게 아니었다. 식별자 이름을 그것이 어떤 기능을 하는지 알아보기 쉽고 명확하게 정한다. 그리고 코드의 구조를 쉽게 손볼 수 있다. 그렇게 한다면 주석을 최대한 적게 줄일 수 있다. 식별자 이름 자체가 코드에 대한 이해를 돕고 설명이 되기 때문이다. 다음부터는 책에서 감명깊은 문구를 하나씩 소개하고 첨언하고자 한다. 모든 문제는 내부에 더 작은 문제들이 있다. 이것은 컴퓨터수업에서 나온 divide and conquer,나눠서 정복하기 개념으로 이해해볼 수 있다. 알고리즘을 짤 때 큰 흐름을 먼저 짜고 그것을 해결 가능한 작은 문제들로 나누어간다. 그렇게해서 간단히 해결할 수 있는 쉬운 문제가 될 때까지 쪼개고 나눠진 문제들을 차근차근 해결한다. 악취 퍼레이드의 하이라이트는 중복 코드다. 코드를 절대로 중복해서는 안된다고 한다. 그 이유로 복제한 원래 코드에 오류가 있을 수 있다. 또한 우스갯소리로 프로그래머들은 귀찮음을 싫어하는 귀차니스트라고 하는데, 반복되는 문제를 싫어한다는 뜻이다. 코드를 복사했다는 것은 반복했다는 것으로 코드의 효율성또한 크게 저해한다. 함께 돌아다니는 데이터 뭉치는 자기 객체로 빼내야 한다. 유지보수가 쉬우려면 한곳을 고치면 다른 곳에 미치는 영향이 크지 않아야하는데, 이것과 연관된 개념이 결합도이다. 결합도가 낮아야 유지보수가 쉬운데 단위를 나누고 자기 객체로 빼내는 것은 결합을 느슨하게 할 수 있다. 단위당 파라미터 개수는 4개 이하로 제한한다. 파라미터 개수가 많으면 코드를 이해하기 어렵다. 결합도가 높은 복잡한 시스템은 으레 사고가 난다. 또다시 결합도에 대한 중요성을 말하고 있다. 소프트웨어 디자인을 구축하는 방법은 두 가지다. 아주 단순하게 만들어 확실히 결함이 없게 하는 것과 아주 복잡하게 만들어서 눈에 띄는 결함이 보이지 않게 하는 것이다. 소소한 프로젝트긴 하지만 프로젝트를 진행하며 완전히 공감했던 문제다. 복잡해지면 오류를 발견하기도 어렵다. 반대로 단순하면 오류를 찾아내기 쉬우니 오류를 고치기도 쉽다. 이상의 내용으로 나는 유지보수가 쉬운 코드에 대한 조건을 알 수 있었고 좀 더 자바를 공부해야겠다고 생각했다.