`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입니다.
챌린지
초급이 챌린지에서는 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)
}이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
기초의 모든 레슨
2변수와 기본 자료형
변수란 무엇인가`:=`를 이용한 타입 추론정수 (int)부동 소수점 수불리언 (Booleans)문자열 (Strings)제로 값 (Zero Values)상수명명 규칙요약 - 변수와 타입6제어 흐름: 조건문
`if` 문`else` 키워드`else if` 키워드`if` 문에서의 변수 섀도잉변수 초기화`switch` 문표현식이 있는 Switch표현식이 없는 Switch`fallthrough` 키워드요약 - 의사 결정하기직접 연습해 보세요: 온라인 Go 컴파일러