리뷰
학습한 결과물을 상기해보자.
우선 변수
, if
, 함수정의
를 배웠다.
자 그럼 가장 중요한 설명 조각내기
는 배웠는가?
이 예제에서는 조각내기
를 시연한 것은 다음과 같다.
MyRank
를GetMyRank + 숫자
로 조각내었다. 막연한 개념인내 등수
를숫자
와그 숫자의 등수 계산
으로 조각낸것이다.GetMyRank
를일치 갯수 얻기
와갯수에 따른 등수 결정
으로 조각내었다.일치 갯수 얻기
를보너스 수를 제외한 6자리수
와GetCountOfMatchedNumber
(=일치 갯수 세는 계산)으로 조각냈다.일치 갯수 세는 계산
를 36개의일치 갯수 증가 조건
으로 조각냈다.
그런데 이러한 조각내기
는 처음부터 결정하고 진행한것이 아니다.
GetMyRank
의 경우는 프로그램이 문법적 오류 없이 잘 실행되는지
를 보기위해 등수를 '9'로 처리하도록 만들어 놓고, 나중에 조각낸 것이다.
어차피 코드를 작성할때, 한번에 잘 처리되게끔 할수는 없다.
때문에 가장 중요한 대원칙이 있다.
대원칙: 에러가 나지 않게 유지한다.
에러가 발생하여 컴퓨터가 명령을 알아듣지를 못하는데 되지않는데 이것저것 코딩해봐야 의미가 없다.
그러나 이 대원칙이 에러를 전혀 내지 않고 한번에 올바른 코드를 작성하라는 것은 아니다. 사실 그것은 불가능하다. 이 대원칙의 진짜 의미는 프로그램 코드를 조금씩 추가/변경해가며 진행하여 에러가 없는 상태에서 '추가된 부분'이 에러나는 상태로, 다시 그것을 수정하여 에러가 없는 상태가 되라는 의미이다.
이를 실천하려면 구현도 잘게 조각내에 에러가 나지 않게 조금씩 진행하는게 좋다.
이떄 조금씩 진행하는 단계에서 뭉뚱그려서 표현하였다가, 조각 내기
를 진행하면 프로그램 코드는 슬금슬금 원하는 기능을 갖춰나가게 된다.
조각내기
여러가지 형태로 진행할수 있지만, 여기선 2가지 형태를 정리해주겠다.
-
결과 -> 계산 + 입력
계산의 결과
는계산식
과입력
에 의해서 전적으로 결정된다. 좀 더 일상적인 예제로 비유하면,거스름돈
은내가낸돈
과받은돈-물건 가격격
이란 계산식으로 결정되는 것이다. 따라서 프로그래밍을 할 때, 내가 원하는 결과를 먼저 표현한다. 가령MyRank
와 같은 형태로 표현하고, 이를GetMyRank
와함수의 입력값
으로 나눌수있다. -
계산 -> 계산1 [ + 계산2 + .... + 계산N]
하나의 계산
은 더 작은 계산 단계로 나눌수 있다. 이떄 조각은 서로 연관성이 적은 단위로 조각내는 것이 좋다. 예제에서는GetMyRank
를일치 갯수 얻기
와갯수에 따른 등수 결정
으로 조각낸것이 전형적인 예이다. 2개의 로직 사이에서는일치갯수
이외의 연결점이 없기때문에 조각내기 매우 좋은 지점이다.- 변형형태로
계산
을결과1
+계산2
와 같은 형태로 나눌수도 있다. 위 예제에서도,GetMyRank
는CountOfMachedNumber
와갯수에 따른 등수 결정
으로 나눈뒨CountOfMachedNumber
가GetCountOfMachedNumber
와보너스 수를 제외한 6자리수
로 나누어 진것이다.
- 변형형태로
조각내기
는 익순한 문제의 경우 머릿속에서 인지할 틈도없이 순식간에 조각나버리기도 함으로 꼭 어때야 한다는 틀을 강요할 필요는 없다.
꼭 지켜야하는 것은 대원칙으로, 대원칙을 지키면 코드상의 변경된 내용의 크기가 작아져서, 너무 어려워서 느리게 만들더라도 코드를 완성할 수 있다.
조각내기
는 이 대원칙을 지키키기 위한 가장 단순한 실행 매뉴얼이라고 할수 있다.