본문 바로가기
iOS 프로그래밍

Swift 데이터 타입, 상수, 그리고 변수: iOS 개발의 기본 벽돌

by iOS 2025. 4. 21.

iOS 앱 개발의 여정을 시작하신 여러분을 환영합니다! SwiftUI를 중심으로 Swift 언어를 배우는 것은 iOS 개발의 핵심입니다. 어떤 복잡한 앱이든 가장 기초가 되는 것은 바로 데이터(정보)를 다루는 것입니다. 그리고 이 데이터를 효율적이고 안전하게 다루기 위해 우리는 데이터 타입, 상수, 그리고 변수라는 개념을 이해해야 합니다.

 

이번 글에서는 Swift 언어에서 데이터를 표현하는 방식인 데이터 타입과, 데이터를 저장하는 공간인 상수와 변수에 대해 깊이 있게 살펴보겠습니다. 이 개념들은 모든 프로그래밍의 기본이자, Swift의 강력한 타입 안전성(Type Safety)을 이해하는 첫걸음입니다.

 

데이터 타입이란 무엇일까요?

데이터 타입은 프로그래밍 언어에서 다룰 수 있는 여러 종류의 데이터를 미리 정의해 놓은 것입니다. 예를 들어, 정수, 소수, 참/거짓 값, 문자열 등 우리가 일상생활에서 접하는 다양한 정보의 형태를 컴퓨터 세계에 표현하기 위한 약속이라고 생각하면 쉽습니다.

왜 데이터 타입이 중요할까요?

  • 메모리 관리: 각 데이터 타입은 컴퓨터 메모리에서 차지하는 공간 크기가 다릅니다. 데이터 타입을 명시함으로써 컴퓨터가 효율적으로 메모리를 할당하고 관리할 수 있습니다.
  • 안전한 연산: 특정 타입의 데이터에만 적용할 수 있는 연산이 있습니다. 예를 들어, 숫자 타입에는 덧셈, 뺄셈이 가능하지만, 문자열 타입에는 직접적인 산술 연산이 어렵습니다. 데이터 타입을 알면 컴파일러(코드를 컴퓨터가 이해하는 언어로 번역하는 프로그램)가 잘못된 연산을 미리 잡아낼 수 있습니다.
  • 의도 명확화: 개발자가 어떤 종류의 데이터를 다루고 있는지 코드를 통해 명확히 드러낼 수 있어 코드의 가독성과 유지보수성을 높입니다.

Swift는 타입 안전성이 높은 언어입니다. 이는 한 번 타입을 정하면 그 타입의 데이터만 할당할 수 있다는 의미이며, 컴파일 시점에서 타입 오류를 잡아내어 런타임 오류(프로그램 실행 중에 발생하는 오류)의 가능성을 크게 줄여줍니다.

 

Swift의 주요 기본 데이터 타입

Swift에서 자주 사용되는 기본적인 데이터 타입은 다음과 같습니다.

정수 (Integers)

소수점이 없는 숫자를 나타냅니다. Int가 가장 일반적으로 사용되며, 시스템의 네이티브 워드 크기(32비트 또는 64비트)에 따라 크기가 결정됩니다. 특정 크기나 부호가 필요한 경우 Int8, UInt16 등과 같이 비트 수와 부호(Unsigned: UInt)를 명시할 수도 있습니다.

let age: Int = 30
let year: Int = 2024
// 부호 없는 정수 (0 또는 양수만 저장 가능)
let positiveNumber: UInt = 100

Int는 대부분의 경우에 충분하며, 특별한 이유가 없다면 Int를 사용하는 것이 좋습니다.

부동 소수점 숫자 (Floating-Point Numbers)

소수점이 있는 숫자를 나타냅니다. Swift는 주로 두 가지 부동 소수점 타입을 제공합니다.

  • Double: 64비트 부동 소수점 숫자를 나타냅니다. 정밀도가 높아 대부분의 경우에 사용됩니다.
  • Float: 32비트 부동 소수점 숫자를 나타냅니다. Double보다 정밀도가 낮습니다.

명시적으로 타입을 지정하지 않으면 Swift는 부동 소수점 리터럴에 대해 Double을 추론합니다.

let temperature: Double = 25.5
let pi: Double = 3.1415926535
let lightSpeed: Float = 299792458.0 // Float 타입 명시

불리언 (Booleans)

참(true) 또는 거짓(false) 두 가지 값만 가질 수 있는 논리 타입입니다. 주로 조건문이나 반복문 등 프로그램의 흐름을 제어할 때 사용됩니다.

let isDarkMode: Bool = true
let isLoggedIn: Bool = false

문자열 (Strings)

하나 이상의 문자로 이루어진 시퀀스(sequence)를 나타냅니다. 텍스트 데이터를 다룰 때 사용됩니다. 큰따옴표(")로 묶어서 표현합니다.

let greeting: String = "안녕하세요, Swift!"
let appName: String = "MyAwesomeApp"

Swift의 String은 유니코드(Unicode)를 완벽하게 지원하여 다양한 언어와 이모티콘 등을 문제없이 다룰 수 있습니다.

문자 (Characters)

단일 유니코드 문자를 나타냅니다. String과는 다르게 오직 한 글자만 저장할 수 있습니다.

let initial: Character = "S"
let exclamationMark: Character = "!"

 

컬렉션 타입 (Collections)

Swift는 여러 데이터를 모아서 관리하는 강력한 컬렉션 타입도 제공합니다. 이들도 특정 타입의 데이터를 저장하는 "타입"입니다.

  • Array: 순서가 있는 동일 타입 데이터의 모음
  • Dictionary: 순서가 없고, 키(Key)와 값(Value)으로 이루어진 쌍의 모음
  • Set: 순서가 없고, 중복되지 않는 동일 타입 데이터의 모음

이 컬렉션 타입들은 데이터 타입 그 자체는 아니지만, 특정 데이터 타입의 인스턴스를 담는 컨테이너로서 매우 중요합니다. 컬렉션에 대한 자세한 내용은 추후 다른 글에서 다루겠습니다.

 

상수와 변수: 데이터 저장 공간

프로그램에서 데이터를 사용하려면 해당 데이터를 저장할 메모리 공간이 필요합니다. Swift에서는 이 공간을 상수(Constant)변수(Variable)라는 두 가지 형태로 제공합니다. 둘의 가장 큰 차이점은 값의 변경 가능성입니다.

상수 (Constants) - let

상수는 한 번 값이 할당되면 절대로 변경할 수 없습니다. 변하면 안 되는 값을 저장할 때 사용합니다. Swift에서는 상수를 선언할 때 let 키워드를 사용합니다.

let maxAttempts: Int = 3 // 최대 시도 횟수는 변하지 않음
let appVersion: String = "1.0.0" // 앱 버전은 특정 시점에 고정됨
let piValue = 3.14159 // 타입 추론 사용 (Double 타입)

// 오류 발생: 상수는 값을 변경할 수 없음
// maxAttempts = 5 // 컴파일 오류!

상수를 사용하는 것은 코드의 안정성을 높이는 좋은 습관입니다. 값이 변경되지 않음을 보장하므로 예상치 못한 값 변경으로 인한 버그 발생 가능성을 줄여줍니다. 가능한 경우 var 대신 let을 사용하는 것이 Swift 개발의 권장 사항입니다.

변수 (Variables) - var

변수는 값이 할당된 후에도 언제든지 값을 변경할 수 있습니다. 프로그램 실행 중에 값이 바뀔 수 있는 데이터를 저장할 때 사용합니다. Swift에서는 변수를 선언할 때 var 키워드를 사용합니다.

var score: Int = 0 // 게임 점수는 계속 변함
var userName: String = "Guest" // 사용자 이름은 변경 가능
var currentTime = "10:00" // 타입 추론 사용 (String 타입)

// 변수는 값을 변경할 수 있음
score = 100
userName = "SwiftMaster"
currentTime = "10:30"

사용자의 입력 값, 센서 데이터, 애니메이션 진행 상태 등 계속해서 갱신되는 정보를 다룰 때는 var를 사용해야 합니다.

 

타입 안전성과 타입 추론

앞서 Swift는 타입 안전성이 높은 언어라고 언급했습니다. Swift는 개발자가 명시적으로 타입을 지정하지 않아도 값의 타입을 추론(Type Inference)하는 능력이 뛰어납니다. 이는 코드를 더 간결하게 작성할 수 있게 해줍니다.

명시적 타입 지정 vs. 타입 추론

변수나 상수를 선언할 때 콜론(:) 뒤에 타입 이름을 붙여 타입을 명시적으로 지정할 수 있습니다.

var greeting: String = "Hello" // String 타입 명시
let year: Int = 2024         // Int 타입 명시

하지만 Swift는 할당되는 값을 보고 타입을 스스로 판단할 수 있습니다. 이 경우 타입 선언 부분을 생략할 수 있으며, 이를 타입 추론이라고 합니다.

var greeting = "Hello" // Swift가 String으로 추론
let year = 2024         // Swift가 Int로 추론
let temperature = 28.5 // Swift가 Double로 추론
let isDaytime = true    // Swift가 Bool로 추론

타입 추론은 편리하지만, 때로는 코드를 읽는 사람이 타입을 바로 파악하기 어렵게 만들 수도 있습니다. 또한, 특정 타입(예: Float 대신 Double, 또는 특정 크기의 Int)을 명시해야 할 필요가 있을 때는 반드시 타입을 지정해야 합니다.

타입 안전성 예시

Swift의 타입 안전성은 다른 타입의 값을 기존 변수/상수에 할당하려고 할 때 오류를 발생시켜 보여줍니다.

var score: Int = 100

// 오류 발생: Int 타입 변수에 String 값을 할당할 수 없음
// score = "고득점" // 컴파일 오류!

var website: String = "apple.com"

// 오류 발생: String 타입 변수에 Int 값을 할당할 수 없음
// website = 12345 // 컴파일 오류!

이처럼 Swift는 컴파일 시점에서 타입 불일치를 감지하여 잠재적인 버그를 미리 방지해 줍니다. 이는 특히 대규모 프로젝트를 진행하거나 여러 개발자가 협업할 때 코드의 견고성을 높이는 데 큰 도움이 됩니다.

 

마무리

이번 글에서는 Swift 언어의 가장 기본적인 구성 요소인 데이터 타입과 상수/변수에 대해 알아보았습니다. 정수(Int), 부동 소수점(Double, Float), 불리언(Bool), 문자열(String), 문자(Character) 등 다양한 데이터 타입을 이해하고, let (상수)과 var (변수)를 적절히 사용하여 데이터를 저장하고 관리하는 방법을 배웠습니다.

 

Swift의 강력한 타입 안전성과 편리한 타입 추론 기능은 코드를 더 안전하고 간결하게 작성할 수 있도록 돕습니다. 이 개념들은 앞으로 SwiftUI를 사용하여 멋진 iOS 앱을 만들어 나가는 여정의 가장 기초가 되는 벽돌입니다.

 

다음 글에서는 이 기초를 바탕으로 Swift의 기본적인 연산자에 대해 살펴보겠습니다. 꾸준히 학습하여 Swift 언어의 기초를 탄탄히 다지시길 바랍니다! 궁금한 점이 있다면 언제든지 질문해주세요.