본문으로 바로가기

SET 데이터 타입

category Programming/LabVIEW 2021. 8. 3. 18:13
반응형

SET 데이터 타입

랩뷰 2019에서부터 2가지 데이터 타입을 지원하기 시작했다. 하나는 SET, 또 다른 하나는 MAP이다. 그래서 그런지, 랩뷰에서 지원하는 대부분의 기능들에 대해서는 여러 기술 블로그들에서 설명하고 있는 글들을 쉽게 발견할 수 있지만, 이 두 가지 데이터 타입에 대해서 자세히 설명된 글들은 거의 찾을 수가 없었다. 뒤늦게 지원하기 시작한만큼, 많은 개발자들에게 다소 생소한 면이 없지 않아 그렇지 않을까 생각하면서 두 가지 데이터 타입 중 셋에 관한 내용을 한번 알아보려고 한다.

셋 데이터 타입이 어떻게 구성되었는지 확인하기 위해, 먼저 블록 다이어그램에 셋 데이터 타입 상수 오브젝트를 하나 추가해보자.

셋 타입 상수는 함수 팔레트에서 Programming > Collection > Set > Set Constant를 선택하면 추가할 수 있다.

셋 타입 상수를 블록 다이어그램에 처음 추가하면, 왼쪽 그림에서의 형태로 표시된다. 그리고 셋 상수의 내부 원소 크기를 조절하면 오른쪽 그림처럼 변화되는데, 오브젝트의 크기나 갯수는 변화할 수 있지만 상수의 내부 원소에 값을 직접 정의하는 것은 불가능하다. 이 부분에 대해, 굳이 이렇게까지 사용자가 직접 정의하는 것을 막을 필요가 있었을까 하는 약간은 이해하기 어렵다는 개인적인 생각을 덧붙이고 계속해서 넘어가자.

블록 다이어그램의 셋 타입 상수를 사용자가 직접 정의하는 것이 불가능하듯이, 당연히 프론트 패널에 추가되는 셋 타입 오브젝트의 초기화 자체도 불가능하다. 하지만, 원소의 데이터 타입을 설정하는 것은 가능하다.

위 영상에서 볼 수 있듯이, 셋 타입 데이터를 구성하는 원소들의 기본 데이터 타입은 문자열 타입이다. 만약, 다른 데이터 타입의 원소로 변경하려면, 원하는 데이터 타입의 상수 오브젝트를 셋 타입 오브젝트 내부로 끌어다 놓으면 된다.

원소의 데이터를 직접 초기화하는 것은 불가능하지만, 데이터 타입 변경이 가능하다는 것은 데이터 타입의 포맷을 잡아주는 용도로 셋 타입 상수가 사용되는 것이라 추측할 수 있다. 그리고, 셋 타입 데이터의 원소들은 다른 방식으로 정의될 것이라는 것 또한 추측할 수 있다.

셋 타입 데이터는 Build Set 함수를 통해 정의될 수 있다. Build Set 함수는 함수 팔레트에서 Programming > Collection > Set > Build Set을 선택하면 추가할 수 있다.

Build Set 함수는 배열 만들기 함수처럼, 원소로 사용할 데이터를 입력 받아 하나의 셋 데이터 타입을 반환한다. 그리고, 마우스를 이용해서 함수를 위아래로 늘여주면 여러 데이터를 한번에 원소로 추가할 수 있다.

간단한 예제 프로그램을 통해 Build Set 함수를 이용해서 셋 타입 데이터를 생성해보자. 위 그림과 같이 3개의 문자열 컨트롤 오브젝트를 프론트 패널에 추가하고, 임의의 데이터를 입력하여 초기화 한 다음 Build Set 함수에 연결해주었다. 그리고 함수의 출력 터미널에 셋 타입 인디케이터도 연결하였다. 이렇게 프로그램을 작성한 다음 실행해보면, 위 그림의 왼쪽과 같은 결과를 확인할 수 있다. 위 그림에서 볼 수 있듯이, Build Set 함수를 이용해 셋 타입 데이터를 생성하는 과정이나 생성된 셋 타입 데이터를 보면 배열과 많은 부분이 닮아있다는 것을 알 수 있다. 그러나, 셋 타입과 배열은 결정적인 차이를 가지고 있다.

먼저, Buld Set 함수에 연결된 3개의 문자열 컨트롤 오브젝트의 순서와 내용, 그리고 셋 타입 인디케이터에 표시된 문자들의 순서를 비교해보자.

비교를 위해 배열 만들기 함수를 이용하여 배열 데이터를 추가로 생성하였다. 두 함수에는 같은 데이터가 같은 순서로 연결되었지만, 프로그램을 실행했을 때 두 데이터 내부의 원소 순서는 같지 않았다. 더 정확히 표현하자면, 배열 데이터의 경우 배열 만들기 함수에 연결된 데이터의 순서와 인덱스 순서가 동일하지만, 셋 타입 데이터의 경우에는 그렇지 않다. (엄밀히 따지자면, 셋 타입 데이터는 abc 순으로 원소들이 정렬된다.)

다음으로, 데이터가 중복되는 경우에 대해 생각해보자. 위 그림과 같이 3개의 문자열 컨트롤 오브젝트 중에서 2개의 오브젝트가 같은 데이터를 갖는 상황에서 프로그램을 실행시켜보면, 배열의 경우 중복되는 데이터에 대해서도 별도의 원소로 간주하지만, 셋 타입의 경우 둘 중 하나의 데이터만이 원소로 구성된다. 이것으로, 셋 타입 데이터는 중복을 허용하지 않는다는 것을 알 수 있다.

여기서 정리하고 넘어가자.

1. 셋 데이터 타입은순서가 없다.
2. 중복을 허용하지 않는다.

자! 파이썬의 셋 타입이 강하게 연상되기 시작한다. ㅎㅎ 그렇다면 랩뷰의 셋 타입도 파이썬에서의 셋 타입과 마찬가지로 원소의 추가 또는 삭제 함수를 지원할 것이고, 인덱싱을 통한 원소의 참조가 불가능할 것이며, 수학에서의 집합 연산을 지원할 것이라고 추측할 수 있다.

위 그림은 셋 데이터 타입에 대한 함수 팔레트에서의 함수들을 보여주고 있다. 예상했던 대로, 원소를 추가 또는 삭제하는 함수들을 지원하고 있고, 집합 연산을 위한 함수들도 지원하지만, 인덱싱을 통한 원소의 참조는 불가능하다는 것을 알 수 있다.

반응형

'Programming > LabVIEW' 카테고리의 다른 글

SET과 MAP 데이터의 함수들  (0) 2021.08.07
MAP 데이터 타입  (0) 2021.08.06
배열 초기화 & 배열 만들기 함수  (0) 2021.08.01
배열 크기 함수  (0) 2021.07.31
배열 부분 대체 함수  (0) 2021.07.30