14. 조건에 따라 다른 기능 실행하기 1 - (if)
목표
조건에 따라서 다른 기능을 실행할 수 있는 조건문 함수 중 (if)
를 사용 해 봅시다
조건문
오토리습으로 한가지 정해진 기능만을 수행하도록 만들 수도 있지만, 대부분은 다양한 조건(예를 들면 사용자의 다른 입력)들에 대해서 다른 기능을 수행하도록 만들게 될 겁니다.
이 때 사용하는 것이 조건문입니다. 조건문은 먼저 조건에 해당하는지 여부를 먼저 판단하고, 그 조건에 해당할 때(참)와 해당하지 않을 때(거짓)에 각각 다른 내용을 실행하도록 만들어줍니다.
오토리습에서 조건문은 대표적으로 (if)
함수와 (cond)
함수가 있습니다. 이 중 if
함수에 대해서 알아보겠습니다.
참과 거짓 : bool(boolean)
조건문에 대해 설명하기 이전에 참
과 거짓
에 대해서 알아보겠습니다. 이 참
과 거짓
은 조건문에서 특정 코드를 수행하는 기준이 되는데요. 조건문에서 조건이 참
일 경우에는 참일경우에 실행할 코드를 실행하고, 거짓
일 경우에는 거짓일 경우에 실행할 코드를 실행할 수 있습니다.
여기서 참
과 거짓
두 가지 중 하나만을 가지는 자료형을 bool
이라고 부르며, 모든 프로그래밍 언어에서 이를 사용하지만, 오토리습에서는 참
과 거짓
에 사용되는 단어가 명확하게 정해져 있지는 않습니다.
오토리습에서 거짓
을 표현할 때 nil
을 사용합니다. 이 nil
은 사실 어떤 변수나 함수 등에 값이 없을 경우를 의미하는 단어인데요. 이를 거짓
의 의미로도 사용합니다. 한번 저희가 만들지 않은 변수에 무슨 값이 들어 있는지 확인 해 보겠습니다. 변수명 앞에 !
를 붙이면 해당 변수의 값을 반환 해 준다고 했죠 아래와 같이 명령어 창에 입력 해 봅시다
1
!num
아직 (setq)
함수로 num
이라는 변수에 값을 넣지 않은 상태라면, 명령어 창에 nil
이 표시되는 것을 확인 하실 수 있으실 겁니다. 이 말은 num
이라는 이름의 변수에 아무런 값이 들어있지 않다는 것을 의미합니다.
반대로 오토리습에 있어서 참
은 일반적으로 T
(참, true)를 사용할 수 있지만, 사실상 nil
이 아닌 모든 값을 참
으로 취급합니다. 프로그래밍 언어에 따라서는 0은 거짓으로서 사용하는 경우도 있긴 하지만, 오토리습에서는 0도 숫자이므로 참
으로 취급합니다.
즉 앞으로 오토리습에서 조건문을 사용할 때, 그 값이 nil
이면 거짓이고 nil
이 아니면 참이라고 생각하시면 됩니다.
if
(if)
함수는 다음과 같이 두 가지 방법으로 사용할 수 있습니다.
1
2
3
4
; 참인경우만 실행
(if 조건 참일때실행)
; 참인경우와 거짓인경우에 다른 내용 실행
(if 조건 참일때실행 거짓일때실행)
참인경우만 실행
먼저 인자가 2개(조건
, 참일때실행
)인 경우는, 조건
이 참
인 경우에만 참일때실행
부분의 코드를 실행하며, 거짓
인 경우에는 참일때실행
부분을 실행하지 않고 지나갑니다.
한번 다음의 코드를 명령어 창에 붙여넣어서 실행 해 볼까요?
1
(if T "참입니다")
그러면 “참입니다”가 명령어 창에 보일 겁니다. 이는 (if)
문의 조건이 T
이므로 뒤의 참일때실행
코드가 실행 및 반환되기 때문입니다.
이번에는 조건에 nil
을 넣어서 실행 해 봅시다
1
(if nil "거짓입니다")
과연 명령어 창에는 무엇이 표시될까요? “거짓입니다”가 표시될 것이라고 생각 하신 분도 있겠지만 그 결과는 nil
입니다. (if)
함수는 조건
이 nil
이기 때문에 참일때실행
될 코드인 “거짓입니다”는 실행하지 않고 바로 nil
을 반환 해 버리기 때문입니다.
참인경우와 거짓인 경우에 다른 내용 실행
만약 위와 같이 조건
이 nil
인 경우에도 특정 코드를 실행하게 하고 싶다면, 거짓일때실행
코드를 추가 해 주면 됩니다. 즉 인자가 3개(조건
, 참일때실행
, 거짓일때실행
)가 되는 거죠.
한번 조건
이 참
인 경우에는 “참입니다”를, 거짓인 경우에는 “거짓입니다”라는 문구가 명령어창에 표시되도록 만들어 봅시다. 다음 코드를 명령어 창에 붙여넣어 주세요.
1
(if nil "참입니다" "거짓입니다")
조건
이 nil
이므로 거짓일때실행
코드가 실행 및 반환되어 “거짓입니다”가 명령어창에 표시됩니다. 한번 조건을 nil
이 아닌 값(T
나 숫자 등)으로 변경해서 “참입니다”가 제대로 표시 되는지 확인 해 보세요.