발상의 전환
김동헌 지음
느낌표 ! (인상 깊은 문장 | 문맥)
프로그램의 기능 구현은 개발자의 당연한 임무다. 그러나 소프트웨어 개발자에게는 기능 구현만큼 중요하고 챙겨야 할 것이 또 있다. 예를 들면 유연한 소프트웨어와 빌드 자동화 같은 개발 환경이다.
p.13
기능 구현의 폭은 요구사항을 만족하는 것을 넘어 저자의 설명처럼 유연한 소프트웨어까지 포함될 수 있다. 또 유연한 소프트웨어가 가능하려면 빌드 자동화, 테스트 케이스 등 여러 개발 환경이 조성이 되어야한다.
기능 구현에만 집착하면, 더 중요한 다른 일(유지보수, 확장성 등) 들은 신경 쓸 여력이 없어진다. 이것은 개발자가 일부러 의도하지 않아도, 어쩔 수 없이 기능 중심 개발로 내몰리는 현상이다. 즉 눈앞의 기능 구현만 쫓을 때의 큰 문제점은, 유연한 소프트웨어를 지향하지 못하는 것에 그치지않고, 소프트웨어에 해를 끼친다는 데 있다.
p.15
운동 선수들에 따르면 임팩트 순간에 힘을 빼는 것이 오히려 정확하게 타격할 수 있다고 한다. 개발자도 이와 같지 않을까 싶다. 기능 구현할 때 최고의 힘을 주기보다 힘을 뺄 때 보다 나은 기능 구현이 나올 수 있지 않을까 생각해본다. 물론 이렇게 가능하려면 정확한 임팩트를 타격할 수 있을 때 이야기이다. 매일매일 나아지고 있지만 아직 이 수준은 안 되는 것 같다.
객체지향의 정의와 목표
“객체지향은 낮은 관계의 의존성과 높은 기능의 집중도를 지향하여, 소프트웨어의 유연함을 극대화하는 개발 기법이다.”
p.25
의존성은 낮지만 집중도가 높을 때 레고의 하나 블록처럼 블록을 조합해서 상상을 뛰어 넘는 것을 만드는 것처럼 상상을 뛰어 넘는 코드가 될 수 있을 듯 하다.
테스트 주도 개발 실험
- 일반적인 개발: 내가 중간중간 의식하지 않으면 나도 모르게 기능 중심 개발로 쏠린다.
- 테스트 주도 개발 : 내가 힘들여 의식하지 않아도 저절로 낮은 관계의 의전성과 높은 기능의 집중도(유연한 소프트웨어)를 지향한다.
p.41
저자는 테스트 주도 개발을 하면 유연한 소프트웨어 개발에 집중할 수 있는 환경을 만들어준다고 설명하고있다.
그 이유는 아래와 같이 설명하고 있다.
테스트 주도 개발은 테스트 할 객체의 기능(메소드, 인터페이스) 안의 내부 기능(로직)은 이미 구현했다고 가정하고 출발한다. 기능의 내부 로직보다 객체가 외부에 제공하는 기능의 명세(인터페이스)가 제대로 작동하는지가 관심사이다.
p.41
테스트 케이스를 작성하지만 객체지향적인 개발에 도움이 된다고 생각을 하지 못하고 있었다. 그렇지만 생각해보면 당연히 필요 기능들을 테스트하고 데이터의 결과값을 검증하기 때문에 객체지향적인 개발에 도움이 되었을 것이다.
로직보다 인터페이스에 집중해야 한다. ‘점’보다 ‘선’으로 접근해야 한다. 객체 하나하나보다 객체 간의 협력을 더 중요하게 생각해야 한다.
p.47
정말 여러 생각이 들게한다. 너무 하나의 기능만을 구현하려 애쓰기만 했던 것이 떠오르기도 한다. 로직보다 인터페이스에 집중해야 유연한 소프트웨어를 만들 수 있을 것이다.
Chapter 1 느낌
Chapter 1 에서는 객체지향의 필요성, 객체지향과 현실의 차이, 객체지향적으로 만들기 위한 태도 등을 설명하는데 저자의 철학과 생각이 느껴져 많은 생각과 꺠달음을 얻게 도와준다.