티스토리 뷰

Swift를 보면 첫인상이 참 깔끔하다
문법이 간결하고 직관적이라 "배우기 쉬운 언어"라는 느낌이 강하다.

하지만 깊이 들어가 보면 강력한 성능과 최신 프로그래밍 패러다임을 지원하는, 정말 잘 설계된 언어라는 걸 알게 된다.
Swift는 단순히 "iOS 개발에 쓰는 언어"가 아니라, 객체 지향(OOP), 프로토콜 지향(POP), 함수형 프로그래밍(FP)을 모두 조합해서 사용할 수 있는, 현대적인 언어다.

그래서 오늘은 Swift의 핵심 개념과 특징을 정리하면서, 다른 언어들과는 뭐가 다른지, 왜 Swift를 써야 하는지 이야기해보려고 한다.


Swift가 뭔데?

Swift는 애플이 만든 프로그래밍 언어다.
iOS, macOS, watchOS, tvOS 같은 애플 생태계에서 앱을 만들 때 주로 사용한다.

그냥 "애플에서 만든 언어"라고만 생각할수 있지만!
Swift는 정말 많은 장점을 가진 언어다. 

 

간단히 특징을 정리 해보면

빠르다 (Performance) – C++ 수준의 성능을 낼 수 있도록 설계됨
안전하다 (Safety) – 옵셔널(Optionals) 개념으로 null 오류를 방지
간결하다 (Simplicity) – 문법이 짧고 직관적이라 가독성이 높음
모던하다 (Modernity) – 함수형 프로그래밍, 프로토콜 지향 프로그래밍 등 최신 패러다임을 적극 반영

 

어쨋든 좋아 보이기는한데 ..

구체적으로 어떻게 좋은지 아직도 잘 모르겠다. 자세히 한번 알아보자.


Swift의 특징

1) 타입 안정성(Type Safety)과 타입 추론(Type Inference)

 

Swift는 강타입(Strongly Typed) 언어다.
즉, 컴파일 타임에 타입 오류를 잡아주기 때문에 안정성이 높다.

var age: Int = 30
age = "Hello" // ❌ 오류 발생 (String을 Int에 넣을 수 없음)

타입이 일관되게 유지되기 때문에, 런타임 오류가 줄어든다.

 

Swift는 타입 추론(Type Inference)도 지원해서, 변수 선언 시 타입을 생략해도 자동으로 유추해준다.

let name = "Swift" // 자동으로 String 타입으로 인식
let version = 5.9  // 자동으로 Double 타입으로 인식

✅ 장점: 코드가 간결해지고, 타입 안정성을 유지하면서도 유연하게 사용할 수 있다.


2) 옵셔널 (Optionals) – null 안전성 강화

 

Swift의 가장 중요한 개념 중 하나가 바로 옵셔널(Optional)이다.
다른 언어에서는 null 참조 문제가 자주 발생하지만,

Swift에서는 옵셔널을 통해 안전하게 값이 있을 수도 있고, 없을 수도 있는 상황을 다룰 수 있다.

var name: String? = nil // 옵셔널 변수
name = "Swift"

// 옵셔널 바인딩
if let unwrappedName = name {
    print("이름: \(unwrappedName)")
} else {
    print("이름이 없음")
}

Swift에서는 null 참조 오류(NullPointerException)가 거의 발생하지 않는다.

✅ 장점: 코드 안정성이 높아지고, nil 관련 버그를 방지할 수 있다.


3) 값 타입(Value Type) 중심의 설계 – 구조체(Struct) 선호

 

Swift는 구조체(Struct)와 열거형(Enum)을 적극 활용하는 언어다.
다른 객체 지향 언어에서는 대부분 클래스를 사용하는데, Swift에서는 값 타입을 더 권장한다.

struct User {
    var name: String
    var age: Int
}

var user1 = User(name: "Alice", age: 25)
var user2 = user1 // 값이 복사됨

user2.name = "Bob"

print(user1.name) // "Alice" (변경되지 않음)
print(user2.name) // "Bob"

클래스는 참조 타입이라 공유 상태 문제가 발생할 수 있지만, 구조체는 값 타입이라 변경이 독립적으로 이루어진다.

 

장점:

  • 값 타입을 사용하면 스레드 안전성(Thread Safety)이 올라간다.
  • 불필요한 공유 상태를 줄여서 버그 발생 가능성을 낮출 수 있다.

4) Swift의 메모리 관리 – ARC(Automatic Reference Counting)

Swift는 ARC(자동 참조 카운팅, Automatic Reference Counting)를 사용해
메모리를 자동으로 관리한다.

 

1) ARC란?

  • Swift에서는 객체(클래스 인스턴스)를 사용할 때 참조 카운트(Reference Count)를 유지한다.
  • 객체가 더 이상 사용되지 않으면 자동으로 메모리를 해제하여 메모리 누수(Leak)를 방지한다.
  • ARC는 컴파일 타임에 적용되므로, 런타임 오버헤드가 적다.
class Person {
    let name: String
    init(name: String) { self.name = name }
    deinit { print("\(name) 해제됨") }
}

var person: Person? = Person(name: "Alice")
person = nil // "Alice 해제됨"

ARC 덕분에 개발자가 명시적으로 메모리 해제를 할 필요 없이 안정적인 메모리 관리가 가능하다!

 


5) 프로토콜 지향 프로그래밍(POP) 지원 – 유연한 설계 방식

Swift는 객체 지향도 지원하지만, 상속보다는 프로토콜기반 설계를 더 추천한다.

protocol Flyable {
    func fly()
}

struct Bird: Flyable {
    func fly() {
        print("새가 날아갑니다!")
    }
}

let eagle = Bird()
eagle.fly() // "새가 날아갑니다!"

OOP의 단일 상속 문제를 해결하고, 유연한 설계를 가능하게 한다.

 

POP가 OOP보다 좋은 이유?

✅ 다중 상속 문제 없음 → 여러 프로토콜을 조합하여 원하는 기능만 추가 가능
✅ 기능 확장 쉬움 → 프로토콜과 익스텐션을 활용하면 기존 클래스를 수정하지 않고도 기능 추가 가능
✅ 코드 재사용성 증가 → 공통 기능을 프로토콜과 익스텐션으로 정의하면 중복 코드 최소화

Swift에서는 객체 지향보다 프로토콜 지향이 더 자연스러운 패러다임이기 때문에,

유지보수가 쉽고 확장성이 높은 코드를 만들 수 있다. 


6) 함수형 프로그래밍(FP) 지원 – 더 깔끔한 코드

Swift는 고차 함수, 불변성, 클로저 등 함수형 프로그래밍을 적극적으로 지원한다.

let numbers = [1, 2, 3, 4, 5]

// map: 각 요소를 제곱
let squared = numbers.map { $0 * $0 }
print(squared) // [1, 4, 9, 16, 25]

// filter: 짝수만 필터링
let evens = numbers.filter { $0 % 2 == 0 }
print(evens) // [2, 4]

Swift에서는 map, filter, reduce 같은 함수형 스타일이 자연스럽게 적용된다.

 

Swift의 FP 특징

고차 함수 지원 – 함수를 매개변수로 전달하거나, 함수를 반환할 수 있음
불변성 유지 – let을 활용해 상태 변화를 최소화하고, 부작용(side effects)을 줄일 수 있음
클로저 사용 가능 – 코드 블록을 변수처럼 활용할 수 있어 간결한 코드 작성 가능


Swift는 왜 빠를까? 

Swift는 해석형 언어가 아니라 컴파일 언어라서 실행 속도가 빠르다.
그리고 최적화된 메모리 관리, LLVM 컴파일러, 값 타입 중심의 설계 덕분에 성능이 뛰어나다.

 

1) LLVM 컴파일러 사용

Swift는 LLVM(저수준 가상 머신, Low-Level Virtual Machine) 컴파일러를 사용한다.
LLVM은 코드를 기계어로 변환할 때 최적화를 수행하기 때문에,
Swift 코드는 실행 속도가 매우 빠르다.

 

2) 값 타입(Value Type) 중심의 설계

Swift에서는 구조체(Struct)를 적극 활용하는데,
구조체는 스택(Stack) 메모리를 사용하기 때문에 참조 타입(Class)보다 성능이 좋다.

 

3) ARC(Automatic Reference Counting) 활용

Swift의 ARC는 런타임이 아니라 컴파일 타임에 적용되므로 성능 오버헤드가 적다.
또한, GC(Garbage Collection)를 사용하는 Java, Python보다 성능이 뛰어나다.

 

Swift는 컴파일 시점에 최적화가 이루어지고, 런타임 오버헤드가 적기 때문에 실행 속도가 빠르다!


Swift vs 다른 언어 – 뭐가 다를까?

비교 Swift Java Kotlin Python
타입 안정성 강타입(Strongly Typed) 강타입 강타입 동적 타입(Dynamically Typed)
옵셔널 ✅ (nil 방지) ❌ (NullPointerException 가능) ✅ (nullable 지원) ❌ (None 오류 발생 가능)
ARC(자동 메모리 관리) ✅ (GC 없이 메모리 자동 관리) ✅ (GC 사용) ✅ (GC 사용) ✅ (GC 사용)
성능 최적화 빠름 (LLVM 컴파일러, ARC) 보통 (GC로 인한 성능 저하) 보통 (GC 사용) 느림 (인터프리터 언어)

정리 – Swift는 정말 잘 설계된 언어다!

Swift는 빠른 성능과 안전한 메모리 관리, 최신 프로그래밍 패러다임을 결합한 언어다.
특히 ARC 덕분에 개발자가 메모리 관리를 신경 쓰지 않아도 되고, LLVM 덕분에 실행 속도도 매우 빠르다.
Swift를 깊이 이해하면서 개발하면 좀 더 효율적인 코드를 짤 수 있을것 같다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/04   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30
글 보관함