반응형

개요

조건문은 조건에 따라서 코드블록을 실행할지 말지를 결정한다. 덕분에 조건문으로 실행되는 소스 코드의 실행 분기를 나눌 수 가 있다. 조건문의 문법 키워드는 if, elif, else 키워드로 구성 된다. if, elif 뒤에 조건식이 오고 해당 줄에서 마지막에 :(콜론)이 온다음에 코드 블록을 작성하면 된다. else 의 경우 조건식 없이 :(콜론)으로 끝난다.

코드블록

일종의 코드 덩어리 혹은 구간으로 본다. C 와 같은 오래된 프로그래밍 언어에서는 코드 스택이라고도 한다. 파이썬에서는 들여쓰기로 구분을 한다. 들여쓰기 칸수는 2칸을 쓰거나 4칸을 사용할 수 있다. 파이썬 재단에서는 4칸 들여쓰기로 코드 블록을 구분하는 것을 권장한다. 2칸 들여 쓰기는 주로 구글에서 사용하고 있다.

코드 블록 안에 또 다른 코드 블록을 만들 수 도 있다. 다만, 파이썬에서는 단독으로 코드 블록을 만들 수는 없다. 반면 다른 중괄호로 코드 블록을 구분하는 언어들은 독립적으로 코드 블록을 만들 수 있다.

원칙적으로 코드 블록내에 새로운 변수를 정의 할 경우 코드 실행 흐름상 해당 코드 블록을 벗어나면 메모리에서 해당 변수를 제거한다. 다만 편의상 몇가지 예외가 있는데, for 문의 경우 코드 블럭을 벗어나도 바로 제거하지 않는다.

문법

if 키워드는 첫 조건문이며, if 다음에 오는 조건식이 True 경우 해당 if 줄 다음의 코드 블럭을 실행한다. 이 때 뒤에 나오는 elif 나 else 에 해당되는 코드 블럭은 실행하지 않고 건너 뛰게 된다. 만약 False가 있다면 바로 다음에 있는 elif 조건식을 검사하고 True 인 경우 elif 에 해당되는 코드 블럭이 실행된다. elif 는 if와 달리 첫번째 조건문만 아니면 여러개를 이어서 작성하는 것이 가능하다. 그리고 나무지 조건의 의미로 else 는 조건식이 없이 앞의 if 나 elif 조건들이 전부 False 일때 해당 코드 블록을 실행하게 된다.

여기서 elif는 else if 를 합쳐서 만들어진 키워드로 유닉스 쉘 스크립트 문법과 유사하다.

a = 1
if a > 0:
	print("a는 0보다 크다")
elif a < 0:
	print("a는 0보다 작다")
else:
	print("a는 0과 같다")

# a는 0보다 크다
# 나머지 print 함수는 실행되지 안고 건너 뛴다

참고 C의 if문

참고로 작성한 소스코드다 위와 동일하게 동작하는 if 문을 C로 표현한 코드 블록이다. C 에서는 코드 블록을 중괄호로 표시하니 표현의 다른점을 확인하자. 그리고 코드 블록을 명시 하지 않을 경우 한줄만 자동으로 코드 블록으로 인식하기도 한다.

int a = 1;
if (a > 0)
{
	printf("a는 0보다 크다\n");
}
else if (a < 0)
	printf("a는 0 보다 작다\n");
else { printf("a는 0과 같다\n"); }

성능과 가독성 좋은 조건문

조건문으로 보통 실행하는 코드 실행 분기를 나눈다는 것은 조건에 따라 실행하는 코드 즉, 논리적 자동화를 구현하는 부분이 있다. 때문에 복잡한 프로그램을 만들 수 록 조건문은 복잡해질 수 밖에없다.

성능을 조금이라도 높이기 위해서는 확률적으로 True 가 자주되는 조건식을 첫번째 if 에 넣는 것이 좋다. 이는 if의 조건식 검사후 elif 조건식을 검사하는 식으로 순차적으로 조건식을 검사히기 때문에 조건식 검사 횟수가 줄기 때문이다. 하지만 if와 else 밖에 없는 조건문은 차이가 없다.

가독성을 높이는 방법으로는 특정 조건을 기준으로 작성하는 것이 그나마 덜 복잡해 보인다. 특히 이중 조건문을 사용할 경우 차이가 크다. 그리고 해당 조건문에 대해서 주석을 달아주는 것도 좋다.

간단한 규칙이지만, 실무에서 잘 모르는 주니어 개발자들이 의외로 꽤 있었다.

반응형

'Python > 배경이 있는 파이썬' 카테고리의 다른 글

함수(function)  (0) 2024.05.24
반복문(while, for)  (0) 2024.05.11
불(bool)과 연산  (0) 2024.04.29
딕셔너리(dict)  (0) 2024.04.29
튜플(Tuple)  (1) 2024.04.27

+ Recent posts