Learn Programming with CoffeeScript

코딩 따라가기 (3) - END

리뷰

학습한 결과물을 상기해보자.

우선 변수if함수정의를 배웠다.

자 그럼 가장 중요한 설명 조각내기는 배웠는가?

이 예제에서는 조각내기를 시연한 것은 다음과 같다.

  1. MyRank를 GetMyRank + 숫자로 조각내었다. 막연한 개념인 내 등수를 숫자와 그 숫자의 등수 계산으로 조각낸것이다.
  2. GetMyRank를 일치 갯수 얻기와 갯수에 따른 등수 결정으로 조각내었다.
  3. 일치 갯수 얻기를 보너스 수를 제외한 6자리수와 GetCountOfMatchedNumber(=일치 갯수 세는 계산)으로 조각냈다.
  4. 일치 갯수 세는 계산를 36개의 일치 갯수 증가 조건으로 조각냈다.

그런데 이러한 조각내기는 처음부터 결정하고 진행한것이 아니다.

GetMyRank의 경우는 프로그램이 문법적 오류 없이 잘 실행되는지를 보기위해 등수를 '9'로 처리하도록 만들어 놓고, 나중에 조각낸 것이다.

어차피 코드를 작성할때, 한번에 잘 처리되게끔 할수는 없다.

때문에 가장 중요한 대원칙이 있다.

대원칙: 에러가 나지 않게 유지한다.

에러가 발생하여 컴퓨터가 명령을 알아듣지를 못하는데 되지않는데 이것저것 코딩해봐야 의미가 없다.

그러나 이 대원칙이 에러를 전혀 내지 않고 한번에 올바른 코드를 작성하라는 것은 아니다. 사실 그것은 불가능하다. 이 대원칙의 진짜 의미는 프로그램 코드를 조금씩 추가/변경해가며 진행하여 에러가 없는 상태에서 '추가된 부분'이 에러나는 상태로, 다시 그것을 수정하여 에러가 없는 상태가 되라는 의미이다.

이를 실천하려면 구현도 잘게 조각내에 에러가 나지 않게 조금씩 진행하는게 좋다.

이떄 조금씩 진행하는 단계에서 뭉뚱그려서 표현하였다가, 조각 내기를 진행하면 프로그램 코드는 슬금슬금 원하는 기능을 갖춰나가게 된다.

조각내기 여러가지 형태로 진행할수 있지만, 여기선 2가지 형태를 정리해주겠다.

  1. 결과 -> 계산 + 입력 계산의 결과는 계산식과 입력에 의해서 전적으로 결정된다. 좀 더 일상적인 예제로 비유하면, 거스름돈은 내가낸돈과 받은돈-물건 가격격이란 계산식으로 결정되는 것이다. 따라서 프로그래밍을 할 때, 내가 원하는 결과를 먼저 표현한다. 가령 MyRank와 같은 형태로 표현하고, 이를 GetMyRank와 함수의 입력값으로 나눌수있다.

  2. 계산 -> 계산1 [ + 계산2 + .... + 계산N] 하나의 계산은 더 작은 계산 단계로 나눌수 있다. 이떄 조각은 서로 연관성이 적은 단위로 조각내는 것이 좋다. 예제에서는 GetMyRank를 일치 갯수 얻기와 갯수에 따른 등수 결정으로 조각낸것이 전형적인 예이다. 2개의 로직 사이에서는 일치갯수이외의 연결점이 없기때문에 조각내기 매우 좋은 지점이다.

    • 변형형태로 계산을 결과1 + 계산2와 같은 형태로 나눌수도 있다. 위 예제에서도, GetMyRankCountOfMachedNumber와 갯수에 따른 등수 결정으로 나눈뒨 CountOfMachedNumber가 GetCountOfMachedNumber보너스 수를 제외한 6자리수로 나누어 진것이다.

조각내기는 익순한 문제의 경우 머릿속에서 인지할 틈도없이 순식간에 조각나버리기도 함으로 꼭 어때야 한다는 틀을 강요할 필요는 없다.

꼭 지켜야하는 것은 대원칙으로, 대원칙을 지키면 코드상의 변경된 내용의 크기가 작아져서, 너무 어려워서 느리게 만들더라도 코드를 완성할 수 있다.

조각내기는 이 대원칙을 지키키기 위한 가장 단순한 실행 매뉴얼이라고 할수 있다.

댓글

댓글 본문
graphittie 자세히 보기