[C#] as, is

2024. 6. 25. 20:08·Game Programming/C#
728x90
반응형

as / is

as 키워드는 특정 객체가 주어진 형식으로 변환 가능한지를 안전하게 확인할 때 사용됩니다.

주어진 객체를 지정된 형식으로 변환하려고 시도하며 변환에 실패하면 null을 반환합니다.

 

is 키워드는 특정 객체가 주어진 형식과 호환되는지를 확인하는데 사용됩니다.

주어진 객체가 호환이 되는 경우 true, 아닌 경우 false를 반환합니다.

 

다음과 같이 Character를 상속받는 Player, Monster 클래스가 있다고 가정해보도록 하겠습니다.

class Character
{
    public Character(string name)
    {
        Name = name;
    }

    public string Name { get; set; }

    public void PrintName()
    {
        Console.WriteLine(Name);
    }
}

class Player : Character
{
    public Player(string name) : base(name) { }

    public void Attack()
    {
        Console.WriteLine("플레이어 공격!");
    }
}

class Monster : Character
{
    public Monster(string name) : base(name) { }

    public void Defense()
    {
        Console.WriteLine("몬스터 방어!");
    }
}

 

Character타입으로 플레이어와 몬스터를 관리하고자 한다면 각각의 Attack(), Defense() 함수를 사용하지 못하게 됩니다.

static void Main(string[] args)
{
    Character player = new Player("톰");
    Character monster = new Monster("제리");
    
    // 현재 타입은 Character이므로 Player, Monster의 함수 사용 불가
    // player.Attack() - (X)
    // monster.Defense() - (X)
}

 

이때, 다운 캐스팅을 통해 Character타입의 객체를 Player, Monster 타입으로 형변환이 가능하며, as/is 키워드를 사용하여 형변환이 가능한지 체크할 수 있습니다.

 

static void Main(string[] args)
{
    Character player = new Player("톰");
    Character monster = new Monster("제리");

    // 플레이어 타입으로 형변환 (형변환에 실패하면 null 리턴)
    Player p = player as Player;
    if (p != null)
    {
        p.Attack();
    }

    // monster 객체가 Monster 타입으로 형변환하는지 체크 (가능하면 true, 불가능하면 false)
    if (monster is Monster)
    {
        // 강제 형변환(Character -> Monster)
        Monster m = (Monster)monster;
        m.Defense();
    }
}

 

위와 같이 as, is 키워드를 사용해 형변환이 가능하지만, 강제 형변환은 최대한 피하는 것이 좋으므로 as 키워드를 사용하는 것을 추천합니다.

728x90
반응형
저작자표시 비영리 변경금지

'Game Programming > C#' 카테고리의 다른 글

[C#] 얕은 복사 vs 깊은 복사 (Shallow Copy vs Deep Copy)  (0) 2024.06.29
[C#] 의존성 주입(DI, Dependency Injection)  (0) 2024.06.29
[C#] Delegate  (0) 2024.06.25
[C#] 가변 파라미터, 선택적 인수, 명명된 인수  (0) 2024.06.25
[C#] Null 조건 연산자  (0) 2024.06.25
'Game Programming/C#' 카테고리의 다른 글
  • [C#] 얕은 복사 vs 깊은 복사 (Shallow Copy vs Deep Copy)
  • [C#] 의존성 주입(DI, Dependency Injection)
  • [C#] Delegate
  • [C#] 가변 파라미터, 선택적 인수, 명명된 인수
리태s
리태s
게임 클라이언트 프로그래머 직무를 준비하며 공부한 내용을 정리한 블로그입니다.
    반응형
    250x250
  • 리태s
    LeeTaes 공부노트
    리태s
  • 전체
    오늘
    어제
    • Home (165)
      • 프로젝트 (20)
        • Isaac 3D (5)
        • TimelessAdventure (13)
        • FruitsPuzzle (2)
      • Game Programming (25)
        • C# (8)
        • Unity Engine (6)
        • Unreal Engine (8)
        • UE_Multiplayer (3)
      • 코딩테스트 (111)
        • 프로그래머스 (Lv. 0) (27)
        • 프로그래머스 (Lv. 1) (31)
        • 프로그래머스 (Lv. 2) (21)
        • 백준 (Study) (29)
        • 알고리즘 (3)
      • CS지식 (7)
        • 운영체제 (7)
      • 일상 (2)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    프로젝트
    C++
    프로세스
    Unreal Engine
    Summer/Winter Coding
    후기
    백준
    c#
    프로그래머스
    2018 kakao
    fsoftobjectpath
    delegate
    timelessadventure
    issac3d
    Algorithm
    ai controller
    구현
    CS지식
    pcce 기출문제
    unrealengine
    tsoftobjectptr
    fruitspuzzle
    2019 kakao
    2022 kakao
    청년취업사관학교
    sesac
    코딩테스트
    project t.a develop
    unity
    dataasset
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
리태s
[C#] as, is
상단으로

티스토리툴바