이름 짓기: 카멜 케이스와 의미 있는 이름
변수나 상수의 이름을 지을 때는 카멜 케이스(CamelCase) 표기법을 따르는 것이 Swift의 표준 규칙입니다. 카멜 케이스란, 첫 단어는 소문자로 시작하고, 이어지는 각 단어의 첫 글자만 대문자로 작성하는 방식입니다. 🐫
let myName = "Paul" // my(소), Name(대)
var totalAnimalLegs = 8 // total(소), Animal(대), Legs(대)
매우 중요한 점은, 이름만 봐도 그 역할과 의미를 명확히 알 수 있도록 짓는 것입니다.
예를 들어, let foo = 2
와 같이 의미 없는 이름은 피해야 합니다. foo
가 무엇을 의미하는지 아무도 알 수 없습니다. 대신 let age = 2
라고 작성하면, 이 상수가 ‘나이’를 나타내며 그 값이 ‘2’라는 것을 즉시 파악할 수 있습니다.
이렇게 의미를 잘 설명하는 이름은 미래의 자신과 코드를 함께 읽을 다른 동료들을 돕는 가장 좋은 방법이며, 코드를 관리하고 확장하기 쉽게 만들어 줍니다. 더 자세한 내용은 Swift API 가이드라인을 참고하시면 좋습니다.
Swift의 핵심 데이터 타입
모든 변수와 상수는 반드시 **타입(Type)**을 가집니다. 가장 기본적이고 중요한 타입은 다음과 같습니다.
Int
: 정수Float
,Double
: 실수 (소수점 숫자)String
: 문자열Bool
: 불리언 (참/거짓)
숫자 타입: Int
, Float
, Double
Int
는*정수(whole number)를 나타냅니다. 양수, 음수 모두 가능하지만 소수점은 포함할 수 없습니다.
Float
와 Double
은 소수점을 포함하는 숫자(실수)**를 나타냅니다. 둘의 차이는 정밀도(precision)에 있습니다. Double
은 Float
보다 약 두 배 더 높은 정밀도를 가지므로 더 많은 소수점 이하 자릿수를 저장할 수 있습니다. 그래서 이름도 ‘Double’입니다.
만약 타입을 명시하지 않고 소수점 숫자를 선언하면, Swift는 기본적으로 더 정밀한
Double
타입으로 추론합니다.
타입이 다른 값들 간의 연산
Swift에서는 같은 타입끼리만 연산이 가능합니다. 이는 매우 중요한 규칙입니다. 만약 Int
타입과 Double
타입을 직접 더하려고 하면 오류가 발생합니다.
let integerValue: Int = 4
let doubleValue: Double = 4.2
// let result = integerValue + doubleValue
// 🚨 오류 발생! Int와 Double 타입의 값은 직접 더할 수 없습니다.
컴퓨터는 이 결과를 Int
로 만들어야 할지(소수점을 버리고 8로), Double
로 만들어야 할지(8.2로) 스스로 결정할 수 없기 때문입니다.
해결 방법 1: 타입 캐스팅 (Type Casting)
타입 캐스팅은 한 타입을 다른 타입으로 명시적으로 변환하는 것입니다. 이를 통해 타입 불일치 문제를 해결할 수 있습니다.
let catLegsAsDouble: Double = 4.2
let dogLegs: Int = 4
// 방법 A: dogLegs(Int)를 Double로 변환하여 더하기
let totalLegsAsDouble = catLegsAsDouble + Double(dogLegs) // 4.2 + 4.0 = 8.2
// 방법 B: catLegsAsDouble(Double)을 Int로 변환하여 더하기 (소수점 버려짐)
let totalLegsAsInt = Int(catLegsAsDouble) + dogLegs // 4 + 4 = 8
해결 방법 2: 타입 명시와 추론 활용하기
타입 명시(Type Annotation)를 통해 변수나 상수가 가져야 할 타입을 강제할 수 있습니다.
// catLegs를 처음부터 Double 타입으로 선언합니다.
// 숫자 4는 정수처럼 보이지만, Double 타입으로 선언했기 때문에 Swift가 4.0으로 자동 변환해줍니다.
let catLegs: Double = 4
물론, 전혀 호환되지 않는 타입 간의 변환은 불가능합니다. 문자열을 숫자로 바로 바꿀 수는 없습니다.
// let someNumber: Double = "Paul" // 🚨 오류! 문자열을 숫자로 바로 변환할 수 없습니다.
대부분의 경우 Swift가 타입을 똑똑하게 추론(infer)하기 때문에 : String
과 같은 타입 명시는 불필요(redundant)하며 생략할 수 있습니다.
불리언 타입: Bool
불리언(Boolean) 또는 Bool
타입은 오직 true
(참) 또는 false
(거짓) 두 가지 값만 가질 수 있는 타입입니다. ✅/❌
// canDrive는 Bool 타입의 상수이며, 값은 false 입니다.
let canDrive: Bool = false
// Swift가 true를 보고 isStudent가 Bool 타입이라고 추론합니다.
let isStudent = true
불리언 타입의 이름은 canDrive
(운전할 수 있는가?), isStudent
(학생인가?)처럼 질문 형태로 지으면 코드를 읽기 훨씬 쉬워집니다.