[Go 공식문서 한국어 정리] ⓪11. Go 선언문 문법의 비밀
[Go 공식문서 한국어 정리] ⓪11. Go 선언문 문법의 비밀
원문 제목: Go's Declaration Syntax
작성자: Rob Pike
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📌 1. 서론 — 이 문서가 다루는 내용
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Go를 처음 접하는 사람들은 선언 문법이 C 계열과 왜 다른지 궁금해합니다.
이 글은 두 접근 방식을 비교하고, Go의 선언이 왜 그런 모양인지 설명합니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📌 2. 핵심 개념
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
① C의 선언 문법 — 표현식 중심
C는 선언문을 표현식으로 작성합니다.
int x;는 x가 int라는 뜻입니다.
int *p;는 *p가 int이므로 p는 int 포인터입니다.
이는 영리한 문법이지만 복잡해지면 읽기 어렵습니다.
② Go의 선언 문법 — 왼쪽에서 오른쪽으로
Go는 이름을 먼저 쓰고 타입을 나중에 씁니다.
x int, p *int, a [3]int처럼 왼쪽에서 오른쪽으로 읽습니다.
더 간결하고 명확합니다.
③ 함수 선언의 차이
C: int main(int argc, char *argv[])
Go: func main(argc int, argv []string) int
Go는 "함수 main은 int와 string 슬라이스를 받아 int를 반환한다"고 직관적으로 읽힙니다.
④ 복잡한 타입도 명확하게
Go에서 함수 변수 선언:
f func(func(int,int) int, int) int
왼쪽에서 오른쪽으로 읽으면 명확합니다.
반환 타입이 함수여도 헷갈리지 않습니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📌 3. 주요 내용 상세
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
C의 선언 문법은 "표현식에 해당하는 타입을 기술한다"는 아이디어입니다.
int (*fp)(int a, int b);는 (*fp)(a, b)가 int를 반환하므로 fp는 함수 포인터입니다.
인자 자체가 함수일 때:
int (*fp)(int (*ff)(int x, int y), int b)
읽기 매우 어렵습니다.
매개변수 이름을 생략하면:
int (*fp)(int (*)(int, int), int)
fp의 이름을 어디에 넣어야 할지조차 불분명합니다.
반환 타입이 함수 포인터라면:
int (*(*fp)(int (*)(int, int), int))(int, int)
fp에 관한 선언인지조차 알아보기 힘듭니다.
C에서 타입과 표현식 문법이 같기 때문에 파싱이 어렵습니다.
그래서 C의 캐스트는 항상 괄호로 타입을 감쌉니다: (int)M_PI
Go는 이름이 항상 먼저 옵니다.
func main(argc int, argv []string) int
왼쪽에서 오른쪽으로 읽기 쉽습니다.
매개변수 이름을 제거핍도 혼란이 없습니다.
func main(int, []string) int
이름은 항상 맨 앞에 있으니까요.
클로저 작성도 쉽습니다.
sum := func(a, b int) int { return a+b } (3, 4)
포인터는 예외입니다.
Go는 C의 * 표기를 유지했습니다.
var p *int; x = *p
후위 *는 곱셈과 혼동되므로 사용할 수 없었습니다.
Pascal의 ^를 쓸 수도 있었지만 익숙한 C 표기를 선택했습니다.
그 대신 (*int)(nil) 같은 변환에서는 괄호가 필요합니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📌 4. 실전 활용 / 예시
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Go의 왼쪽-오른쪽 선언 스타일은 코드 리뷰와 문서 작성 시 가독성을 크게 높입니다.
특히 고차 함수(higher-order function)나 콜백 타입을 선언할 때 C보다 훨씬 직관적입니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📌 5. 정리
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Go의 선언 문법은 왼쪽에서 오른쪽으로 읽습니다.
이름이 항상 먼저 오므로 어떤 식별자를 선언하는지 항상 명확합니다.
복잡한 함수 포인터나 중첩 타입도 C의 "나선형 규칙" 없이 이해할 수 있습니다.
📎 출처 링크
https://go.dev/blog/declaration-syntax
#Go #Golang #syntax #declaration #공식문서

오뉴노노 님의 최근 댓글
ㅋㅋㅋㅋㅋ 2019 01.14 잘 읽었습니다 2018 12.30 포인트가 없어서 아직 시작을 못하고있는데요! 글은 잘 읽었습니다! 포인트 쌓고 도전할거에요 2018 12.30