행복을 담는 블로그

[Swift] 기초 문법: nil이란 무엇인가? null과의 차이는? 본문

Mobile/iOS (Swift)

[Swift] 기초 문법: nil이란 무엇인가? null과의 차이는?

hyun0zin 2025. 12. 26. 18:00

Swift를 처음 접하는 개발자라면 nil이라는 키워드가 다소 생소할 수 있습니다. 특히 웹 개발을 접했던 사람이라면 null과 비슷해 보이지만,  Swift만의 독특한 문법적 특징을 가지고 있어 정확한 이해가 필수적입니다.

이번 글에서는 Swift에서 nil이 의미하는 바를 명확히 정의하고, 다른 언어의 null과 어떤 근본적인 차이가 있는지에 대해서 알아보도록 하겠습니다.


1. 정의

nil은 Swift 언어에서 값이 없는 상태를 나타내는 키워드입니다.

  • 값이 없음: nil은 변수나 상수에 유효한 값이 현재 할당되지 않은 상태를 의미합니다.
  • 초기화되지 않은 상태가 아님: nil은 변수가 메모리에 할당되었으나, 현재 '값이 없다'는 상태 자체를 값으로 사용합니다. 즉, 이 자리에 값이 들어갈 수 있음을 명시적으로 나타냅니다.

 

nil과 타입 안전성 (Type Safety)

Swift는 매우 타입에 안전한(Type Safe) 언어입니다. 이 안전성을 위해, Swift에서 일반적인(Non-Optional) 변수나 상수는 절대 nil 값을 가질 수 없습니다.

  • 규칙: Swift에서 변수에 nil을 할당하려면, 개발자가 명시적으로 해당 변수가 nil을 포함할 수 있음을 표시해야 합니다. (이것이 다음 게시글에서 다룰 옵셔널 개념의 핵심입니다.)
  • 컴파일러의 역할: 일반 타입의 변수에 nil을 할당하려고 시도하면, 코드를 실행하기도 전에 컴파일 에러가 발생합니다. 이는 잠재적인 오류를 개발 단계에서 차단하여 앱의 안정성을 획기적으로 높이는 Swift의 핵심 철학입니다.
 
var myName: String = "Alice" // 일반 String 타입
// myName = nil                // 🚨 컴파일 에러 발생!

 


2. nil vs. null: 근본적인 차이점

Swift의 nil은 다른 언어의 null과 개념적으로는 유사하지만, 타입 시스템 내에서의 처리 방식에 큰 차이가 있습니다.

항목 Swift의 nil 다른 언어의 null (예: Java, C#, JS)
타입 제한 특정 선언된 타입에서만 존재 가능
(다음 장에서 다룰 옵셔널 타입)
주로 참조 타입(Reference Type)에서 사용 가능
의미 값이 없는 상태를 나타내는 '유효한 값' 중 하나로 취급됨. 주로 유효하지 않은 메모리 주소 또는 참조가 없음을 의미.
안전성 확보 시점 컴파일 시점에 nil 가능성을 강제 체크함. 주로 런타임에 null 여부를 확인해야 함.
주요 결과 nil을 잘못 사용할 경우 컴파일 경고/에러 발생. null을 잘못 사용하면 NullPointerException 등의 런타임 오류 발생 가능.

💡 핵심 차이
: Swift의 nil은 언어 차원의 타입 안전성에 의해 통제됩니다.
개발자가 명시적으로 nil 가능성을 처리하도록 강제함으로써, 다른 언어에서 흔히 발생하는 런타임 오류의 주범인 'NPE'를 시스템적으로 방지합니다.

 


 

3. nil의 안전한 처리: 언래핑의 필요성

Swift가 nil을 엄격하게 관리하기 때문에, 개발자는 nil이 들어있을 수 있는 변수를 사용하기 전에 반드시 그 안에 값이 있는지 확인하고 추출(Unwrap)하는 과정을 거쳐야 합니다.

만약 이 과정을 생략하고 nil인 변수의 값을 강제로 사용하려고 하면, 이는 앱의 작동을 멈추는 치명적인 런타임 오류로 이어지기 때문입니다.

 

따라서 다음 장에서는 이 nil을 가질 수 있는 변수(옵셔널 변수)를 선언하는 방법과, 값을 안전하게 추출(언래핑)하는 문법 및 옵셔널 체이닝에 대해 자세히 알아보겠습니다.

 

 

참고