Menu
CoddyTech

`if` 문에서의 변수 섀도잉

Coddy GO 여정의 기초 섹션에 포함된 레슨. 109개 중 37번째.

if 문에서 변수 섀도잉에 대해 알아봅시다. if 문은 조건 앞에서 변수를 선언할 수 있으며, 그 변수는 if 블록과 이에 해당하는 else 블록 안에서만 존재합니다. 이 변수가 if 바깥에 있는 변수와 이름이 같으면, 해당 블록 안에서 바깥 변수를 가립니다.

먼저 조건문 바깥에 변수를 만들어 봅시다.

x := 10
fmt.Println("Original x value:", x)

이 코드를 실행한 후에는 프로그램 전체에서 사용할 수 있는 값 10을 가진 변수 x가 있게 됩니다.

이제 if 문에서 새 변수 y를 선언해 봅시다. 이 변수는 if 블록과 else 블록 안에서만 존재합니다.

if y := x * 2; y > 15 {
    fmt.Println("y is greater than 15:", y)
    // y는 이 블록 안에서만 존재합니다
} else {
    fmt.Println("y is not greater than 15:", y)
    // y는 else 블록에서도 사용할 수 있습니다
}

이 코드를 실행하면 Go는 y를 20(x * 2)으로 계산하고, 15보다 큰지 확인한 다음 첫 번째 블록을 실행합니다. 출력이 화면에 표시됩니다:

y is greater than 15: 20

마지막으로, if 문 뒤에서 변수에 접근해 봅시다:

// fmt.Println(y)는 오류를 일으킵니다 - y는 여기서 존재하지 않습니다
fmt.Println("x is still:", x)

이 코드를 실행한 후에도 x에는 계속 접근할 수 있지만, y는 더 이상 사용할 수 없습니다. if 블록과 else 블록 안에서만 존재했기 때문입니다. 출력은 화면에 다음과 같이 표시됩니다.

x is still: 10

이는 if 문에서 선언된 변수의 범위를 보여 줍니다. 변수 y는 선언된 조건 블록 안에서만 접근할 수 있습니다. 바깥쪽에 y가 없으므로 여기서는 아무것도 가려지지 않습니다. 대신 변수 이름을 x로 지었다면 해당 블록 안에서 바깥쪽 x를 가리게 되며, 블록을 벗어난 뒤에도 바깥쪽 x는 여전히 10입니다.

challenge icon

챌린지

초급

이 챌린지에서는 if 문에서 변수 섀도잉을 연습합니다. if 블록 안에 선언된 변수가 바깥쪽 범위의 변수와 같은 이름을 가지면서도 다른 값을 가질 수 있는 방법을 살펴봅니다.

코드에는 바깥쪽 범위에 message 변수가 있습니다. 같은 이름을 가진 섀도잉 변수를 if 블록 안에 만든 다음 두 변수를 모두 출력하여 섀도잉 효과를 확인하는 것이 과제입니다.

직접 해보기

package main

import "fmt"

func main() {
	// 바깥 스코프 변수
	message := "Hello from outer scope"
	
	isLoggedIn := true
	
	if isLoggedIn {
		// TODO: 값이 "Hello from inner scope"인 'message'라는 새 변수를 만드세요
		
		// 내부 스코프의 message를 출력합니다
		fmt.Println(message)
	}
	
	// 바깥 스코프의 message를 출력합니다
	fmt.Println(message)
}
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

기초의 모든 레슨

직접 연습해 보세요: 온라인 Go 컴파일러