세미콜론
세미콜론 (Semicolons)
Go 코드를 짜다 보면 문장 끝에 세미콜론(;)을 거의 붙이지 않아요. 그런데 공식 문법상으로는 문장을 끝낼 때 세미콜론이 꼭 필요한 경우가 많아요. 어떻게 이게 가능한 걸까요? 그 비밀은 Go의 '자동 세미콜론 삽입' 규칙에 있어요. 이번에는 어떤 상황에서 세미콜론이 자동으로 들어가고, 언제 생략해도 되는지 함께 살펴볼게요.
출처: Go Specification
본문
공식 문법은 여러 생성 규칙(production)에서 문장을 끝내는 종결자(terminator)로 세미콜론 ";" 을 사용해요. 그런데 Go 프로그램은 대부분의 세미콜론을 생략할 수 있어요. 그게 가능한 이유는 다음 두 규칙 덕분이에요.
-
입력을 토큰으로 나눌 때, 어떤 줄의 마지막 토큰이 아래 중 하나에 해당하면 그 토큰 바로 다음에 세미콜론이 자동으로 삽입돼요.
- 식별자(identifier)
- 정수(integer), 부동소수점(floating-point), 허수(imaginary), 룬(rune), 문자열(string) 리터럴
- 키워드(keywords) 중 하나:
break,continue,fallthrough,return - 연산자와 구두점(operators and punctuation) 중 하나:
++,--,),],}
-
복잡한 문장을 한 줄에 이어서 쓸 수 있게, 닫는
")"이나"}"앞에서는 세미콜론을 생략해도 돼요.
첫 규칙이 핵심이에요. 예를 들어 함수를 정의하다가 }가 아니라 )으로 인자를 끝내고 줄을 바꾸면, 그 ) 바로 뒤에 세미콜론이 자동으로 들어가요. 그래서 우리가 일일이 세미콜론을 쓰지 않아도 문법이 깨지지 않아요. 마찬가지로 return 같은 키워드로 줄을 끝내도 세미콜론이 자동으로 채워지죠.
이 규칙들 덕분에 이 문서의 코드 예제들도 관용적인(idiomatic) 방식에 맞춰 세미콜론을 생략하고 있어요. 코드를 읽거나 쓸 때 세미콜론이 눈에 안 보여도, 실제로는 위 규칙에 따라 문장이 제대로 구분된다는 점을 기억해 두면 돼요.
더 알아보기
- 세미콜론 자동 삽입을 받는 토큰들, 특히 식별자(Identifiers)와 키워드(Keywords)를 함께 보면 규칙이 더 잘 와닿아요.
- 연산자와 구두점(Operators and punctuation) 섹션에서
++,--같은 토큰의 전체 목록을 확인할 수 있어요. - Go 사양 전체는 The Go Programming Language Specification에서 볼 수 있어요.