Swift 옵셔널 예시 설명

jeongmuyamette·2025년 3월 9일

TIL

목록 보기
58/72
post-thumbnail

Swift 옵셔널 예시 설명

코드 분석

var optionalName: String? = "변창원"

print(optionalName) 
// Optional("변창원")  <- 옵셔널로 감싸져 있어서 옵셔널 래핑된 상태!라고 이야기 함.

optionalName += "입니다" // 오류 발생
// 각각의 타입은 무엇일까요?

상세 설명

1. 변수 선언 부분

var optionalName: String? = "변창원"
  • optionalNameString? 타입으로 선언되었습니다.
  • String?는 옵셔널 문자열 타입입니다.
  • 여기서 값 "변창원"이 옵셔널 컨테이너 안에 포장(래핑)됩니다.

2. 출력 부분

print(optionalName)
// Optional("변창원")
  • print()로 옵셔널 값을 직접 출력하면 Optional("변창원")과 같이 출력됩니다.
  • 이는 값이 옵셔널 컨테이너 안에 래핑되어 있음을 보여줍니다.
  • Swift는 이를 통해 이 값이 옵셔널임을 명시적으로 표시합니다.

3. 오류 발생 부분

optionalName += "입니다" // 오류 발생
  • 이 코드에서 오류가 발생하는 이유는 타입 불일치 때문입니다.
  • += 연산자는 두 개의 문자열(String)을 연결하는 연산자입니다.
  • 하지만 optionalNameString? 타입이고, "입니다"는 String 타입입니다.
  • 옵셔널 타입(String?)과 비옵셔널 타입(String)은 서로 다른 타입이므로 직접 연산할 수 없습니다.

각 부분의 타입

  • optionalName: String? (옵셔널 문자열)
  • "변창원": 초기에는 String이지만 optionalName에 할당되면서 String?로 래핑됨
  • "입니다": String (일반 문자열)

오류 해결 방법

이 오류를 해결하려면 옵셔널을 언래핑해야 합니다. 몇 가지 방법이 있습니다:

1. 옵셔널 바인딩 사용

if var name = optionalName {
    name += "입니다"
    print(name) // "변창원입니다" 출력
}

2. 강제 언래핑 사용 (값이 있다고 확신할 때만)

optionalName! += "입니다"
print(optionalName!) // "변창원입니다" 출력

3. 옵셔널 체이닝과 nil 병합 연산자 사용

let result = (optionalName ?? "") + "입니다"
print(result) // "변창원입니다" 출력

4. 옵셔널 값 자체를 수정하려면

if optionalName != nil {
    optionalName = optionalName! + "입니다"
}
print(optionalName!) // "변창원입니다" 출력

비유로 이해하기

옵셔널은 마치 선물 상자와 같습니다:

  • optionalName은 "변창원"이라는 내용물이 들어있는 선물 상자입니다.
  • print(optionalName)은 "이것은 선물 상자이고, 안에는 '변창원'이 들어 있습니다"라고 말하는 것과 같습니다.
  • optionalName += "입니다"는 "선물 상자 자체에 '입니다'라는 글자를 붙이려고 시도"하는 것과 같습니다. 이는 불가능합니다.
  • 올바른 방법은 "선물 상자를 열어서(언래핑) 내용물인 '변창원'을 꺼낸 다음, 여기에 '입니다'를 붙이는 것"입니다.

이처럼 Swift의 옵셔널 시스템은 값의 존재 여부를 명확히 하고, 안전하게 처리하도록 강제함으로써 런타임 오류를 방지하는 데 도움을 줍니다.

0개의 댓글