[swift] 테이터 타입 변환 및 캐스팅에 사용되는 기능

Swift는 데이터 타입 간의 변환 및 캐스팅을 쉽게 처리할 수 있는 다양한 기능을 제공합니다. 데이터 타입 변환은 값의 형식을 하나에서 다른 형식으로 변환하는 것을 의미하며, 캐스팅은 클래스나 프로토콜을 기준으로 인스턴스의 타입을 변환하는 것을 의미합니다. 이러한 기능은 다양한 상황에서 유용하게 활용될 수 있습니다.

1. 암시적 타입 변환

Swift에서는 암시적인 타입 변환을 자동으로 처리해 줍니다. 이는 동일한 데이터 타입으로의 변환이 필요한 경우에 자동으로 변환을 수행하므로 별도의 작업이 필요하지 않습니다. 예를 들어, 정수와 부동소수점 숫자 간의 연산을 수행할 때 Swift는 자동으로 암시적으로 변환하여 결과를 제공합니다.

let a: Int = 5
let b: Double = 2.5

let result = Double(a) + b // 7.5

위 예제에서는 정수 aDouble로 변환하여 부동소수점 숫자 b와 더한 결과를 result 변수에 저장합니다. Swift는 정수를 부동소수점 숫자로 자동으로 변환하여 연산을 수행합니다.

2. 명시적 타입 변환

Swift에서는 명시적으로 타입을 변환해야 하는 경우도 있습니다. 이는 컴파일러가 자동으로 타입을 추론할 수 없는 경우에 사용됩니다. 명시적 타입 변환은 타입의 이름을 사용하여 변환을 수행합니다.

let stringValue = "10"
let intValue = Int(stringValue)!

위 예제에서는 문자열 "10"을 정수형으로 변환하는 명시적 타입 변환이 수행됩니다. Int 타입의 이니셜라이저를 사용하여 문자열을 정수로 변환한 후에 intValue 변수에 저장합니다. 주의해야 할 점은, 변환하는 과정에서 값이 유효하지 않은 경우에는 nil을 반환할 수 있으므로, 이를 감안하여 옵셔널 바인딩 등을 통해 안전하게 처리해야 합니다.

3. 타입 체크와 캐스팅

Swift에서는 타입 체크와 캐스팅을 통해 인스턴스의 타입을 확인하고 다른 타입으로 캐스팅할 수 있습니다. 타입 체크는 is 키워드를 사용하여 인스턴스의 타입을 확인하는 것을 의미하며, 캐스팅은 as 키워드를 사용하여 인스턴스를 다른 타입으로 변환하는 것을 의미합니다.

class Person {
    var name: String
    
    init(name: String) {
        self.name = name
    }
}

class Student: Person {
    var school: String
    
    init(name: String, school: String) {
        self.school = school
        super.init(name: name)
    }
}

let person: Person = Student(name: "John", school: "ABC School")

if person is Person {
    print("person is an instance of Person")
}

if person is Student {
    print("person is an instance of Student")
}

if let student = person as? Student {
    print("person is successfully casted to Student")
    print("School: \(student.school)")
}

위 예제에서는 Person 클래스와 Student 클래스가 있습니다. Student 클래스는 Person 클래스를 상속받습니다. person 변수는 Person 타입으로 선언되었지만, Student 클래스의 인스턴스를 할당하여 다형성을 활용하고 있습니다.

is 키워드를 사용하여 person 변수의 타입을 체크하고, as? 키워드를 사용하여 person 변수를 Student 타입으로 다운캐스팅합니다. 다운캐스팅을 시도한 후, 옵셔널 바인딩을 통해 올바르게 캐스팅되었는지 확인하고, Student 타입의 인스턴스로 접근하여 속성을 출력합니다.

이와 같이 Swift에서는 타입 변환 및 캐스팅을 통해 다양한 상황에서 유연하게 코드를 구현할 수 있습니다.

참고 자료