거의 모든 프로그래머는 시스템의 코드를 분해한다.
당연시되는 코드 분해의 목적과 방법에 대해 이 강의를 들으면서 한 번 더 생각을 했다.
문제의 크기
-
프로그래머가 한 번에 다룰 수 있는 문제의 크기는 한계를 가진다.
- 다양한 문제를 한번에 다룰 순 없다.
- 사람은 누구라도 하나의 일을 차례대로 진행하지, 여러개의 일을 동시에 못한다.
- 문제가 너무 커도 마찬가지이다.
-
프로그래머는 더 큰 문제를 자주 마주한다.
- 일하다보면 개발자는 예상치 못한 상황을 접하게 된다.
-
시스템의 크기는 점점 커진다.
- 처음엔 작게 시작했지만 점점 시간이 지나면서 서비스가 고도화되고, 추가 기능이 붙으면서 시간에 따라 비대해진다.
-
큰 문제는 작은 문제로 분해할 수 있다.
- 대체적으로 마주하는 문제들은 작은 요소로 쪼개질 수 있다.
- 새로운 기능 구축이 필요하면 해당 요구사항을 분석해서 구현에 필요한 작은 기능을 하나씩 정리하여 구현한다.
-
작은 문제의 일부는 반복된다.
- 발생한 문제는 이전에 발생한 반복된 문제일 수도 있다.
- 히스토리를 파악해서 해결방법을 찾을 수 있다.
문제는 앞으로 계속 발생할 것이며, 어떤 것들은 이전부터 반복되는 문제일 수도 있다.
이런 경우 코드를 재사용하여 수정할 수 있다.
코드 재사용
-
반복되는 문제의 풀이는 재사용 가능하다.
- 재사용하려는 코드의 아주 작은 코드를 수정해도 이게 따른 의도하지 않은 사이드 이팩트를 파악하기 힘들다.
- 가능한 그대로 사용하는 것이 중요하다.
- 이미 작성된 코드를 패키지로 만들어서 재사용하는 방식과 산출물을 라이브러리라고 부른다.
-
소프트웨어 개발 비용이 절감한다.
- 코드 재사용은 새롭게 코드 작성으로 해결하는 것보다 비용절감 효과가 있고, 앞으로 강의에서 계속 엔지니어링에 맞대어 있다.
모듈화
분해
- 큰 시스템은 더 작은 하위 시스템으로 분해 가능하다.
- 교체가 가능하다.
조립
- 작은 시스템은 더 큰 상위 시스템으로 조립 가능하다.
- 모듈 재사용하는 것이다.
- 라이브러리를 사용하는 것이다.
단위 테스트
- 모듈을 테스트할 때 단위 테스트를 많이 사용한다.
- 클라이언트에게 신뢰도를 줄 수 있는 좋은 수단이다.