Typeof

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

`typeof`는 프로그래밍 언어에서 변수 또는 식의 데이터 유형을 나타내는 데 사용되는 연산자 또는 키워드이다. C, C#, VB.NET, JavaScript, TypeScript 등 다양한 프로그래밍 언어에서 사용되며, 각 언어별로 사용 방법과 기능에 차이가 있다. C에서는 컴파일 시점에 변수의 타입을 결정하는 데 사용되며, C#에서는 System.Type 객체를 얻는 데, VB.NET에서는 객체 참조 변수의 데이터 형식을 비교하는 데 사용된다. JavaScript에서는 런타임에 변수의 타입을 문자열 형태로 반환하며, TypeScript에서는 변수나 객체의 타입을 가져오는 데 사용된다.

Typeof
📚 더 읽어볼만한 페이지
  • 연산자 (프로그래밍) - 중위 표기법
    중위 표기법은 사람이 이해하기 쉬운 연산자 표기 방식이지만, 컴퓨터가 구문 분석하기 어렵고 연산 순서를 위해 괄호나 연산자 우선순위 규칙이 필요하다.
  • 연산자 (프로그래밍) - 형 변환
    형 변환은 프로그래밍에서 변수의 데이터 타입을 변경하는 것으로, 암시적 형 변환과 명시적 형 변환으로 나뉘며, 객체 지향 프로그래밍에서는 업캐스팅과 다운캐스팅이 발생하고, 각 언어는 고유한 규칙과 방법을 제공하며 잘못된 형 변환은 오류를 유발할 수 있다.

2. C 계열 언어

C, C#, 비주얼 베이직 닷넷, 자바스크립트, 타입스크립트 등 C 계열 언어에서 `typeof` 연산자는 다양한 방식으로 활용된다.

자바스크립트에서 `typeof`는 변수의 타입을 문자열 형태로 반환한다. 예를 들어, 다음 코드는 변수 `n`이 숫자인지 확인한다.

```javascript
function isNumber(n) {
return ( typeof n === 'number' );
}
```

타입스크립트에서는 `typeof`를 사용하여 기존 객체의 타입을 참조하거나, 새로운 객체의 타입을 정의할 수 있다.

```typescript
function (param: typeof existingObject) { ... }
```

```typescript
let newObject: typeof existingObject;

2.1. C

C (프로그래밍 언어)의 비표준(GNU) 확장에서는 `typeof`를 사용하여 두 변수의 최댓값을 결정하는 일반 매크로를 정의할 수 있다.

```c
#define max(a,b) ({ typeof (a) _a = (a); typeof (b) _b = (b); _a > _b ? _a : _b; })
```

C23부터 `typeof`는 C 표준의 일부이다. `typeof_unqual` 연산자도 추가되었는데, 이는 cvr-qualification 및 atomic qualification을 제거한다는 점을 제외하면 `typeof`와 동일하다.

2.2. C#

csharp
// 주어진 객체가 정수인지 반환합니다.
// "is" 연산자를 사용하여 이를 확인할 수도 있습니다.
public static bool IsInteger(object o)
{
return o.GetType() == typeof(int);
}
```

C#에서 `typeof` 연산자는 주어진 형식의 `System.Type` 객체를 얻는 데 사용된다. `GetType()` 메서드는 객체의 형식을, `is` 연산자는 객체가 특정 형식인지 확인하는 데 사용된다. 위 코드는 `IsInteger` 메서드에서 `o.GetType() == typeof(int)`를 통해 객체 `o`가 정수형인지 확인하는 예시를 보여준다.

2.3. 비주얼 베이직 닷넷

VB.NET에서 "typeof"의 C# 변형은 VB.NET의 GetType 메서드로 변환되어야 한다. VB.NET의 TypeOf 키워드는 객체 참조 변수를 데이터 형식과 비교하는 데 사용된다.

다음 예제에서는 TypeOf...Is 식을 사용하여 두 객체 참조 변수의 다양한 데이터 형식과의 형식 호환성을 테스트한다.

vb.net
Dim refInteger As Object = 2

MsgBox("TypeOf Object[Integer] Is Integer? " & TypeOf refInteger Is Integer)
MsgBox("TypeOf Object[Integer] Is Double? " & TypeOf refInteger Is Double)

Dim refForm As Object = New System.Windows.Forms.Form

MsgBox("TypeOf Object[Form] Is Form? " & TypeOf refForm Is System.Windows.Forms.Form)
MsgBox("TypeOf Object[Form] Is Label? " & TypeOf refForm Is System.Windows.Forms.Label)
MsgBox("TypeOf Object[Form] Is Control? " & TypeOf refForm Is System.Windows.Forms.Control)
MsgBox("TypeOf Object[Form] Is IComponent? " & TypeOf refForm Is System.ComponentModel.IComponent)

3. 자바스크립트

자바스크립트에서 `typeof` 연산자는 변수의 타입을 판별하는 데 사용된다. 예를 들어, 다음 함수는 입력값이 숫자인지 확인한다.


function isNumber(n)
{
return ( typeof n === 'number' );
}


자바스크립트는 동적 타입 언어이므로, 변수의 타입은 런타임에 결정된다. `typeof` 연산자는 이러한 동적 타입 시스템에서 유용하게 활용될 수 있다.

3.1. 타입스크립트

typescript
function (param: typeof existingObject) { ... }
```
```typescript
let newObject: typeof existingObject;
```
타입스크립트는 정적 타입 검사와 타입 추론을 제공하며, `typeof` 연산자는 이러한 기능과 함께 사용될 수 있다.