Menu
Coddy logo textTech

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

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

if 문에서의 변수 섀도잉(variable shadowing)에 대해 배워봅시다. 이를 통해 if 블록과 그에 관련된 else 블록 내에서만 존재하는 변수를 생성할 수 있습니다.

먼저, 조건문 외부에서 변수를 생성해 보겠습니다:

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

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

이제 if 문에서 변수 섀도잉(variable shadowing)을 사용하여 해당 블록 내에서만 존재하는 새 변수를 만들어 보겠습니다.

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에 접근할 수 있지만, yifelse 블록 내에서만 존재했기 때문에 더 이상 사용할 수 없습니다. 화면에는 다음과 같은 출력이 표시됩니다:

x is still: 10

이것은 if 문에서 변수 섀도잉(variable shadowing)이 어떻게 작동하는지 보여줍니다. 변수 y는 선언된 조건부 블록 내에서만 접근할 수 있습니다.

challenge icon

챌린지

초급

이 챌린지에서는 if 문에서의 변수 섀도잉(variable shadowing)을 연습합니다. if 블록 내부에서 선언된 변수가 외부 스코프의 변수와 동일한 이름을 가질 수 있지만, 서로 다른 값을 가질 수 있음을 확인하게 됩니다.

코드의 외부 스코프에 message 변수가 있습니다. 여러분의 과제는 if 블록 내부에 동일한 이름의 섀도잉된 변수를 생성한 다음, 두 변수를 모두 출력하여 섀도잉 효과를 확인하는 것입니다.

치트 시트

if 문에서의 변수 섀도잉(Variable shadowing)은 조건부 블록과 그와 관련된 else 블록 내에서만 존재하는 변수를 생성할 수 있게 해줍니다.

if 문에서의 변수 섀도잉 구문:

if variable := expression; condition {
    // variable은 이 블록 내에서만 존재합니다
} else {
    // variable은 else 블록에서도 사용할 수 있습니다
}

예제:

x := 10
if y := x * 2; y > 15 {
    fmt.Println("y is greater than 15:", y)
} else {
    fmt.Println("y is not greater than 15:", y)
}
// y는 여기에서 더 이상 접근할 수 없습니다
fmt.Println("x is still:", x)

섀도잉된 변수는 선언된 ifelse 블록 내에서만 접근 가능하며, 블록 외부에서는 접근할 수 없습니다.

직접 해보기

package main

import "fmt"

func main() {
	// 외부 범위 변수
	message := "Hello from outer scope"
	
	isLoggedIn := true
	
	if isLoggedIn {
		// TODO: "Hello from inner scope" 값을 가진 'message'라는 이름의 새 변수를 생성하세요
		
		// 이것은 내부 범위 메시지를 출력합니다
		fmt.Println(message)
	}
	
	// 이것은 외부 범위 메시지를 출력합니다
	fmt.Println(message)
}
quiz icon실력 점검

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

기초의 모든 레슨