[Swift] 업캐스팅과 다운캐스팅, Swift와 Kotlin 옵셔널의 차이

2023. 9. 25. 00:10·Apple/Swift
728x90
반응형

이번 시간에는 업캐스팅과 다운캐스팅에 대해서 간단히 알아보고 Swift에서 사용되는 옵셔널이 코틀린에서 사용되는데 두 차이점에 대해서 간단히 표로 정리해보려고 합니다!
 

업캐스팅(Upcasting)과 다운캐스팅(Downcasting)

업캐스팅(Upcasting)과 다운캐스팅(Downcasting)은 프로그래밍에서 주로 객체 지향 언어에서 사용되는 개념입니다. 이 두 용어는 클래스의 계층 구조와 관련이 있으며, 특히 상속 관계에 있는 클래스 사이에서 타입 변환을 할 때 사용됩니다.
 
먼저 업캐스팅에 대해서 살펴보겠습니다.
업캐스팅 (Upcasting): 업캐스팅은 하위 클래스의 인스턴스를 상위 클래스 타입으로 변환하는 것을 말합니다. 이는 항상 안전하게 수행할 수 있으며, 별도의 검사나 예외 처리가 필요하지 않습니다. 예를 들어, 'Dog' 클래스가 'Animal' 클래스를 상속받았다면, 'Dog' 인스턴스를 'Animal' 타입으로 업캐스트 할 수 있습니다.
 
소스 코드로 살펴보겠습니다.

class Animal { }
class Dog: Animal { }

let myDog = Dog()
let myAnimal = myDog as Animal  // Upcasting

 
다음은 다운캐스팅입니다.
다운캐스팅 (Downcasting): 다운캐스팅은 상위 클래스의 인스턴스를 하위 클래스 타입으로 변환하는 것을 말합니다. 이 작업은 항상 안전하지 않기 때문에 실행 시간에 실패할 가능성이 있습니다. 따라서 Swift와 같은 언어에서는 안전한 다운캐스트(as?)와 강제 다운 케스트(as!) 두 가지 방법을 제공합니다.
 
소스 코드로 살펴보겠습니다.

class Animal { }
class Dog: Animal { }

let myAnimal: Animal = Dog()

if let myDog = myAnimal as? Dog {
    // Downcast succeeded; `myDog` is of type `Dog`.
} else {
    // Downcast failed; `myAnimal` was not of type `Dog`.
}

여기서 중요한 점은 실제 객체의 타입이 아닌 참조 변수의 타입만 변경된다는 것입니다. 실제 객체 자체가 변경되지 않습니다.
 

Swift와 Kotlin 옵셔널의 차이

Swift와 Kotlin 두 언어 모두 옵셔널을 사용하는 언어입니다. 하지만 옵셔널을 사용한다고 해서 내용이 같지 않고 조금씩 차이가 있기 때문에 간단하게 알아볼 수 있도록 표로 정리를 해보았습니다.

 
감사합니다.


틀린 부분이 있거나 더 좋은 내용 훈수 환영합니다!
공감과 댓글 부탁드립니다.

728x90
반응형

'Apple > Swift' 카테고리의 다른 글

[Swift] 함수에 대한 개념과 다양한 예시 소스  (5) 2023.09.29
[Swift] 제어문과 다양한 예제 정리  (0) 2023.09.26
[Swift] 옵셔널과 Nil합병 연산자  (0) 2023.09.23
[Swift] Type Safety 개념, 옵셔널의 개념과 예시  (4) 2023.09.19
[Swift] 데이터 타입, 상수, 변수의 개념과 예시  (0) 2023.09.12
'Apple/Swift' 카테고리의 다른 글
  • [Swift] 함수에 대한 개념과 다양한 예시 소스
  • [Swift] 제어문과 다양한 예제 정리
  • [Swift] 옵셔널과 Nil합병 연산자
  • [Swift] Type Safety 개념, 옵셔널의 개념과 예시
P_Piano
P_Piano
Apple 생태계 개발자가 되기 위한 학습과 경험의 기록
    반응형
    250x250
  • P_Piano
    피피아노의 개발 일지
    P_Piano
  • 전체
    오늘
    어제
    • 분류 전체보기 (209)
      • Apple (127)
        • iOS (22)
        • visionOS (4)
        • Swift (68)
        • UIKit (2)
        • SwiftUI (24)
        • RxSwift (2)
        • Xcode (5)
      • C언어 (5)
      • C++ (8)
      • Dart (1)
      • Python (3)
      • JavaScript (17)
      • Git (1)
      • CS (39)
        • 디자인 패턴 (6)
        • 네트워크 (20)
        • 운영체제 (8)
        • Database (5)
        • 자료구조 (0)
      • IT 지식 (2)
      • IT 뉴스 (4)
      • 출처 표기 (1)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    Xcode
    클래스
    ios
    Vision Pro
    함수
    옵셔널
    오블완
    자바스크립트
    Apple
    배열
    swiftUI
    운영체제
    디자인패턴
    변수
    프로퍼티 래퍼
    비동기
    티스토리챌린지
    Initializers
    제어문
    SWIFT
    이니셜라이저
    스위프트
    프로세스
    visionOS
    네트워크
    코딩테스트
    프로그래머스
    연산자
    UIKit
    combine
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
P_Piano
[Swift] 업캐스팅과 다운캐스팅, Swift와 Kotlin 옵셔널의 차이
상단으로

티스토리툴바