더북(TheBook)

간결한 복사 구현의 또 다른 불편한 점은 테스트, 수정 및 탐색 등 서로 다른 관심사가 섞인다는 점이다. "관심사 분리(Separation of Concerns)"는 소프트웨어 설계에서 중요한 개념이다. 이 개념은 유연성 증가와 복잡도 감소에 기여한다. 이 경우 구현 코드를 이해하는 데 필요한 정신 훈련의 복잡도를 줄여야 한다. 한 줄로 구현되어 이해하기 어려운 복사 코드에 관심사 분리 원칙을 적용하면 다음과 같은 코드로 변하게 된다.

for (; *src; tgt++, src++)
    *tgt = *src;
*tgt = *src; // 널 문자(\0) 복사

이제 세 가지 관심사를 명확하게 구별할 수 있다.

테스트: *src

수정: *tgt = *src;;

탐색: tgt++, src++

또한, 포인터에 증가 연산을 수행한다는 점과 포인터가 가리키는 곳에 테스트와 할당을 수행한다는 점도 한눈에 파악할 수 있게 된다. 구현 코드는 전만큼 간단하지 않지만, 정확한 코드인지 확인하기는 더 쉬워졌다. 포인터가 NULL인지 확인하는 코드(!src != 0)를 추가한다면 더욱 좋은 코드가 된다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.