[Go 공식문서 한국어 정리] ①4④. Go 선언 구문
Go 선언 구문
https://go.dev/blog/declaration-syntax
Go의 선언 구문은 C 계열 언어와 다르게 왼쪽에서 오른쪽으로 읽는 방식을 채택했습니다. 이 글에서는 C의 선언 방식과 Go의 선언 방식을 비교하고, Go가 이런 선택을 한 이유를 설명합니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
① 서론
Go를 처음 접하는 사람들은 선언 구문이 C와 왜 다른지 궁금해합니다. C는 "표현식의 타입을 기술"하는 독특한 방식을 사용하는 반면, Go는 더 명확한 왼쪽-오른쪽 방식을 사용합니다.
② 핵심 개념
1. C의 방식: 변수를 사용한 표현식의 타입을 선언합니다. int *p;는 *p가 int라는 의미입니다.
2. Go의 방식: "이름 타입" 형태로 왼쪽에서 오른쪽으로 읽습니다. x int는 "x는 int다"라고 읽습니다.
3. 명확성: 복잡한 타입에서도 Go의 방식이 더 읽기 쉽습니다.
4. 포인터 예외: * 표기는 C의 친숙함을 위해 유지되었습니다.
③ 주요 내용 상세
C의 복잡한 선언
int (*fp)(int (*)(int, int), int)
- fp는 함수 포인터인데, 인자로 함수 포인터를 받고...
- 이름을 어디에 넣어야 할지, 무슨 타입인지 한눈에 알기 어렵습니다.
Go의 명확한 선언
f func(func(int,int) int, int) int
- "f는 함수로, (int,int)를 받아 int를 반환하는 함수와 int를 인자로 받아 int를 반환한다"
- 왼쪽에서 오른쪽으로 자연스럽게 읽힙니다.
함수 반환 타입이 함수인 경우
f func(func(int,int) int, int) func(int, int) int
- C에서는 거의 읽을 수 없는 수준이지만, Go에서는 여전히 왼쪽에서 오른쪽으로 읽을 수 있습니다.
포인터와 배열/슬라이스
var a []int // 타입: []int
x = a[1] // 표현식: a[1]
var p *int // 타입: *int
x = *p // 표현식: *p
배열/슬라이스는 타입과 표현식에서 괄호 위치가 다르지만, 포인터는 C와 동일한 *를 사용합니다. 후위 *는 곱셈과 혼동될 수 있어 Pascal의 ^ 대신 *를 유지했습니다.
클로저
sum := func(a, b int) int { return a+b } (3, 4)
- 타입과 표현식 구문이 분리되어 있어 클로저를 쉽게 작성하고 호출할 수 있습니다.
④ 실전 활용
- 복잡한 함수 타입을 선언할 때 Go의 왼쪽-오른쪽 방식이 훨씬 가독성이 높습니다.
- 인터페이스나 콜백 함수 타입을 정의할 때 명확합니다.
- C에서 온 개발자는 처음에 어색할 수 있지만, 익숙해지면 더 직관적입니다.
- (*int)(nil)처럼 포인터 변환 시 괄호가 필요한 점만 주의하면 됩니다.
⑤ 정리
Go의 선언 구문은 왼쪽에서 오른쪽으로 읽는 명확한 방식을 채택했습니다. C의 "나선형 규칙"과 달리 복잡한 타입에서도 가독성을 유지하며, 이름이 항상 먼저 오므로 무엇을 선언하는지 한눈에 알 수 있습니다. 포인터 표기만 C의 전통을 따른 예외입니다.
#Go #Golang #선언구문 #Declaration #Syntax #C언어 #공식문서

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