소스 파일의 구성
소스 파일의 구성
Go 프로그램 하나를 두고 "정확히 파일 안에 무엇이 들어 있는 걸까" 궁금해 본 적이 있나요? 이번 섹션에서는 소스 파일 하나가 어떤 순서로, 어떤 요소들로 이뤄지는지 그 규칙을 쭉 정리해 볼게요.
출처: Go Specification
본문
각 소스 파일은 세 영역이 차례대로 이어지는 구조예요. 맨 앞에는 **package 절(package clause)**이 와서 이 파일이 어느 패키지에 속하는지를 정의하고요, 그다음에 가져다 쓰고 싶은 패키지를 선언하는 import 선언이 이어지고, 마지막으로 함수·타입·변수·상수에 대한 선언들이 따라와요.
이때 import 선언이나 최상위 선언은 "비어 있을 수도 있는" 집합이라는 점이 포인트예요. 필요한 게 없으면 그냥 비워 두면 되고, 여러 개면 그만큼 나열하면 돼요. 이 위계는 EBNF로 이렇게 표현돼요:
SourceFile = PackageClause ";" { ImportDecl ";" } { TopLevelDecl ";" } .
규칙을 왼쪽에서 오른쪽으로 읽어 보면 금방 와 닿아요. PackageClause 하나가 먼저 오고, 그 뒤로 { ImportDecl ";" }, 즉 0개 이상의 import 선언이 반복되고, 마지막에 { TopLevelDecl ";" }, 0개 이상의 최상위 선언이 붙는 구조죠. 중괄호 { }는 "그 안을 0번 이상 반복한다"는 뜻이라, '없어도 되는 집합'이라는 말이 이 표기 하나로 자연스럽게 드러나요.
더 알아보기
- 파일이 어느 패키지에 속하는지를 정하는 규칙은 Package clause에서 다뤄요.
- 가져다 쓸 패키지를 선언하는 방법은 Import declarations에서 확인할 수 있어요.
- 파일 가장 바깥에 놓이는 선언들은 Top-level declarations과 이어져요.