『Tucker의 Go 언어 프로그래밍』 스터디 요약 노트 : 9강 if문

2021. 5. 24. 00:10개발/Golang

728x90
반응형

프로그래밍에서 if문 잘써도 왠만한 코딩이 가능하다고한다. 이번에는 if문을 공부해보고 요약해보고자 한다.

 

1. if문 기본 사용법

if 조건문 {
	문장
} else if 조건문 {
	문장
} else {
	문장
}
  • 만족하는 조건문의 {} 안에 문장을 실행합니다. 만족하는 조건문이 없음면 else 구문 {}안에 있는 문장을 실행합니다.
  • else if와 else 구문은 생략이 가능합니다.

 

else문 예제

package main

import "fmt"

func main() {
	light := "red"
    
    if light == "green" {
    	fmt.Println("길을 건넌다")
       	} else {
        fmt.Println("대기한다")
        }
    }

결과값

else if문 예제

package main

import "fmt"

func main() {
	temp := 33

if temp > 28 {
	fmt.Println("에어컨을 킨다.")
} else if temp <= 3 {
	fmt.Println("히터를 킨다.")
} else {
	fmt.Println("대기한다.")
    }
}

결과값

2. &&, ||

- && 와 || 는 논리 연산자입니다. &&는 AND를 의미하고 '그리고'로 해석하며, ||는 OR을 의미하고 '또는'으로 해석

- &&는 양쪽이 True인경우에만 True가되고 ||은 둘중 하나만 True여도 True가 됩니다.

package main

import "fmt"

func main() {
	var age = 22
    
    if age >= 10 && age <=15 { 
    // age가 10이상 15이하인 경우
    fmt.Println("you are young")
    } else if age > 30 || age < 20 {
    // age가 30보다 크커간 20보다 작은경우, 즉 20대가 아닌경우
    fmt.Println("you are not 20s")
    } else {
    fmt.Println("Best age of your life")
    }
 }

결과값

  • age가 22므로 else if에 만족해 "Best age of your life"를 출력했습니다.

2-1. 쇼트서킷

  • && 연산은 좌변이 false이면 우변을 검사하지 않고 false를 처리합니다. -> 쇼트서킷
  • || 연산은 좌변이 true이면 우변을 검사하지않고 true처리를 합니다. -> 쇼트서킷

   ※ 따라서 우변이 실행되지 않을 수 있으므로 이를 염두해 두고 코드를 구현해야 합니다.

package main

import "fmt"

var cnt int = 0

func IncreaseAndReturn() int {
	fmt.Println("IncreaseAndReturn()", cnt)
    cnt++
    return cnt
    }
    
func main() {
	if false && IncreaseAndReturn() < 5 { //함수가 호출되지 않음
    fmt.Println("1 증가")
    }
    if true || IncreaseAndReturn() <5 { //함수가 호출되지 않음
    fmt.Println("2 증가")
    }
    
    fmt.Println("cnt:",cnt)
 }

결과값

  • &&좌변이 false이기 때문에 IncreaseAndReturn() 함수를 호출하지않고 조건문의 결과가 false가 됩니다. 그래서 "1증가"는 출력되지 않습니다.
  • || 좌변이 true이기 때문에 IncreaseAndReturn() 함수를 호출 하지않고 결과가 true가 됩니다. 그래서 "2 증가" 메세지가 출력됩니다. IncreaseAndReturn() 함수는 한번도 호출되지 않았기 때문에 cnt의 값은 0이 됩니다.

2-2. 소괄호 ( ) 활용

소괄호 활용을하면 더욱 다양한 조건문 활용이 가능합니다.

// 예약을 했거나, 가진 돈이 200이 넘고 빈자리가 있으면 통과 

if hasBooked() || (Money>200 && HasEmptySeat())
  • haseBooked() 함수가 true 조건이나오면 true가 나오고, HasBooked()가 false여도 우항이 true일 경우 true가 됩니다.

 

3. 중첩if

if문 안에 if문을 중첩해 사용할 수도 있습니다. 복잡한 경우를 표현할 때 사용합니다. 

package main

import "fmt"

// 부자가 있는 친구는 무조건 true 반환
func HasRichFriend() bool {
	return true
}

// 같이 간 친구 숫자를 반환 - 무조건 숫자 3을 반환
func GetFriendsCount() int {
	return 3
 }
 
 func main() {
 	Price := 35000
    
    if Price > 50000 {
    	if HasRichFriend() {
        	fmt.Println(" 앗 신발끈이 풀렸네 " )
        } else {
        	fmt.Println("나눠내자")
        }
      } else if Price >= 30000 && Price <= 50000 {
      	if GetFriendsCount() > 3 {
        fmt.Println(" 어이쿠 신발끈이.. " )
        } else {
        fmt.Println(" 사람도 얼마 없는데 나눠 내자")
        }
    } else {
    	fmt.Println("오늘은 내가 쏜다")
    }
}

결과값

  • 값은 35000원이기에 첫번째 if문 50000원 이상은 false이므로 실행하지않고 다음조건문을 검사합니다.
  • 2번째 else if Price의 가격은 35000원이 만족하기 때문에 검사를합니다ㅣ.
  • 안쪽의 if문을 보면 GetFriendsCount() 값은 3을 반환하기 때문에 "사람도 얼마 없는데 나눠 내자"를 반환합니다.

 

4. if 초기문; 조건문

- if문을 검사하기 전에 초기문을 넣을 수 있습니다. 

- 초기문은 검사에 사용할 변수를 초기화할때 주로 사용합니다.

if 초기문; 조건문 {
	문장
}

초기문 자리에 하나의 구문이 올 수 있으며 끝에 ;를 붙여서 구문이 끝남을 표시합니다. 그리고 조건문을 넣습니다.

package main

import "fmt"

func getMyAge() (int, bool) {
	return 33,true
 }
 
 func main() {
 
 	if age, ok := getMyAge() ; ok && age < 20 {
    	fmt.Println("you are young",age)
        } else if ok && age < 30 {
        fmt.Println("Nice age",age)
        } else if ok {
        fmt.Println("you are beatiful",age)
        } else {
        fmt.Println("error")
        }
        
        fmt.Println("Your age is",age)
 }

결과값

  • 초기문에 선언한 변수는 if문 안에서만 한정되기 때문에 종료된 fmt.Println("Your age is",age)에는 접근 할수없기에 오류가 발생합니다.
  • fmt.Println("Your age is",age)가 없다면 정확한 값이 나옵니다.

 

728x90
반응형