소프트웨어/Octave

[Octave] 5. octave, 옥타브 조건문 사용하기(if, Boolean)

리습 2022. 5. 19. 07:01

안녕하세요. 리습입니다.

오늘은 옥타브 프로그래밍에서 가장 기본적인 요소 중 하나인 조건 문에 대하여 알아보도록 하겠습니다.

조건문을 이해하기 위한 Boolean 변수 간단히 알아보기

 먼저 조건문에 대해서 알아보기 전에, Yes/No를 의미하는 변수 Boolean 변수에 대해서 알아보도록 하겠습니다.

이전에 간단히 논리 연산을 소개하며, true와 false를 사용하는 예시를 보여드린 적이 있습니다. Octave에서는 Boolean 변수들을 'logical Class' 라 부르며, Yes를 의미하는 true, No를 의미하는 false 두 가지 종류가 있습니다. logical 변수를 생성하고 초기화를 하는 방법은 다음과 같습니다.

>> val_A = true
val_A = 1
>> val_B = logical(1)
val_B = 1
>> val_C = true(1)
val_C = 1

 첫 번째 방법은 변수를 생성하고 true를 입력하여 logical변수로 초기화를 한 것입니다. 두 번째 방법은  casting이라는 방식으로 logical의 괄호 안에 1이라는 값을 true로 변환한다음 변수에 입력해주는 방법으로 logical 변수를 생성하는 방법입니다. 세 번째 방법은 첫 번째 방법과 동일하지만, 1x1 matrix로 생성하라는 의미로 괄호 안에 1을 입력하여 logical 변수를 생성하는 방법입니다. 첫 번째 방법을 가장 자주 사용하게 되실 것이며, N x N 크기의 Matrix를 생성하기 위해서는 세 번째 방법을 가장 많이 사용하게 되실 것입니다.

변수 생성의 결과, Class가 모두 logcial로 표기되고, 차원(dimension)과 값이 모두 같다.

 초기화를 false로 하는 것은 위 방법에서 true를 false로 바꾸거나, logical casting 되는 값을 0으로 입력해주면 됩니다.

 자 그럼 logical 변수에 대해 알아보았으니, 이제 기본 연산에 대해서 알아보도록 하겠습니다. 기본 logical 연산의 종류는 아래와 같이 AND , OR , NOT, XOR 4가지입니다. 각 연산의 동작 예시는 다음과 같습니다.

>> A = true, B = false
A = 1
B = 0
>> A&B
ans = 0
>> A|B
ans = 1
>> !A
ans = 0
>> ~A
ans = 0
>> !B
ans = 1
>> ~B
ans = 1
>> A^B
ans = 1

logical 변수의 AND 연산은 '&'연산을 통해 수행할 수 있으며, OR 연산은 '|'연산, NOT은 '~'과 '!'연산으로, XOR연산은 '^'로 수행할 수 있습니다. 또한 마찬가지로 행렬에 대해서도 동작이 가능하여, 다음과 같이 동작시킬 수 있습니다.

>> clear all
>> A = [1,1,1;0,0,0], B = [1, 0, 1;0, 1, 0]
A =
   1   1   1
   0   0   0
B =
   1   0   1
   0   1   0
>> A&B
ans =
  1  0  1
  0  0  0
>> A|B
ans =
  1  1  1
  0  1  0
>> !A
ans =
  0  0  0
  1  1  1
>> A^B
error: can't do A ^ B for A and B both matrices

다만, XOR연산의 경우 ^연산기로는 Matrix연산을 지원하지 않기 때문에 다음과 같이 연산기가 아닌 함수의 원형을 사용해야 합니다.

>> A = [1,1,1;0,0,0], B = [1, 0, 1;0, 1, 0]
A =
   1   1   1
   0   0   0
B =
   1   0   1
   0   1   0
>> and(A, B)
ans =
  1  0  1
  0  0  0
>> or(A, B)
ans =
  1  1  1
  0  1  0
>> not(A)
ans =
  0  0  0
  1  1  1
>> xor(A, B)
ans =
  0  1  0
  0  1  0

 다음과 같이 '&'는 and함수, '|'는 or함수, '!'나 '~'는 not함수, '^'는 xor함수로 대신하여 사용할 수 있습니다. 따라서, 위에 있는 연산 기호를 통한 수식은 아래 함수를 보기 쉽게 사용하는 방법이라고 생각하시면 되며, 필요시 함수 원형을 사용하는 방법으로 동작 시킬 수 있습니다. (함수의 사용 법은 추가적으로 설명드리도록 하겠습니다.)

조건문 if 알아보기

 자 이제 logical 변수(boolean변수)에 대해서 어느 정도 알아보았기 때문에, 이제 조건문에 대하여 알아보도록 하겠습니다. 조건문은 if라는 기호를 통해 표기하며 다음과 같은 형태를 가지고 있습니다.

if ( '조건' )
  '조건이 true일 경우 수행되는 내용'
endif

' '로 표기한 내용은 우리가 채워야 하는 코드의 내용을 의미합니다. 위 조건문의 뜻은 다음과 같습니다.

if 괄호 안의 내용이 true일 경우 endif전까지의 내용을 실행하라

따라서 우리는 우리의 필요에 따라 if괄호 내에 조건을 생성하고, 이에 맞추어 실행이 될 코드를 작성하는 것으로 조건문을 사용할 수 있습니다. 예시는 다음과 같습니다.

>>clear all
>>val_A = true;
>>val_B = false;
>>val_C = 10;
>>if(val_A & val_B)
  val_C = 20
endif
>>val_C
val_C = 10

조건 문 내에 val_A와 Val_B가 모두 true일 때만, val_C가 20이 되도록 하는 코드를 작성해 보았습니다. 위 경우, 두 변수의 값이 다르기 때문에 AND연산의 결과는 False가 되어, 조건문은 실행되지 않게 됩니다. 반면에 아래와 같이 작성한다면 조건문이 실행되게 됩니다.

>>clear all
>>val_A = true;
>>val_B = false;
>>val_C = 10;
>>if(val_A | val_B)
  val_C = 20
endif
>>val_C
val_C = 20

이 때는 OR연산의 결과가 true이기 때문에 조건문이 실행되게 되고, val_C의 값은 20이 되게 됩니다.

만약에 조건이 맞을 경우엔 (1) 번 코드를, 조건이 틀릴 경우엔 (2) 번 코드를 실행시키려면 어떻게 해야 할까요? 그럴 경우 if-else문을 사용하면 됩니다. if else 문은 다음과 같은 형태를 가지고 있습니다.

if ( '조건' )
	'조건이 true일 경우 수행되는 내용 : (1)번 코드'
else
	'조건이 false일 경우 수행되는 내용 : (2)번 코드'
endif

이렇게 코드를 작성할 경우 if 내 조건이 true일 경우 (1) 번 코드가 실행되게 되며, false 일 경우 (2) 번 코드가 실행되게 됩니다.

그런데 만약에 각각 의 조건에 따라 실행되는 코드를 달리 하고 싶다면 어떻게 해야 할까요? 그럴 경우엔 if-elseif-else문을 사용하시면 됩니다. if-elseif-else문은 다음과 같은 형태를 가지고 있습니다.

if ( '조건 1' )
	'조건 1이 true일 경우 수행되는 내용'
elseif ('조건 2')
	'조건 2가 true일 경우 수행되는 내용'
else
	'1,2조건이 모두 false일 경우 수행되는 내용'
endif

 다음과 같은 형태를 가지게 되며, 조건에 따라 실행되는 코드가 달라지게 됩니다. 이때 else는 없이 바로 end if도 사용 가능합니다.

마무리

 이번 시간에는 octave의 조건문에 대하여 알아보았습니다. octave의 조건문은 logical연산으로 동작하며, if, elseif, else endif로 구간을 나누어 각 조건에 따른 실행 코드를 나눌 수 있다는 것 또한 알아보았습니다. 조건문은 프로그래밍 코드를 작성하는데 가장 기본적이 요소이기 때문에 잘 이해하시고 유용하게 사용하시길 바랍니다.