Go

Go 언어의 `:=` 연산자, 그 숨겨진 이야기!

드리프트2 2024. 10. 30. 21:07

Go 언어의 := 연산자, 그 숨겨진 이야기!

Go 언어로 개발하다 보면, 변수 선언과 초기화를 동시에 처리하는 := 연산자를 자주 사용하게 됩니다.

 

간편하고 효율적인 이 연산자, 혹시 어디에서 유래했는지 궁금해 본 적 있으신가요?

 

오늘은 Go 언어의 := 연산자, 즉 생략 변수 선언 연산자의 역사적 뿌리를 파헤쳐 보겠습니다.

 

과거 언어들의 영향을 알아보면서 Go 언어의 탄생 배경과 디자인 철학을 더 깊이 이해할 수 있을 거예요!

 

:= 연산자, Go 언어에서 어떻게 쓰이나요?

Go 언어에서는 := 연산자를 사용하여 변수를 선언하면서 동시에 초기화할 수 있습니다.

package main

import "fmt"

func main() {
    message := "Hello, World!" 
    number := 42 
    fmt.Println(message, number) 
}

 

위 예시에서 messagenumber 변수는 := 연산자에 의해 선언되고, 각각 문자열과 정수로 초기화됩니다.

 

Go 언어는 이처럼 간결한 표현으로 변수 선언의 효율성을 높였습니다.

 

Go 언어의 뿌리, 잠깐 들여다볼까요?

:= 연산자의 기원을 알아보기 전에, 먼저 Go 언어의 뿌리를 살펴보겠습니다.

 

아래 그림은 Go 언어에 영향을 준 언어들을 나타낸 것입니다. 화살표는 영향을 준 방향을 가리킵니다.

  BCPL -->  B -->  C -->
     \-----------------> Go
      ->  Algol 60 --> Pascal

 

Go 언어 := 연산자의 숨겨진 족보!

 

 

Go 언어의 := 연산자는 1960년대 Algol 60과 그 이후 Pascal이라는 고전적인 언어의 영향을 받았습니다.

 

Algol 60은 많은 현대 언어의 기초를 다진 언어인데요. 이 언어에서 :=변수에 값을 대입하는 연산자로 사용되었습니다.

 

Algol 60의 영향을 받은 Pascal 또한 :=를 대입 연산자로 채택했습니다.

 

과거 교육용 언어로 널리 사용되었던 Pascal은 당시에는 간결하고 명확한 문법으로 큰 인기를 얻었습니다.

 

즉, Go 언어의 := 연산자는 Algol 60과 Pascal의 := 연산자에서 아이디어를 얻어 탄생했습니다.

 

하지만 Go 언어에서는 단순한 대입 연산자를 넘어, 변수 선언과 초기화를 동시에 처리하는 생략 변수 선언 연산자로 발전했습니다.

 

생략 변수 선언, 주의할 점은 없을까요?

섀도잉(Shadowing) 함정, 조심하세요!

생략 변수 선언을 사용할 때, 같은 이름의 변수를 다른 범위에서 다시 선언하는 실수를 저지를 수 있습니다.

 

이를 섀도잉(Shadowing)이라고 하는데요.

 

아래 예시처럼, 같은 이름의 변수가 다른 범위에서 사용되면 예상치 못한 결과가 발생할 수 있습니다.

x := 1 
if x := 2; x > 1 { 
    fmt.Println(x) // 2 출력
}
fmt.Println(x) // 1 출력

 

마무리

 

Go 언어의 생략 변수 선언 연산자 :=는 Algol과 Pascal이라는 역사적인 프로그래밍 언어의 영향을 받아 탄생했습니다.

 

과거의 단순한 대입 연산자에서, 현대적인 개발 환경에 맞춰 변수 선언과 초기화를 동시에 처리하는 강력한 연산자로 진화한 것이죠.

 

앞으로 Go 언어로 개발할 때, := 연산자를 사용할 때마다 그 숨겨진 역사와 편리함을 떠올려 보세요.

 

과거의 아이디어가 현재 우리의 개발 생산성을 높이는 데 기여하고 있다는 사실을 새삼 느낄 수 있을 겁니다!