유니버설 데이터 형식으로 사용되는 Object(Visual Basic)
Object 데이터 형식은 .NET Framework 및 Visual Basic의 루트 형식입니다. 즉, 다른 모든 데이터 형식 및 개체 형식은 직접 또는 근본적으로 Object 데이터 형식에서 파생됩니다. 또한 기본 형식이나 복합 형식에 관계없이 다른 모든 데이터 형식은 Object로 변환될 수 있습니다.
느슨한 형식화
Object를 유니버설 데이터 형식으로 사용할 수 있습니다. 이러한 방식을 느슨한 형식화라고 합니다. 다음 예제에서는 이러한 방식의 유연성을 보여 줍니다.
Dim v As Object
v = "17"
' v contains the 2-character String value "17".
v = v - 15
' v now contains the Integer value 2.
v = "H" & v
' v now contains the 2-character String value "H2".
포함된 데이터의 종류에 관계없이 Object 변수에 대해 이러한 연산을 수행할 수 있지만 다음 사항을 주의해야 합니다.
Object에 대해 산술 연산이나 함수를 수행하는 경우 개체에 숫자 데이터가 있어야 합니다. 그렇지 않으면 런타임 오류가 발생합니다.
문자열을 연결하는 경우 + 연산자 대신 & 연산자를 사용합니다. + 연산자가 피연산자들을 더하거나 연결할 때는 복잡한 규칙이 적용됩니다. 일부 경우에는 + 연산자가 형식 검사와 변환도 수행해야 하므로 성능이 저하됩니다.
Object 변수의 데이터 형식 변경
Object 변수는 모든 데이터 형식을 받을 수 있지만 변수 자체를 다른 데이터 형식으로 변경할 수는 없습니다. 그러나 Object 변수를 Object 변수의 배열로 다시 할당할 수 있습니다. 다음 예제에서는 ReDim 문(Visual Basic)의 올바른 사용 예와 잘못된 사용 예를 보여 줍니다.
' The following statement declares a single Object.
Dim someObj As Object
' The following reallocation is valid only for Object.
ReDim someObj(8)
' The following statement attempts an INVALID change of data type.
ReDim someObj(8) As Double
첫 번째 ReDim 문은 someObj를 Object 형식의 배열로 변경합니다. 이 문은 Object 데이터 형식의 경우에만 유효합니다. 두 번째 ReDim 문은 다른 데이터 형식을 포함하기 때문에 잘못입니다. 별도의 배열을 사용하면 원하는 결과를 얻을 수 있습니다. 다음은 이에 대한 예입니다.
' First allocate a separate array.
Dim someArray(8) As Double
' Then assign the new array to the Object variable.
someObj = someArray
구조체 대신 사용되는 Object
Object 데이터 형식은 여러 다른 형식의 데이터를 저장할 수 있기 때문에 구조체를 사용할 많은 경우에 구조체를 대신하여 Object 배열을 사용할 수 있습니다. Object 배열은 항상 각 요소에 저장된 데이터 형식을 변경할 수 있기 때문에 구조체보다 다소 유연하며 배열을 동적으로 만들 수 있으므로 필요에 따라 크기를 변경할 수 있습니다. 그러나 Object 배열은 동일한 기능을 가진 구조체보다 더 많은 메모리를 사용하며 성능이 더 느립니다.