CS 기초/배열

[CS50] 코드의 디자인

담크 2021. 8. 6. 23:37

규모가 큰 프로그램을 작성하게 되면 본인 혼자가 아니라 여러 사람들이 함께 작업을 진행하게 됩니다. 이때는 내가 기여한 부분이 프로그램에 오류를 발생시키지 않도록 주의해야 합니다. 또한 같은 코드를 작성했다고 하더라도 어떻게 디자인하는지에 따라 상대방이 코드를 이해하고 수정하는 속도가 달라질 수 있기 때문에 이러한 부분도 신경 써줘야 합니다.

따라서 이번 포스팅에서는 코드의 정확성과 디자인을 어떻게 관리하는지에 대해서 공부해보도록 하겠습니다.

 

본 포스팅에서 나오는 코드의 사용은 CS50 강의를 위해서 작성되었다고 합니다. CS50 IDE를 제외한 다른 IDE에서는 사용이 불가능할 수 있습니다.

 

check50

~/ $  check50 cs50/problems/hello

(cs50/problems 경로에 있는 hello.c 파일을 check 합니다.)

이 프로그램을 사용하면 코드를 작성할 때 이 코드가 전체 프로그램의 정확성을 해치지 않는지 쉽게 확인이 가능합니다.

이것은 다른형태의 코드지만 check50을 실행하면 이러한 피드백이 나온다는것을 보여줍니다.

Github를 이용한 프로그램이며 CS50 서버로부터 코드의 정확도에 대해 피드백을 받습니다.

(여기서는 실제로 문제 채점을 위해서 사용한다고 합니다.)

 

style50

$  style50 hello.c

(hello.c의 style을 봐줍니다.)

이 프로그램을 사용하면 코드가 깔끔하게 잘 작성되어있는지 검사할 수 있습니다.

사실 공백이나 줄 바꿈은 컴퓨터가 코드를 읽는데 직접적으로 영향을 주진 않지만 코드를 작성하는 사람들이 코드를 읽고 이해하는데 영향을 주기 때문입니다.

int void(main)
{
	printf("hello, world");
}

int void(main){
	printf("hello, world");
}

int void(main){printf("hello, world");}

이 3개의 코드는 스타일에 따라 작성한 방식이 다를 뿐 같은 코드입니다. 물론 디자인이라는 것이 정답이 정해져 있는 것은 아니지만 보통은 많은 사람들이 이용하는 스타일 가이드를 따릅니다.

이러한 방식은 여러 사람들이 코드를 작성하는 데 있어 서로 불필요한 오해를 없애고, 코드를 이해하는데 드는 비용을 최소화하기 때문입니다.

수업이나 기업에서 정한 스타일 가이드를 살펴보려면 아래 페이지를 참고하시면 좋습니다.

https://cs50.readthedocs.io/style50/

 

style50

style50 is a command-line tool with which you can check your code for consistency with CS50’s style guide(for C). If your code isn’t styled consistently, style50 will summarize the changes you shou...

cs50.readthedocs.io

 

러버덕(Rubber Duck)

때로는 help50, debug50, check50과 같은 프로그램이 존재하지 않거나, 있다 하더라도 디버깅에 도움이 안 될 때도 있습니다.

이럴 때는 한 가지 유명한 방법으로 '러버덕'과 같이 무언가 대상이 되는 물체를 앞에 두고, 내가 작성한 코드를 직접 가르치듯이 리뷰해가면서 내가 어떠한 부분에서 실수를 했는지 보는 겁니다.

이를 통해 미처 놓치고 있었던 논리적 오류를 찾아낼 수도 있습니다.

 


출처

본 내용은 CS50의 2019년 강의를 듣고 작성했습니다. (개념이 어느 정도 정리되면 최신강의도 다시 듣고 수정할 내용 있으면 수정하겠습니다.)

 

강의 자료는 EdX에서 무료로 사용할 수 있고 boostcourse에서 한글 강의로도 들을 수 있습니다.

 

'CS 기초 > 배열' 카테고리의 다른 글

[CS50] 문자열의 활용  (0) 2021.08.09
[CS50] 문자열과 배열  (0) 2021.08.08
[CS50] 배열  (0) 2021.08.07
[CS50] 디버깅  (0) 2021.08.05
[CS50] 컴파일링  (0) 2021.08.04