세미콜론

세미콜론 (Semicolons)

Go 코드를 짜다 보면 문장 끝에 세미콜론(;)을 거의 붙이지 않아요. 그런데 공식 문법상으로는 문장을 끝낼 때 세미콜론이 꼭 필요한 경우가 많아요. 어떻게 이게 가능한 걸까요? 그 비밀은 Go의 '자동 세미콜론 삽입' 규칙에 있어요. 이번에는 어떤 상황에서 세미콜론이 자동으로 들어가고, 언제 생략해도 되는지 함께 살펴볼게요.

출처: Go Specification

본문

공식 문법은 여러 생성 규칙(production)에서 문장을 끝내는 종결자(terminator)로 세미콜론 ";" 을 사용해요. 그런데 Go 프로그램은 대부분의 세미콜론을 생략할 수 있어요. 그게 가능한 이유는 다음 두 규칙 덕분이에요.

  1. 입력을 토큰으로 나눌 때, 어떤 줄의 마지막 토큰이 아래 중 하나에 해당하면 그 토큰 바로 다음에 세미콜론이 자동으로 삽입돼요.

  2. 복잡한 문장을 한 줄에 이어서 쓸 수 있게, 닫는 ")" 이나 "}" 앞에서는 세미콜론을 생략해도 돼요.

첫 규칙이 핵심이에요. 예를 들어 함수를 정의하다가 }가 아니라 )으로 인자를 끝내고 줄을 바꾸면, 그 ) 바로 뒤에 세미콜론이 자동으로 들어가요. 그래서 우리가 일일이 세미콜론을 쓰지 않아도 문법이 깨지지 않아요. 마찬가지로 return 같은 키워드로 줄을 끝내도 세미콜론이 자동으로 채워지죠.

이 규칙들 덕분에 이 문서의 코드 예제들도 관용적인(idiomatic) 방식에 맞춰 세미콜론을 생략하고 있어요. 코드를 읽거나 쓸 때 세미콜론이 눈에 안 보여도, 실제로는 위 규칙에 따라 문장이 제대로 구분된다는 점을 기억해 두면 돼요.

더 알아보기