[swift] Swift에서 Custom 타입 확인하기

Swift는 강력한 타입 시스템을 가지고 있어, 변수 또는 상수의 타입을 명확하게 지정할 수 있습니다. 그렇지만 때로는 우리가 사용하는 코드에서 타입을 확인해야 하는 경우가 있을 수 있습니다. 특히, Custom 타입을 다룰 때 타입 확인은 매우 유용합니다. 이번 블로그 포스트에서는 Swift에서 Custom 타입을 확인하는 방법에 대해 알아보겠습니다.

1. 타입 확인을 위한 is 연산자

Swift에서는 is 연산자를 사용하여 타입을 확인할 수 있습니다. is 연산자는 특정 인스턴스가 특정 타입과 일치하는지 여부를 판단하는 데 사용됩니다.

아래는 Person 이라는 Custom 클래스가 있다고 가정해 보겠습니다.

class Person {
  var name: String

  init(name: String) {
    self.name = name
  }
}

이제 Person 클래스의 인스턴스를 생성하고, is 연산자를 사용하여 타입을 확인해 보겠습니다.

let person = Person(name: "John")

if person is Person {
  print("person은 Person 타입입니다.")
} else {
  print("person은 Person 타입이 아닙니다.")
}

결과적으로 “person은 Person 타입입니다.”라는 출력문을 볼 수 있습니다.

2. 타입 캐스팅을 위한 as? 연산자

타입 확인을 위해 is 연산자를 사용했다면, 타입 캐스팅을 위해서는 as? 연산자를 사용합니다. as? 연산자는 인스턴스를 특정 타입으로 캐스팅하고, 캐스팅이 성공하면 옵셔널 타입으로 반환합니다.

다음은 타입 캐스팅을 위해 as? 연산자를 사용하는 예제입니다.

class Animal {
  func speak() {
    print("동물이 소리를 낸다.")
  }
}

class Dog: Animal {
  override func speak() {
    print("멍멍!")
  }
}

class Cat: Animal {
  override func speak() {
    print("야옹!")
  }
}

let animal: Animal = Dog()

if let dog = animal as? Dog {
  dog.speak()
} else if let cat = animal as? Cat {
  cat.speak()
} else {
  print("알 수 없는 동물입니다.")
}

위 코드에서 animal 인스턴스가 Dog 타입인지, Cat 타입인지 확인한 후, 해당 타입으로 캐스팅하여 speak() 메소드를 호출하도록 했습니다. 결과적으로 “멍멍!”이라는 결과가 출력됩니다.

3. 타입 캐스팅을 위한 as! 연산자

as! 연산자는 타입 캐스팅을 강제하는 용도로 사용됩니다. 캐스팅이 실패할 경우 런타임 에러가 발생하므로, 주의해서 사용해야 합니다.

class Vehicle {
  func drive() {
    print("차량이 주행중입니다.")
  }
}

class Car: Vehicle {
  override func drive() {
    print("자동차가 주행중입니다.")
  }
}

let vehicle: Vehicle = Car()

let car = vehicle as! Car
car.drive()

위 코드에서 vehicle 인스턴스를 Car 타입으로 캐스팅한 후, drive() 메소드를 호출하고 있습니다. 캐스팅이 성공적으로 이루어지면 “자동차가 주행중입니다.”라는 결과가 출력됩니다. 그러나 만약 vehicleCar 타입이 아니라면, 런타임 에러가 발생합니다.

참고 자료