Swift 기초 문법 (2/2)

지난번에는 기본적인 데이터 타입, 함수, 조건문, 반복문, 옵셔널, 구조체 등을 살펴보았습니다.

https://iothingsmaker.com/swift-%ea%b8%b0%ec%b4%88-%eb%ac%b8%eb%b2%95-1-2/

이번 포스팅에서는 프로토콜, 클로저, 예외 처리를 간략히 알아보겠습니다.

프로토콜

Swift에서는 프로토콜이라는 개념이 있는데요. 프로토콜은 인터페이스와 비슷한 개념으로, 클래스나 구조체 등에서 특정 기능을 구현하도록 강제할 수 있습니다. 프로토콜을 사용하면 객체의 다형성을 쉽게 구현할 수 있습니다.

protocol Vehicle {
    var numberOfWheels: Int { get }
    var color: String { get set }
    func startEngine()
    func stopEngine()
} // 프로토콜 정의

class Car: Vehicle {
    var numberOfWheels: Int = 4
    var color: String = "Blue"
    
    func startEngine() {
        print("Car engine started.")
    }
    
    func stopEngine() {
        print("Car engine stopped.")
    }
} // 클래스에서 프로토콜 적용

// 사용 예

let myCar = Car()
myCar.startEngine() // 출력: Car engine started.
myCar.stopEngine()  // 출력: Car engine stopped.

print(myCar.numberOfWheels) // 출력: 4
print(myCar.color) // 출력: Blue

myCar.color = "Red"
print(myCar.color) // 출력: Red

클로저

Swift에서는 클로저라는 개념을 제공합니다. 클로저는 함수와 비슷한 개념으로, 일반 함수와 다르게 이름이 없는 익명 함수입니다. 클로저는 코드 블록으로, 매개변수를 받을 수 있고, 반환값을 가질 수 있습니다. 간결한 코드 작성에 유용합니다.

클로져함수
문법중괄호 { } 로 둘러싸인 매개 변수 목록과 본문으로 구성func 키워드로 시작하고 함수 이름과 매개 변수 목록, 반환 타입, 함수 본문으로 구성
이름이름이 없음이름 있음, 호출시 이름 사용
캡처정의된 문맥에서 변수나 상수를 캡처할 수 있음캡처기능없음
반환반환값 가질 수 있음반환값 가질 수 있음
사용변수나 상수에 할당하여 사용할 수 있음, 다만 간단한 로직이나 조건에 맞춰 실행되는 작은 코드 블럭에 사용됨변수나 상수에 할당하여 사용할 수 있음
// 내림차순으로 정렬하는 클로저
let reverseOrder = { (num1: Int, num2: Int) -> Bool in
    return num1 > num2
}

// 정수 배열을 내림차순으로 정렬
numbers.sort(by: reverseOrder)

// 정렬된 결과 출력
print(numbers) // [9, 7, 5, 3, 1]

// * 클로저 내부에서 외부 변수 변경하기
var counter = 0

let incrementCounter = {
    counter += 1
}

incrementCounter() // counter = 1
incrementCounter() // counter = 2
incrementCounter() // counter = 3

print("counter: \(counter)") // "counter: 3"

에러 처리

Swift도 대부분의 언어와 마찬가지로, 에러 처리를 위한 기능을 제공합니다. 에러 처리는 do-catch 문을 사용하여 구현할 수 있으며, throwing 키워드를 사용하여 함수에서 발생하는 에러를 처리할 수 있습니다.

// Swift 에러 처리
enum CalculationError: Error {
    case divisionByZero
}

func divideNumbers(_ num1: Int, _ num2: Int) throws -> Int {
    if num2 == 0 {
        throw CalculationError.divisionByZero
    }
    return num1 / num2
}

// 에러 처리 예시
do {
    let result = try divideNumbers(10, 0)
    print(result)
} catch CalculationError.divisionByZero {
    print("Cannot divide by zero.")
}

마무리

지금 까지, Swift 기초 문법을 살펴보았는데요. 도움이 되셨나요?
Swift는 최신 프로그래밍 언어로서, 안전하고 강력한 기능을 제공합니다. 초보자도 쉽게 배울 수 있는 간결하고 깔금한 문법과 다양한 레퍼런스 자료가 많이 제공되고 있습니다. 또한 Swift 를 기반으로 SwiftUI라는 앱 개발을 위한 프레임워크가 발표되어 앱 개발이 한층 쉬워졌습니다. Swift를 이용한 애플리케이션 개발을 시작해 보면 어떨까요?

감사합니다.

Leave a Comment