Go - 범위 규칙 이해: 변수 가시성

안녕하세요, 프로그래밍에 도전하는 여러분! 오늘 우리는 Go 프로그래밍의 세계로 흥미로운 여정을 떠납니다. 특히 범위 규칙에 대해 집중적으로 다룰 것입니다. 프로그래밍 초보자라면 걱정하지 마세요. 이 주제를 단계별로 안내해 드릴 테니까요. 시작해 보겠습니다!

Go - Scope Rules

범위란 무엇인가?

구체적인 내용에 들어가기 전에, 프로그래밍에서 "범위"라는 단어가 무엇을 의미하는지 이해해 보겠습니다. 집안에 여러 방이 있다고 상상해 보세요. 각 방은 프로그램의 다른 부분을 상징합니다. 변수의 범위는 그 변수를 볼 수고 사용할 수 있는 방(프로그램의 부분)을 결정합니다. 흥미롭지 않나요?

로컬 변수: 방 속의 비밀 보관함

로컬 변수란 무엇인가?

로컬 변수는 당신의 방에 보관한 개인 소지품과 같습니다. 특정 함수나 코드 블록 내에서만 접근할 수 있습니다.

예제 1: 함수 내의 로컬 변수

package main

import "fmt"

func main() {
// 로컬 변수 'message'
message := "Hello, Go!"
fmt.Println(message)
}

이 예제에서 message는 로컬 변수입니다. 방(main 함수) 안에서는 읽을 수 있지만, 밖으로 나가면 사라집니다!

예제 2: 블록 범위

package main

import "fmt"

func main() {
if true {
// 로컬 변수 'secretCode'
secretCode := 1234
fmt.Println("The secret code is:", secretCode)
}
// 다음 줄을 해제하면 오류가 발생합니다
// fmt.Println(secretCode)
}

여기서 secretCode는 방 안의 책상 위에 숨겨둔 일기와 같습니다. 특정 "if" 블록 내에서만 접근할 수 있습니다.

글로벌 변수: 집 안의 인터콤

글로벌 변수란 무엇인가?

글로벌 변수는 집 안의 인터콤 시스템과 같습니다. 프로그램의 모든 방(함수)에서 접근할 수 있습니다.

예제 3: 글로벌 변수

package main

import "fmt"

// 글로벌 변수
var globalMessage = "I'm accessible everywhere!"

func main() {
fmt.Println(globalMessage)
changeMessage()
fmt.Println(globalMessage)
}

func changeMessage() {
globalMessage = "I've been changed!"
}

이 예제에서 globalMessage는 집 안의 인터콤을 통해 전달된 알림과 같습니다. 모든 함수에서 듣고 심지어 변경할 수 있습니다!

형식 매개변수: 이름표를 단 손님

형식 매개변수란 무엇인가?

형식 매개변수는 방에 초대한 손님과 같습니다. 각 손님은 이름표를 차고, 함수 내에서는 로컬 변수로 취급됩니다.

예제 4: 함수 매개변수

package main

import "fmt"

func greet(name string, age int) {
fmt.Printf("Hello, %s! You are %d years old.\n", name, age)
}

func main() {
greet("Alice", 25)
greet("Bob", 30)
}

여기서 nameage는 방(greet 함수)에 방문한 손님(매개변수)입니다. 외부에서 가져온 정보를 가지고 있지만, 함수 내에서만 알고 있습니다.

로컬과 글로벌 변수 초기화: 집을 꾸미는 것

로컬 변수 초기화

로컬 변수는 방에 들이는 물건과 같습니다. 사용하기 전에 값을 주어야 합니다(초기화).

func localInit() {
var x int    // 선언되었지만 초기화되지 않음
x = 10       // 초기화
y := 20      // 한 줄로 선언하고 초기화
fmt.Println(x, y)
}

글로벌 변수 초기화

글로벌 변수는 집안의 공용 물건과 같습니다. 초기화하지 않으면 자동으로 기본값으로 초기화됩니다.

package main

import "fmt"

var (
globalInt    int
globalString string
globalBool   bool
)

func main() {
fmt.Println(globalInt, globalString, globalBool)
// 출력: 0  false
}

범위 규칙 팁시트

이제 배운 범위 규칙을 요약한 표를 제공합니다:

변수 유형 범위 초기화 예제
로컬 변수 함수 또는 블록 사용 전에 초기화해야함 x := 10
글로벌 변수 전체 패키지 자동으로 기본값으로 초기화 var globalX int
형식 매개변수 함수 함수 호출 시 초기화 func (x int)

결론: 프로그래밍의 집

Go에서 범위를 이해하는 것은 프로그래밍의 집 구조를 알고 있는 것과 같습니다. 로컬 변수는 개인 소지품, 글로벌 변수는 집 안의 인터콤, 매개변수는 초대한 손님입니다. 이 개념을 마스터하면 Go 프로그래머로서의 실력을 키우는 데 도움이 될 것입니다!

기억하세요, 연습이 완성입니다. 이 개념을 탐구하는 작은 프로그램을 작성해 보세요. 실수는 성공의 단계입니다. 행복하게 코딩하세요, 미래의 Go 전문가 여러분!

Credits: Image by storyset