Delphi에서 Variant 타입은 다양한 데이터를 유연하게 다룰 수 있는 특성을 제공하며, 특히 배열 형태로 사용될 때 여러 유용한 함수들이 함께 제공됩니다. 다음은 주요 Variant 관련 함수들을 설명합니다.
배열 생성 및 정보 조회 함수
VarArrayCreate(): 특정 범위와 타입으로 Variant 배열을 생성합니다.VarArrayDimCount(): 배열의 차원 수를 반환합니다.VarArrayLowBound(),VarArrayHighBound(): 각각 배열의 최소 인덱스와 최대 인덱스 값을 가져옵니다.VarArrayRedim(): 기존 배열의 상한 값을 변경하여 크기를 조정합니다.
고속 메모리 접근: Lock/Unlock
일반적으로 Variant 배열에 데이터를 복사할 때는 반복문을 이용해 요소 단위로 대입해야 합니다. 예를 들어 다음과 같은 코드가 있습니다:
v := VarArrayCreate([1, 10000], varByte);
for i := 1 to 10000 do
v[i] := a[i];
이 방식은 매번 타입 검사를 수행하기 때문에 성능 저하가 발생할 수 있습니다. 이를 개선하기 위해 VarArrayLock()과 VarArrayUnlock() 함수를 사용하면 메모리를 직접 제어할 수 있습니다:
v := VarArrayCreate([1, 10000], varByte);
ptr := VarArrayLock(v);
try
Move(a, ptr^, 10000);
finally
VarArrayUnlock(v);
end;
위 코드에서는 VarArrayLock() 호출 후 얻은 포인터를 통해 Move() 함수를 사용하여 전체 블록을 한 번에 복사함으로써 효율적인 처리가 가능합니다.
기타 유용한 함수들
VarArrayRef(): Variant 내부의 실제 데이터 참조를 얻습니다.VarIsArray(): 전달된 값이 Variant 배열인지 확인합니다.VarClear(): Variant 변수의 내용을 비우고 타입을varEmpty로 설정합니다.VarCopy(dest, source): 하나의 Variant를 다른 Variant로 복사합니다.VarCast(dest, source, varType): Variant를 지정된 타입으로 변환하여 저장합니다.VarType(): Variant의 내부 타입 코드(varXXX)를 반환합니다.VarAsType():VarCast()와 동일한 기능을 제공합니다.VarIsEmpty(): Variant 타입이varEmpty인지를 판단합니다.VarIsNull(): Variant가 null 값을 포함하고 있는지 확인합니다.VarToStr(): Variant 값을 문자열로 변환합니다 (varEmpty 또는 varNull일 경우 공백 문자열).VarFromDateTime(): TDateTime 값을 Variant 형식으로 반환합니다.VarToDateTime(): Variant에서 TDateTime 타입의 시간 값을 추출합니다.