HOWTO · Go
C의 삼항 연산자에 해당하는 관용적인 Go 표현
이 튜토리얼에서는 if-else 문을 사용하여 C의 삼항 연산자에 해당하는 관용적인 Go 표현을 살펴봅니다. 명확한 예제와 설명을 통해 Go에서 조건부 로직을 구현하는 방법을 배웁니다. 가독성과 유지보수성을 강조하는 Go의 설계 철학이 코드를 더 쉽게 이해할 수 있게 만드는 이점을 알아보세요.
이 페이지의 내용
Go에는 삼항 연산자가 없습니다. 조건에서 값을 선택하려면 if/else 문을 사용하고 각 분기에서 결과를 할당하세요. 이렇게 하면 결정이 제어 흐름으로 눈에 보이게 유지되며 문이 허용되는 모든 곳에서 작동합니다.
C의 삼항 연산자가 하는 일
C의 조건 연산자는 condition ? true_expression : false_expression 형식을 사용합니다. 피연산자는 세 개입니다: 조건 하나와 결과를 제공하는 두 개의 식입니다. C는 조건을 평가한 다음, 참일 때는 ? 뒤의 식을, 거짓일 때는 : 뒤의 식을 평가합니다. 예를 들어, int b = (a > 3) ? 10 : 20;은 a가 3보다 클 때 b에 10을 할당하고, 그렇지 않을 때 20을 할당합니다.
이 형식은 식이므로 더 큰 식 내부나 할당의 오른쪽에 나타날 수 있습니다. Go에는 의도적으로 이에 해당하는 인라인 조건식이 없습니다. Go의 if 문은 문이므로, Go 번역에서는 C가 식을 기대하는 위치에 if를 넣으려고 하지 않고 분기 안에 할당을 배치합니다.
Go에서 if-else 사용하기
다음의 완전한 프로그램은 C 할당을 번역하고, 부울 조건에서 1 또는 0을 할당하는 방법도 보여줍니다. 짧은 선언 a := 5는 a를 만들고 초기화합니다; var b int는 어느 분기가 할당하기 전에 b를 선언합니다. else 분기는 if 분기의 닫는 중괄호에 붙어 있어야 합니다. a를 변경하여 각 결정이 어떤 값을 할당하는지 확인하세요.
package main
import "fmt"
func main() {
a := 5
var b int
if a > 3 {
b = 10
} else {
b = 20
}
var isLarge int
if a > 3 {
isLarge = 1
} else {
isLarge = 0
}
fmt.Println(b)
fmt.Println(isLarge)
}
10
1
첫 번째 결정은 10과 20 중에서 선택하며, C 할당과 일치합니다. 두 번째 결정은 조건을 정수 플래그로 변환합니다. 이는 각 분기에서의 일반적인 할당입니다. 위 출력은 프로그램이 출력한 값을 보여줍니다.
if에는 if n := len(items); n > 0 { ... }와 같은 초기화 문도 포함될 수 있습니다. 거기서 선언된 변수는 해당 if 문과 그 else 분기로 제한됩니다. 이 형식은 값이 해당 결정에만 필요할 때 사용하세요; 그렇지 않으면 뒤의 코드가 사용할 수 있도록 문 앞에 선언하세요.
Go에서 여러 조건 처리하기
결정에 두 개보다 많은 결과가 있을 때, if/else if 체인은 순서를 명시적으로 만듭니다. Go는 조건을 위에서 아래로 검사하고 처음 일치하는 분기를 실행합니다; 마지막 else는 나머지 모든 값을 처리합니다. 특히 하나의 조건이 다른 조건과 일치하는 값을 포함할 경우, 가장 유용한 구분을 명확한 순서로 배치하세요.
하나의 식에 대한 여러 상호 배타적인 값의 경우, switch가 긴 체인보다 살펴보기 쉬울 수 있습니다. 일반적인 switch는 하나의 값을 그 case 값들과 비교합니다. Go는 식이 없는 switch도 허용하는데, 각 case에 부울 조건이 들어가며, 이는 if/else if 체인과 비슷합니다. 예를 들어, switch { case score >= 90: grade = "A"; case score >= 80: grade = "B"; default: grade = "C" }는 순서가 있는 범위를 표현합니다. 서식이 지정된 Go 소스에서는 가독성을 위해 각 case 본문을 자체 줄에 배치하세요.
switch도 if 체인도 삼항식이 아닙니다: 둘 다 어떤 문이 실행될지를 제어하는 문입니다. 작은 결정이나 순서가 있는 조건에는 if/else를 선택하고, 여러 경우를 그룹화하면 선택을 더 쉽게 이해할 수 있을 때 switch를 선택하세요. switch는 하나의 옵션일 뿐, 보편적으로 더 나은 대체재는 아닙니다; 결정의 형태가 선택을 이끌어야 합니다.
FAQ
C의 삼항 연산자란 무엇인가요?
이는 C의 조건 연산자로, condition ? true_expression : false_expression으로 작성됩니다. 조건이 두 결과 식 중 하나를 선택합니다.
Go에는 삼항 연산자가 있나요?
아니요. Go는 조건부 로직에 if/else 문을 사용합니다. 할당이나 함수 인수에서 if 문을 인라인 식으로 사용할 수 없습니다.
Go에서 중첩된 if-else 문을 사용할 수 있나요?
예. 여러 결과의 경우, 각 if를 다른 if 안에 중첩하는 것보다 else if 체인을 따르는 것이 더 쉬운 경우가 많습니다. 두 형식 모두 문이며, 각 분기는 값을 할당하거나 다른 작업을 수행할 수 있습니다.
대신 switch를 사용해야 하는 경우는 언제인가요?
경우들이 명확한 대안 집합을 이룰 때, 또는 식이 없는 switch가 여러 관련 조건을 더 쉽게 읽을 수 있게 만들 때 switch를 사용하세요. 순서가 있는 비교가 결정을 더 직접적으로 전달할 때 if/else if 체인을 사용하세요.
실용적인 번역은 조건과 그 대안을 명시적으로 유지하는 것입니다: C 코드를 읽을 때는 C의 ?:를 사용하고, 해당하는 Go 제어 흐름에는 Go의 if/else 문이나 switch 문을 사용하세요.