델파이는 집합형 데이터(Set of) 형을 제공한다.
대표적인 집합형 데이터가 Font.Style이다.
그런데 이 데이터를 DB로 보관해야 한다면 어떻게 해야 할까?
답은 델파이의 집합형 데이터가 메모리에 어떻게 처리되는지를 확인해 보면 구할 수 있다.
델파이에서 집합형 데이터는 하나의 데이터를 하나의 비트에 저장한다.
데이터는 1Byte에 8개의 멤버를 저장할 수 있고 집합형이 몇 개의 멤버를 가지느냐에 따라서 크기가 달라진다는 이야기이다.
8개 이하의 멤버를 가지는 집합형은 1Byte의 메모리를 차지하고 15개의 멤버를 가지는 집합형은 2Byte의 메모리를 사용한다.
예를 들어 다음과 같이 집합형 데이터를 정의해보자.
TMySet=(a1, a2, a3, a4, a5, a6, a7, a8);
위의 데이터는 메모리에 어떻게 들어갈까?
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
a1 | a2 | a3 | a4 | a5 | a6 | a7 | a8 |
위의 그림은 1Byte의 메모리 영역에 배치된 예이다. 1~8까지 숫자는 비트 영역이다.
이처럼 1bit에 1개의 데이터가 할당되므로
[집합형 데이터의 크기] = [집합의 멤버 수] / 8
이 된다. 물론 실수부는 올림 처리 해야 한다.
그렇다면 어떻게 DB에 보관하면 될까?
이미 감을 잡은 분들이 많겠지만 못 잡은 분들을 위해 정리해 보면 다음과 같다.
1. 멤버의 숫자에 맞는 데이터 형을 결정한다. 그냥 신경 쓰기 싫고 32개 이하의 멤버를 가진 그룹이라면 Integer 형을 쓰면 되겠다.
2. 사용할 형(Integer)의 변수를 선언한다.
3. 저장할 집합 데이터의 변수를 CopyMemory로 복사한다.
4. 변수를 DB에 보관한다.
5. 끝.
혹시나 이해가 안되는 분들은 다음 예제를 참조 하기 바란다.
type
TMySet=(a1, a2, a3, a4, a5, a6, a7, a8);
TMySets=Set of TMySet;
'知 > Delphi' 카테고리의 다른 글
서비스 프로그램 ServiceStart에서 "Invalid argument" 발생하는 경우 (0) | 2018.04.10 |
---|---|
이미지 파일 헤더 구분 (0) | 2018.03.12 |
DBGrid DrawColumnCell 예제 (0) | 2015.12.11 |
TClientDataSet 파일의 크기 줄이기 (0) | 2013.01.09 |
IP, OS, CPU 정보 알아오기 (0) | 2012.11.09 |