주석(Comment)은 프로그램의 이해를 돕기 위해 프로그래머가 추가한 설명문이다. 주석은 사람을 위한 것이지 컴파일러가 읽을 수 있는 것이 아니다. 따라서 컴파일러는 주석을 만나면 무시한다.
앞으로 주석을 쓸때는 읽을 “사람“을 기억하는 것이 좋다.
C 에서는 두 종류의 주석이 가능하다. 슬래시 2개를 사용한 한줄 주석 // 과 /* 으로 시작해서 */ 으로 마치는 주석이 있다. 최초 C 언어에서는 한줄 주석은 없었다. 한줄 주석은 C++ 에서만 사용되었으나 최근 표준안에서는 한줄 주석도 C에 포함된다. 즉, // 도 현재 C문법 표준에 속한다.
/*
여러줄 주석
아두이노 C 에서 주석의 사용법
*/
// 한줄 주석
주석에 대해서는 다양한 생각들이 공존한다. 기본적으로 유념할 것은 주석은 가능한 쓰지 않는 것이 좋다. 이 말은 주석을 무조건 쓰지 말라는 것이 아니라 주석이 필요없을 정도로 프로그래밍 코드를 쉽게 읽힐 수 있도록 만들라는 뜻이다. 지나치게 많은 주석은 그 자체로 코드를 읽기 어렵게 만든다. 주석이 없이도 한눈에 이해할 수 있도록 만드는 코드가 가장 좋은 코드다.
하지만 주석이 필요없을 정도로 코드를 만든다는 것이 쉬운 일은 아니다. 결국 주석은 코드의 이해를 위해 필요악적인 면이 있다. 가능한 적게 쓰면 좋지만 쓰지 않을 수 없는 것이 주석이다.
그래서 주석을 쓸때는 가능한 짧고 간결하게 쓰고, 핵심을 바로 알수 있도록 쓰는 것이 좋다. 단, 코드의 맨 앞부분에는 전체 프로그래밍 코드에 대한 간단한 요약과 저작권정보, 소유권정보를 넣어두는 것이 좋다.
아래처럼 코드의 시작부분에 아두이노 프로그램 간단한 요약과 저작권, 소유권 정보를 담아두는 것이 좋다.
/*
MyBlink
LED를 1초간 켜고 끄는 것을 반복한다.
LED_BUILTIN 은 아두이노 우노, 메가에서 13번핀과 연결되어 있다.
created 13 July 2020
by eventia@gmail.com
http://www.ludenscode.com/en/Tutorial/Blink
*/
위의 코드를 아래처럼 적기도 한다. 모두 같은 형식이다. 간단한 것을 원하면 위의 형식을 조금 다듬어진 사각형 테이블 형식에 가까워지기 원한다면 아래 형식을 쓰면 된다. 단, 완벽하게 갖추어진 사각형을 만들어서 사용하는 것은 피하는 것이 좋다.
/**********************************************************
* MyBlink
*
* LED를 1초간 켜고 끄는 것을 반복한다.
* LED_BUILTIN 은 아두이노 우노, 메가에서 13번핀과 연결되어 있다.
*
* created 13 July 2020
* by eventia@gmail.com
* http://www.arduino.cc/en/Tutorial/Blink
**********************************************************/
아래는 피하는 것이 좋다. 3가지 경우 모두 동일한 텍스트 이고, 폰트만 달리 쓴 경우다. PC 가 달라지면 보이는 것이 조금 달라진다. 일반적으로는 큰 신경을 쓸 필요가 없지만 아래처럼 사각형 테두리를 만들면 문제가 달라진다. 보기 흉해진다.
[Courier New]
[Consolas]
[나눔고딕코딩]
주석으로 사각형 테두리를 만들어 사용하는 것을 피하는 이유는 첫째, 한글 폰트의 경우 영문과 달리 마음에 드는 고정폭폰트를 찾기가 어렵다. 그래서 정확한 사각형을 맞추기가 힘들다. 결국 우측에 비뚤어진 선은 계속 프로그래머의 마음을 건드려서 코딩에 집중하지 못하게 한다. 코딩에 사용되는 한글 고정폭폰트로는 ‘나눔고딕코딩’이나 ‘D2 Coding’ 등이 있다. 다만, 이 폰트가 설치되어 있지 않은 곳에서는 여전히 한글글꼴이 고정폭이 되지 못한다. 두번째로 주석부분을 수정할 때 오른쪽 테두리가 있는 경우 다시 테두리가 사각형에 맞게 고쳐야한다. 주석을 쓰면서 지나치게 많은 에너지를 소모하는 것은 바람직하지 않다/. 그래서 위의 주석은 아래처럼 쓰는 것이 좋다.
/**********************************************************
* MyBlink
*
* LED 를 1초간 켜고 끄는 것을 반복한다.
**********************************************************/
위에 추천된 폰트를 포함해서 코딩용 폰트는 알파벳 소문자 o, 대문자 O, 숫자 0 이 잘 구분되어야 하고 알파벳 대문자 I, 소문자 l, 숫자 1, 느낌표 !, 수직선(Vertical Bar) | 도 잘 구분되어야 한다. 특히 I, l , 1 이 한눈에 바로 구분되는 것이 중요하다. 이런 구분이 잘 되는 폰트를 다운받아서 사용하거나 아니면 기본 폰트중에서 Courier New 혹은 Consolas 를 사용한다. 필자도 자리를 옮기면 코딩을 하는 경우가 많고, 종종 내 PC 가 아닌 다른 PC 에서 수정작을 하는 경우가 많다. 그래서 기본으로 탑재된 위 두 폰트를 즐겨사용한다.
한줄 주석은 // 을 사용한다. 한줄로 간단하게 라이브러리, 함수가 무엇인지 설명하고, 왜 이렇게 동작하는지 설명한다.
// 이 함수는 초음파센서로부터 받은 거리를 출력한다
func( );
함수 설명을 한다. func( ) 함수가 어떤함수인지를 설명한다.
// 리셋스위치가 눌려져 초음파 센서의 상대 거리가 초기화된다
length = 0
length 가 0 이 된다는 것은 코드를 봐도 알 수 있다. 주석에 “거리가 0이 된다” 는 설명을 굳이 할 필요가 없다. 대신 그 의미나 이유를 기록하는 것이 도움이 된다. 위 주석을 통해 왜 length 가 0 이 되었는지 알 수 있게 된다.