개요
격 자의 리메이크를 진행하며 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 |