Go - 변수: 프로그래밍 마법의 관문
안녕하세요, 미래의 코딩 마법사 여러분! Go 프로그래밍의 세계로의 흥미로운 여정에 여러분을 안내하게 되어 기쁩니다. 오늘 우리는 변수의 마법적인 세계로 뛰어들어 볼 거예요. 그럼, 키보드(마법의 지팡이)를 잡고 코딩의 마법을 부르세요!
변수는 무엇인가요?
Go 특정 사항에 이전에 잠시 멈춰서서 변수가 무엇인지 이해해 보겠습니다. 상상해 보세요, 것을 보관할 수 있는 상자가 있습니다. 프로그래밍에서 변수는 그 상자와 같아요 - 데이터를 보관하는 컨테이너입니다. 이 데이터는 숫자, 텍스트, 혹은 더 복잡한 정보일 수 있습니다. 변수의 아름다움은 상자 안의 것을 바꿀 수 있다는 점(따라서 "variable"이라는 이름)과 프로그램의 다른 부분에서 사용할 수 있다는 점입니다.
이제 Go가 이 마법의 컨테이너를 어떻게 다루는지 보겠습니다!
Go에서 변수 정의
Go에서 변수 정의는 데이터를 보관할 레이블이 달린 상자를 만드는 것과 같습니다. 몇 가지 방법이 있지만, 가장 기본적인 방법으로 시작해 보겠습니다:
var name string = "Gopher"
이를 간단히 설명하자면:
-
var
: 이 키워드는 Go에게 우리가 변수를 선언하고 있다고 알립니다. -
name
: 이는 우리의 변수의 이름(상자에 달린 레이블)입니다. -
string
: 이는 변수가 보관할 데이터의 유형입니다(이 경우 텍스트입니다). -
"Gopher"
: 이는 변수에 저장할 실제 값입니다.
이를 "Hey Go, 'name'이라는 레이블이 달린 상자를 만들어 text를 보관할 수 있게 하고, 지금 'Gopher'를 넣어달라"고 말하는 것과 같습니다.
Go에서의 정적 유형 선언
정적 유형 선언은 상자에 무엇을 넣기 전에 Go에게 정확히 어떤 종류의 상자를 원하는지 알리는 것입니다. 이는 변수가 무엇을 보관할 수 있는지 매우 구체적으로 설명하는 방법입니다. 다음은 몇 가지 예제입니다:
var age int
var height float64
var isStudent bool
이 예제들에서 우리는 변수를 만들었지만 아직 값을 넣지 않았습니다. 우리는 단지 Go에게 변수가 어떤 데이터를 보관할 것인지 알리고 있습니다:
-
age
는 정수(whole numbers)를 보관할 것입니다. -
height
는 부동소수점 수(floating-point numbers)를 보관할 것입니다. -
isStudent
는 참/거짓 값(true/false values)를 보관할 것입니다.
이를 "나는 정수를 보관할 상자, 부동소수점 수를 보관할 상자, 그리고 참/거짓 답을 보관할 상자가 필요하다"고 말하는 것과 같습니다.
Go에서의 동적 유형 선언 / 유형 추론
이제 Go가 정말 쿨해지는 부분입니다. Go는 무엇을 넣는지 보고 필요한 상자 종류를 자동으로 알 수 있습니다! 이를 유형 추론(type inference)이라고 합니다. 다음을 보세요:
name := "Gopher"
age := 25
height := 5.9
isStudent := true
이 예제들에서 우리는 :=
연산자를 사용하고 있습니다. 이는 Go에게 "Hey, 새로운 변수를 만들고 무엇을 넣는지 보고 그에 맞는 유형을 결정해달라"고 말하는 것입니다. Go는 다음과 같이 알 수 있습니다:
-
"Gopher"
는name
이 string이어야 한다는 것을 의미합니다. -
25
는age
가 int이어야 한다는 것을 의미합니다. -
5.9
는height
가 float64이어야 한다는 것을 의미합니다. -
true
는isStudent
가 bool이어야 한다는 것을 의미합니다.
이는 마법처럼 Go가 각 데이터에 맞는 상자를 자동으로 만드는 것입니다!
Go에서의 복합 변수 선언
때로는 여러 변수를 동시에 만들고 싶을 수 있습니다. Go는 이를 깔끔하고 정리된 방법으로 허용합니다:
var (
name string = "Gopher"
age int = 25
height float64 = 5.9
isStudent bool = true
)
이는 여러 상자를 한꺼번에 만드는 것과 같습니다. 관련된 변수를 함께 보관하고 코드를 정리하는 데 유용합니다.
lvalues와 rvalues
이제 좀 더 고급 내용에 대해 이야기해 보겠습니다: lvalues과 rvalues. 걱정 마세요! 두려운 것은 아닙니다!
- lvalue(왼쪽 값)은 할당의 왼쪽에 나타날 수 있는 것입니다. 상자의 레이블과 같습니다.
- rvalue(오른쪽 값)은 할당의 오른쪽에 나타날 수 있는 것입니다. 상자에 넣는 것입니다.
다음은 예제입니다:
name := "Gopher" // name은 lvalue, "Gopher"는 rvalue
age := 25 // age는 lvalue, 25는 rvalue
이를 다음과 같이 생각해 보세요: lvalue는 무엇을 저장할 곳의 주소이고, rvalue는 저장할 것입니다.
모든 것을 합쳐서
이제 우리가 배운 모든 것을 하나의 작은 프로그램으로 정리해 보겠습니다:
package main
import "fmt"
func main() {
// 정적 유형 선언
var greeting string
// 동적 유형 선언
name := "Gopher"
// greeting에 값 할당
greeting = "Hello"
// 변수 사용
fmt.Println(greeting + ", " + name + "!")
// 복합 선언
var (
age int = 25
height float64 = 5.9
isStudent bool = true
)
// 변수 사용
fmt.Printf("%s is %d years old, %.1f feet tall, and it's %t that they're a student.",
name, age, height, isStudent)
}
이 프로그램은 다음과 같은 출력을 생성합니다:
Hello, Gopher!
Gopher is 25 years old, 5.9 feet tall, and it's true that they're a student.
그리고 여기서 끝입니다! 여러분은 첫 번째 Go 마법을 부르셨습니다. 연습이 완벽을 만들어 줍니다. 다양한 유형의 변수와 그 사용 방법을 계속 실험해 보세요. 얼마 지나지 않아 Go 프로그래밍 마법사가 되실 것입니다!
여기서 배운 변수 선언 방법을 요약한 표를 제공합니다:
방법 | 문법 | 예제 | 설명 |
---|---|---|---|
정적 유형 선언 | var name type |
var age int |
특정 유형의 변수 선언 |
정적 유형 선언 및 초기화 | var name type = value |
var name string = "Gopher" |
특정 유형의 변수 선언 및 초기화 |
동적 유형 선언 | name := value |
age := 25 |
유형을 추론하여 변수 선언 및 초기화 |
복합 선언 | var ( ... ) |
위 예제 참조 | 여러 변수를 동시에 선언 |
미래의 Go 마스터 여러분, 행복하게 코딩하세요! 모든 위대한 프로그래머는 여러분이 현재 있는 자리에서 시작했습니다. 연습을 게을리하지 말고, 호기심을 유지하며, 가장 중요한 것은 코드에 즐거움을 느끼세요!
Credits: Image by storyset