[C#] | Type 비교에서의 'is' 와 'GetType()'

2024. 8. 3. 03:43·개발/C#
목차
  1. 개요
  2. is
  3. GetType()
  4. 마치는 말

개요

격 자의 리메이크를 진행하며 Cell 구조를 적을때 GetEntities<T> 함수를 보면 이러한 부분이 있습니다.

is 라... 상당히 낯선 문법입니다.

이건 대체 뭘까요?

 

 


 

 

 

is

is 는 타입 비교 연산자입니다.

 

그러니까 우리가 흔히 이것들이 '일치 하는가' 에 대해 검사할때 '==' 연산자를 사용하듯

이것들의 '타입'이 '일치 하는가'에 대해 검사할땐 'is' 연산자를 사용합니다.

 

특이한 점은 '타입'이 일치하는가에 대한 기준이 상당히 느슨해서 어떠한 타입의 서브 타입이여도 일치 한다고 판단합니다.

 

예제를 들어보죠.

이러한 클래스 두개가 있다고 해봅시다.

public class Entity {}
public class Player : Entity {}

 

is를 통해 타입을 비교하면 이렇게 결과가 나오죠.

Entity entity = new Entity();
Player player = new Player();

bool a = entity is Entity; // true
bool b = player is Entity; // true
bool c = entity is Player; // false

 

 

그러니 웬만해선 타입 체킹에선 is를 사용합니다.

하지만 특이한경우도 있겠죠. 서브 타입을 허용하지 않는 빡빡한 검사를 하고 싶을 수도 있잖아요?

그때 사용하는게 'GetType()'을 사용한 체킹입니다.

 

 


 

 

 

GetType()

GetType 함수는 해당 클래스의 타입을 반환합니다.

typeof랑은 다릅니다. typeof는 객체로 호출할 수 없고 GetType은 객체로만 호출할 수 있는 메서드입니다.

그러니 용도가 확연히 다르죠.

 

GetType을 사용하면 이렇게 비교할 수 있겠죠.

 

 

하지만 말했듯이 GetType은 아주 엄격해요.

그렇기 때문에 해당 타입의 서브 타입은 절대 허용하지 않습니다.

Entity entity = new Entity();
Player player = new Player();

bool a = entity.GetType() == typeof(Entity); // true
bool b = player.GetType() == typeof(Entity); // false
bool c = entity.GetType() == typeof(Player); // false

 

 

마땅한 사용처는 잘 모르겠네요. 보통 이렇게 검사하는 경우는 잘 없어서요.

 

 


 

 

 

마치는 말

그냥 갑자기 쓰고 싶어졌습니다.

이 글은 RE : 격 자의 2번째 개발일지 작성중에 작성되었습니다.

서순상 이 글이 먼저 올라가면 안될 것 같아서 일단 적어두고 2번째 개발일지가 전부 적히면 그때 올라갈 예정입니다.

'개발 > C#' 카테고리의 다른 글

[.NET Core] | #0 : 세상에서 가장 쉬운 서버 만들기  (3) 2025.07.01
[C#] | Exception has been thrown by the target of an invocation. 은 대체 뭐고 어떻게 해결하는걸까  (0) 2025.02.11
[C#] | 확장 메서드 쓰고 싶다~.  (0) 2025.02.09
[C#] | 대체 is not은 뭔데  (2) 2024.09.26
  1. 개요
  2. is
  3. GetType()
  4. 마치는 말
'개발/C#' 카테고리의 다른 글
  • [.NET Core] | #0 : 세상에서 가장 쉬운 서버 만들기
  • [C#] | Exception has been thrown by the target of an invocation. 은 대체 뭐고 어떻게 해결하는걸까
  • [C#] | 확장 메서드 쓰고 싶다~.
  • [C#] | 대체 is not은 뭔데
SundG0162
SundG0162
블로그 프로필은 머핀입니다.
  • SundG0162
    게임개발고수가될거야
    SundG0162
  • 전체
    오늘
    어제
    • 분류 전체보기 (79)
      • 주저리 (3)
        • 잡담 (2)
        • 장현우 (0)
        • 회고록 (1)
      • 개발 (51)
        • C# (5)
        • CITADEL : 성채 (1)
        • HEXABEAT (1)
        • FRACTiLE (6)
        • UNNAMED (9)
        • Default Defense (10)
        • T-Engine (1)
        • Project EW (0)
        • VIRTUS (0)
        • Unity (3)
        • C++ (13)
        • WinAPI (1)
        • 그 외 (0)
      • 알고리즘 (13)
        • C# (1)
        • C++ (12)
      • 자료구조 (2)
        • C++ (1)
        • C# (0)
        • 공용 (1)
      • 기타 (10)
        • 아트 (6)
        • AI (2)
        • 수학 (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    C#
    코드트리
    생성형ai
    유니티
    AI
    코딩테스트
    LLM
    티스토리챌린지
    오블완
    코딩
    코딩트리조별과제
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
SundG0162
[C#] | Type 비교에서의 'is' 와 'GetType()'
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.