케이스 구조란 무엇인가?
- LabVIEW 랩뷰/Labview 랩뷰 강의
- 2021. 1. 17.
안녕하세요. 이번 강의는 다시 기본 구조로 돌아와서 조건에 따라 실행할 코드를 변경하는 케이스 구조에 대해서 알아보도록 하겠습니다.
1. 케이스 구조란
랩뷰의 케이스 구조는 특정 입력이 들어왔을 때 입력에 따른 실행 코드를 지정해 주는 것을 말합니다. 대부분의 언어에서 사용하는 if...else...또는, switch와 같은 구조입니다. 케이스 구조는 블록 다이어그램의 함수 팔레트에서 Structures-Case Structures를 선택하여 배치할 수 있습니다.
2. 케이스 구조 인터페이스
케이스 구조는 케이스 선택자, 케이스 라벨과 케이스로 구분됩니다. 케이스 선택자에 입력된 값에 따라 같은 케이스 라벨에 있는 케이스가 실행됩니다. 즉, 한 번에 하나의 케이스만 실행됩니다. 아래는 케이스 입력을 불리언(참/거짓)으로 입력받은 경우입니다. 불리언이 케이스 선택자로 입력될 경우 참 또는 거짓 둘 중 하나의 값을 가질 수 밖에 없으므로 케이스 라벨은 참 또는 거짓만 사용할 수 있습니다.
아래 코드는 케이스 선택자에 따라 거짓(False)가 입력되면 3-5가 출력되고, 참(True)가 입력되면 3+5가 출력되는 케이스 구조를 보여줍니다.
3. 케이스의 이동
케이스의 이동은 케이스 라벨을 클릭하여 보고 싶은 라벨을 클릭하는 방법과, 컨트롤을 누른 채로 마우스 휠을 돌려서 케이스를 이동하는 방법이 있습니다. 휠을 돌려 이동하는 방법은 케이스 구조뿐만 아니라 다른 구조에서도 사용할 수 있습니다. (다층 시퀀스 구조나 이벤트 구조 등.)
4. 케이스 선택자에 숫자를 연결하는 경우
케이스 선택자에 불리언 외에도 숫자, 문자열, 열거형 등을 입력할 수 있습니다. 첫 번째로 케이스 선택자에 숫자를 연결하는 경우에 대해서 알아보도록 하겠습니다.
- 케이스 구조의 기본 케이스*** 매우 중요
케이스 선택자에 숫자형 상수를 연결해 보겠습니다. 케이스 라벨이 자동으로 0 과 1로 변경되는데, 불리언을 연결했을 때와는 다르게 기본값(Default)이 생겼습니다. 매우 중요합니다. 집중해 주세요. 불리언을 케이스 선택자의 입력으로 사용했을 때는 입력이 총 2가지로 참/거짓 외에는 다른 값이 들어올 수 없습니다. 하지만 아래 코드에서는 숫자를 케이스 선택자로 입력받고, 케이스는 '0'일 때 실행하는 코드와 '1'일때 실행하는 경우밖에 없습니다. 그러면 '2'가 케이스 선택자로 들어오면 무엇을 실행해야 할까요?
이렇게 케이스에 정의되지 않은 값이 케이스 선택자에 입력되었을 때 실행되는 케이스가 '기본(Default) 케이스' 입니다. 기본 케이스는 케이스 구조를 사용하면서 가장 많은 버그를 만들어냅니다. 케이스에 입력되는 값의 정확한 예측이 되지 않은 상태에서 아무 케이스나 기본 케이스로 만들어버리면, 왜 이 코드가 실행되는지도 모르는 상태가 되어 버립니다. 따라서 기본 케이스를 사용하는 경우 선택자의 입력에 대한 정확한 예측이 필요합니다.
- 케이스 선택자의 숫자형 입력 : 정수만 가능하다. (소수점은 강제로 변환된다)
케이스 선택자에 숫자형을 연결할 때 소수점형 숫자형을 입력하면 강제로 정수로 변경되어 선택자에 입력됩니다. 이렇게 강제로 변환되는 부분을 랩뷰에서는 '강제 변환점'이라 하고 빨간색 점으로 보여줍니다. 아래와 같은 경우 1.1을 케이스 선택자에 입력하면 빨간색 점이 생기면서 강제 변환점이 생기고, 1.1은 정수 1로 강제 변환되어 입력됩니다.
또한 케이스 라벨에 1.1을 입력한 경우에도 숫자형으로 인식하지 않고 쌍따옴표로 감싸 "1.1"로 표기되는데, 이것은 1.1이 문자열로 입력되었음을 의미합니다. 그리고 빨간색으로 표기되는데, 이것은 케이스 선택자의 입력이 정수이므로 문자열 "1.1"은 실행될 수 없음을 보여줍니다.
- 온점 두개로 연속된 숫자를 표현할 수 있다. 1..3 = 1,2,3
케이스 선택자를 숫자형을 입력하는 경우 케이스 라벨에 입력하는 숫자는 온점 두개를 입력하여 연속된 숫자를 표현할 수 있습니다. 예를 들어 1..3 이렇게 입력하면 1,2,3 과 같습니다.
- 온점 두개를 숫자 앞이나 뒤에 붙여 크거나 작음을 표현할 수 있다.
케이스 라벨에 숫자를 입력할 때 숫자 앞이나 뒤에 온점 두 개 .. 를 붙여서 사용하면 아래와 같은 표현이 됩니다.
- 숫자 앞에 온점 두 개를 붙이는 경우 (예: ..10) : 10보다 작은 모든 정수
- 숫자 뒤에 온점 두 개를 붙이는 경우 (예: 40..) : 40보다 큰 모든 정수
아래와 같이 케이스 라벨을 입력하면 -30보다 작은 모든 정수, -20~10 사이의 정수, 40보다 큰 모든 정수가 케이스 선택자에 입력되었을 때 3+5가 실행됩니다.
그러면 무한대로 작은 정수도 모두 실행되는지 궁금하실 지도 모릅니다. 정수형이라는 것은 랩뷰에서 I64로 표기되는 부호 있는 64비트 정수(Signed Quad Integer)가 정수 표현 중 가장 크거나 작은 숫자를 표현할 수 있으며, 가장 작은 숫자는 약 –1e19이고 가장 큰 숫자는 약 1e19입니다. 따라서 케이스 선택자의 입력은 -1e19 ~ 1e19 까지 입력될 수 있는 것입니다.
혹시나 해서 언급해 드리면 -1e19 = -1*10^(19) 이며, 1e19 = 1*10^(19)입니다. 따라서 -1e19 = -0.0000000000000000001 이고, 1e19 = 10000000000000000000 입니다.
5. 케이스 선택자에 문자열을 입력하는 경우
케이스 선택자에 문자열을 입력하면 케이스 라벨에 입력되는 데이터도 모두 문자열로 표기됩니다. 아래는 "케이스1"이라는 문자열이 케이스 선택자에 입력되면 실행되는 케이스를 보여주고 있습니다.
- 문자열도 범위가 가능하다 : ASCII 코드표
문자열도 케이스 구조 라벨에 범위로 지정할 수 있습니다. a..d 라고 입력하면 a,b,c,d 라고 입력한 것과 같습니다. 하지만 a..D 라고 입력하면 a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D 라고 입력한 게 되어 버리니까 주의가 필요합니다. 한글도 ASCII 코드표를 참고하면 범위 입력이 가능하긴 하겠지만 한번도 그렇게 사용해 본 적은 없습니다.
6. 케이스 선택자에 열거형을 입력하는 경우
아래와 같이 아이템이 입력된 열거형 상수를 케이스 선택자에 입력하도록 하겠습니다. 케이스 선택자에 열거형을 입력하는 것은 문자열이나 숫자형보다 더 정확한 범위 안에서 케이스 선택자에 입력되는 값을 제한하므로, 버그를 유발할 가능성이 낮아집니다. 따라서 프로그램이 커질수록 케이스 선택자는 열거형을 사용하는 것을 추천합니다.
아래와 같이 케이스 라벨에 "케이스1"과 "케이스2"만 입력되어 있을 경우, 열거형에 입력된 아이템을 한번에 모두 추가할 수 있습니다. 이것은 열거형 상수가 정해진 아이템을 가지고 있기 때문에 케이스 구조가 입력될 데이터를 알고 있기 때문에 가능합니다.
처음에는 "케이스1" 과 "케이스2"만 입력되어 있습니다.
케이스 라벨을 오른쪽 클릭하여 모든 값에 대한 케이스 추가(Add Case For Every Value)를 클릭합니다.
한번에 모든 값이 케이스에 추가되었습니다.
이상으로 케이스 구조에 대해서 알아보았습니다. 랩뷰의 케이스 구조는 텍스트 기반의 if else 구문보다 보기에 편한 편이 아닙니다. 각 조건에 대한 코드를 하나씩 하나씩 열어가며 확인해야 하고 케이스 구조 안에 케이스가 들어가거나 할 경우에는 정말 복잡해집니다. 랩뷰에서는 C언어 기반의 코드를 지원하는 수식 노드(Formular Node)가 있는데, 정말 많은 케이스 구조를 적층해서(케이스 안의 케이스 안의 케이스..) 사용해야 할 경우에는 저는 그냥 수식 노드를 사용해 버립니다. 케이스 구조는 사용하지 않을 수 없으면서 많이 사용하면 스트레스를 받게 되는 구조인 것 같습니다.
#랩뷰 #Labview #랩뷰 강의 #랩뷰 강좌 #랩뷰 케이스 구조 #케이스 구조
'LabVIEW 랩뷰 > Labview 랩뷰 강의' 카테고리의 다른 글
랩뷰 상태머신 구조 및 자판기 예제 (0) | 2021.01.19 |
---|---|
이벤트 구조란 무엇인가? (2) | 2021.01.18 |
텍스트 파일에서 XY 그래프 그리기 (0) | 2021.01.16 |
SubVI 란 무엇인가 (0) | 2021.01.15 |
XY 그래프 만들기 기초 (0) | 2021.01.14 |