반응형

개요

조건문은 조건에 따라서 코드블록을 실행할지 말지를 결정한다. 덕분에 조건문으로 실행되는 소스 코드의 실행 분기를 나눌 수 가 있다. 조건문의 문법 키워드는 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
반응형

CMake 익히기 : 기초문법 (2)

작성 배경

 CMake의 가장 큰 장점은 C/C++ 크로스 플랫폼에 빌드를 할 수 있다. 그러나 임베이디드의 대부분을 차지하는 리눅스 환경의 경우 적당한 빌드 시스템이 CMake만한게 없다는 것도 함정이다. 또한 다른 사람이 만들어 놓은 것을 사용하기는 쉽지만, 막상 규모가 조금 되는 프로그램을 만들려고 하면, 쉽지 않다. 이 때문에 간단하게나마 문법을 조금씩 정리한다.



CMake 기초문법


end가 붙은 키워드의 arg

 end키워드가 붙은 경우(endif, endfunction, endmacro, while, 등)에 앞의 arg를 동일하게 적어 줘서 여러 키워드가 중첩이 될 경우 구분할 수 있는 역할을 할 수 있다. 하지만 붙이지 않아도 된다.



매크로(macro)

 CMake에서 매크로는 문법상 함수와 동일하다. 다만, 동작 방식에서 차이가 있다. 함수의 경우 메모리에 동적으로 생성되어 작동하는 반면 매크로는 C의 매크로처럼 호출 부분에 작성되어 있는 절차를 삽입하는 방식이다.

macro(hello_macro)
    message("hello world")
endmacro(hello_macro)

hello_macro()



조건문(if)

 조건문 if()도 마지막에는 endif()로 끝이 나야 한다. if()조건 외 실행할 경우 else()가 사용된다. if()외에 다른 조건을 정의 할때는 elseif()를 사용한다.


 조건문이 참이 되는 경우는 ON, YES, Y, TRUE, 또는 0이 아닌 값이다. 반면 거짓이 되는 경우는 0, OFF, NO, FALSE, N, IGNORE, ""이다.


 또한 조건문에서 함께 사용되는 비교, 논리 연산자의 경우 기호가 아닌 대문자 키워드로 표현을 한다. 비교 연산자 : EQUAL, LESS, GREATER

논리 연산자 : AND, OR, NOT

기타 매칭 :  MATCHES [REGEX]

set(VAL 1)

if(${VAL})
    message("${VAL} is TRUE")
else()
    message("${VAL} is FALSE")
endif()



include()

 확장자가 cmake로 작성된 다른 cmake 파일을 포함시킬 수가 있다. C/C++의 include와 유사하다. 다만, 표준라이브러리가 없어서 로컬에서 포함을 해야 한다. 대부분 오픈소스에는 cmake라는 폴더에 .cmake 파일을 모아 놓는다.

 include하게 되면, include된 파일에 있는 매크로나 함수, 변수를 사용할 수 있다.




연습예제

 앞에서 간단하게 살펴본 내용으로 간단하게 실습 예제를 작성해보자. 스크립트를 2개로 만들어서 실행해보자

# cmake폴더의 macro.cmake 파일
macro(check_val_macro val)
    if(${val})
        message("${val} is true")
    else()
        message("${val} is false")
    endif()
endmacro(check_val_macro val)
# 작업 폴더의 CMakeLists.txt 파일
cmake_minimum_required(VERSION 2.6)

include(cmake/macro.cmake)

set(FOO 1)
check_val_macro(FOO)

set(FOO FALSE)
check_val_macro(FOO)


결과는 다음과 같이 나온다





참고자료

OpenCV 소스코드의 CMake스크립트

Mastering CMake A Cross-Platform Build System 서적

반응형

'각종 툴' 카테고리의 다른 글

[PyCharm]기본 키 맵 해제  (0) 2020.12.20
CMake 익히기 : 기초문법 (1)  (0) 2018.02.19
CMake : 공식예제 step1 해보기  (0) 2017.12.11

+ Recent posts