Swift

손쉽게 학습할 수 있는 강력한 프로그래밍 언어.

Swift는 모든 Apple 플랫폼에서 사용할 수 있는 강력하고 직관적인 프로그래밍 언어입니다. 간결하면서도 표현력이 풍부한 구문과 현대적인 기능으로 사용하기가 간편합니다. Swift 코드는 안전하게 설계되었으며 빛의 속도로 빠르게 실행되는 소프트웨어를 제작할 수 있습니다.

    최신 기능

    Swift는 프로그래밍 언어에 대한 최신 연구 결과이며 수십 년에 걸친 Apple 플랫폼 구축 경험이 결합되어 있습니다. 명명된 매개변수는 Swift로 작성된 API를 더 쉽게 읽고 유지 관리할 수 있게 해주는 명확한 구문으로 표현됩니다. 세미콜론도 입력할 필요가 없습니다. 추론된 타입은 코드를 더 명확하게 만들고 실수를 덜 하도록 도와주며, 모듈은 헤더를 없애고 이름 공간을 제공합니다. 문자열은 다국어 및 이모티콘 지원을 위해 유니코드 표준을 따르며, 다양한 사례에 사용할 수 있도록 성능을 최적화하기 위해 UTF-8 기반의 인코딩을 사용합니다. 엄격하고 확정적인 참조 계수를 사용하고, 가비지 컬렉션 관련 오버헤드 없이 최소한의 메모리 사용량을 유지하여 메모리를 자동으로 관리합니다. 비동기식 동작을 정의하는 간단한 내장 키워드를 통해 동시성 코드를 작성할 수 있어 코드의 가독성이 높아지고 오류가 발생할 가능성이 낮아집니다.

    struct Player {
        var name: String
        var highScore: Int = 0
        var history: [Int] = []
    
        init(_ name: String) {
            self.name = name
        }
    }
    
    var player = Player("Tomas")

    복잡하지 않은 최신 구문으로 새로운 타입을 선언합니다. 인스턴스 속성을 위한 기본 값을 제공하고 맞춤형 이니셜라이저를 정의합니다.

    extension Player {
        mutating func updateScore(_ newScore: Int) {
            history.append(newScore)
            if highScore < newScore {
                print("\(newScore)! A new high score for \(name)! 🎉")
                highScore = newScore
            }
        }
    }
    
    player.updateScore(50)
    // Prints "50! A new high score for Tomas! 🎉"
    // player.highScore == 50

    확장 프로그램을 사용하여 기존 타입에 기능성을 더하고, 맞춤형 문자열 보간으로 상용구 코드를 줄입니다.

    extension Player: Codable, Equatable {}
    
    import Foundation
    let encoder = JSONEncoder()
    try encoder.encode(player)
    
    print(player)
    // Prints "Player(name: "Tomas", highScore: 50, history: [50])”

    자동화된 JSON 인코딩 및 디코딩과 같은 강력한 언어 기능을 활용하도록 맞춤형 타입을 빠르게 확장합니다.

    let players = getPlayers()
    
    // Sort players, with best high scores first
    let ranked = players.sorted(by: { player1, player2 in
        player1.highScore > player2.highScore
    })
    
    // Create an array with only the players’ names
    let rankedNames = ranked.map { $0.name }
    // ["Erin", "Rosana", "Tomas"]

    간결한 클로저로 강력한 맞춤형 변환을 수행합니다.

    이러한 미래 지향적인 개념은 재미있고 사용하기 쉬운 언어를 만들어 냅니다.

    Swift는 다음과 같이 코드의 표현력을 높이기 위한 다른 많은 기능을 제공합니다.

    • 강력하고 사용이 간편한 제네릭
    • 프로토콜 확장 프로그램으로 보다 쉬워진 제네릭 코드 작성
    • 일급 함수 및 가벼운 클로저 구문
    • 범위 또는 컬렉션에서의 빠르고 간결한 반복
    • 튜플 및 멀티플 반환 값
    • 메소드, 확장 프로그램 및 프로토콜을 지원하는 구조
    • 페이로드를 포함할 수 있으며 패턴 일치를 지원하는 enum
    • 함수형 프로그래밍 패턴(예:지도 및 필터)
    • try/catch/throw를 사용한 내장된 오류 처리

    안전 중심 설계

    Swift는 불안전한 코드의 전체 클래스를 제거합니다. 변수는 사용 전에 항상 초기화되고, 배열 및 정수에 대한 오버플로우 검사가 수행되며, 메모리는 자동으로 관리됩니다. 또한 메모리에 대한 독점적인 접근을 통해 많은 프로그래밍 실수가 발생하지 않도록 보호합니다. 개발자의 의도를 쉽게 정의할 수 있도록 구문이 조정됩니다. 예를 들어 세자로 된 간단한 키워드를 사용하여 변수(var) 또는 상수(let)를 정의합니다. 뿐만 아니라 Swift는 특히 배열 및 딕셔너리와 같이 일반적으로 사용되는 값 타입을 최대한 활용합니다. 이는 해당 타입으로 사본을 만들 경우 다른 곳에서 수정할 수 없다는 것을 의미합니다.

    또 다른 안전 기능은 기본적으로 Swift 객체가 결코 nil이 될 수 없게 하는 것입니다. 실제로 Swift 컴파일러는 컴파일 시 오류가 있는 nil 객체를 만들거나 사용할 수 없도록 합니다. 이렇게 하면 코드를 훨씬 깔끔하고 안전하게 작성할 수 있으며 앱에서 거대한 카테고리의 런타임 충돌을 방지할 수 있습니다. 하지만 nil이 유효하고 적절한 경우도 있습니다. 이러한 경우를 위해 Swift는 선택 사항이라는 혁신적인 기능을 제공합니다. 선택 사항에는 nil이 포함될 수 있지만 Swift 구문은 ? 구문을 사용하여 nil을 안전하게 처리하도록 함으로써 컴파일러에 동작을 이해하고 안전하게 처리될 것임을 표시합니다.

    extension Collection where Element == Player {
        // Returns the highest score of all the players,
        // or `nil` if the collection is empty.
        func highestScoringPlayer() -> Player? {
            return self.max(by: { $0.highScore < $1.highScore })
        }
    }

    함수에서 반환할 인스턴스가 있거나 없을 때 선택 사항을 이용할 수 있습니다.

    if let bestPlayer = players.highestScoringPlayer() {
        recordHolder = """
            The record holder is \(bestPlayer.name),\
            with a high score of \(bestPlayer.highScore)!
            """
    } else {
        recordHolder = "No games have been played yet."
    }
    print(recordHolder)
    // The record holder is Erin, with a high score of 271!
    
    let highestScore = players.highestScoringPlayer()?.highScore ?? 0
    // highestScore == 271

    바인딩 선택 사항, 체이닝 선택 사항 등의 기능과 nil 통합을 사용하면 선택 사항 값으로 안전하고 효율적으로 작업할 수 있습니다.

    빠르고 강력한 성능

    Swift는 최초 개념 설정 시점부터 빠르게 동작하도록 만들어졌습니다. Swift 코드는 뛰어난 고성능 LLVM 컴파일러 기술을 사용하여 최신 하드웨어를 최대한 활용할 수 있도록 최적화된 기계어 코드로 변환됩니다. 또한 구문 및 표준 라이브러리는 손목에 착용한 시계에서든 서버 클러스터 전반에서든, 코드를 작성하는 가장 확실한 방법으로, 최고의 성능을 발휘하도록 조정되었습니다.

    Swift는 C, C++ 및 Objective-C 언어의 후속 언어입니다. 타입, 흐름 제어, 연산자와 같은 하위 수준 프리미티브를 포함합니다. 또한 클래스, 프로토콜, 제네릭과 같은 객체 지향 기능을 제공하므로 Cocoa 및 Cocoa Touch 개발자에게 필요한 성능과 파워를 제공합니다.

    탁월한 제1언어

    Swift는 코딩의 세계로 들어가기 위한 관문입니다. 실제로 Swift는 아직 공부 중인 학생이나 새로운 진로를 탐색하는 사람 등 누구나 첫 프로그래밍 언어로 배울 수 있게 개발되었습니다. Apple은 교육자들을 위해 강의실 안팎에서 Swift를 가르치기 위한 무료 커리큘럼을 개설했습니다. 코딩 입문자는 Swift 코드를 대화식으로 즐겁게 사용하기 시작할 수 있는 iPad 및 Mac용 앱인 Swift Playgrounds를 다운로드할 수 있습니다.

    앱 개발자 지망생들은 무료 과정을 통해 Xcode로 첫 번째 앱을 빌드하는 방법을 학습할 수 있습니다. 뿐만 아니라 전 세계의 Apple Store에서는 Swift 코드를 실질적으로 경험해 볼 수 있는 Today at Apple 코딩 및 앱 세션을 주최합니다.

    Apple의 Swift 교육 리소스 더 알아보기

    오픈 소스

    Swift는 Swift.org에서 오픈 소스로 개발되었으며 모든 사람이 이용할 수 있는 소스 코드, 버그 추적기, 포럼 및 정기적인 개발 빌드가 포함되어 있습니다. Apple뿐만 아니라 수백 명의 외부 개발자가 참여하는 이 광범위한 개발자 커뮤니티에서 Swift를 더욱 멋진 언어로 만들기 위해 협력하고 있습니다. 이 커뮤니티에 속한 개발자가 Swift의 놀라운 잠재력을 실현한 경험을 공유하는 더 광범위한 블로그, 팟캐스트, 컨퍼런스 및 모임도 있습니다.

    크로스 플랫폼

    Swift는 Linux를 비롯한 모든 Apple 플랫폼을 지원하며, 더 많은 플랫폼을 지원하기 위해 커뮤니티 회원들이 활발하게 활동하고 있습니다. 커뮤니티에서는 SourceKit-LSP를 사용하여 Swift 지원을 다양한 개발자 도구로 통합하는 작업도 수행합니다. Apple은 Swift로 소프트웨어를 더 빠르고 안전하게 만드는 동시에 프로그래밍을 더 재미있게 만드는 다양한 방법을 모색할 수 있어 기쁘게 생각합니다.

    서버를 위한 Swift

    Swift는 Apple 플랫폼에서 수많은 신규 앱을 지원하는 동시에 새로운 클래스의 최신 서버 응용 프로그램에도 사용됩니다. Swift는 런타임 안정성, 컴파일된 성능 및 소규모 메모리 공간이 필요한 서버 앱에 사용하기에 적합합니다. 커뮤니티에서는 Swift를 서버 응용 프로그램 개발 및 배포용으로 활용할 수 있도록 Swift 서버 작업 그룹을 구성했습니다. 이러한 노력의 첫 번째 성과로 고성능 프로토콜 서버 및 클라이언트를 위한 크로스 플랫폼 비동기식 이벤트 중심 네트워크 응용 프로그램 프레임워크인 SwiftNIO가 탄생했습니다. SwiftNIO는 로깅, 메트릭 및 데이터베이스 드라이버를 비롯한 추가 서버 지향 도구 및 기술 구축을 위한 기반으로, 현재 모두 활발하게 개발이 진행 중입니다.

    오픈 소스 Swift 커뮤니티 및 Swift Server 작업 그룹에 대해 자세히 알아보려면 Swift.org를 방문하시기 바랍니다.

    Playgrounds 및 REPL(Read-Eval-Print-Loop)

    iPad 및 Mac용 Swift Playgrounds와 마찬가지로 Xcode의 플레이그라운드를 사용하여 매우 간단하고 재미있게 Swift 코드를 작성할 수 있습니다. 한 줄의 코드를 입력하면 결과가 즉시 나타납니다. 작성 후에는 코드 옆에서 Quick Look 기능으로 결과를 확인하거나 해당 결과를 바로 아래에 고정할 수 있습니다. 결과 보기에 그래픽, 결과 목록 또는 시간 경과에 따른 값의 그래프를 표시할 수 있습니다. Timeline Assistant를 열면 복잡한 뷰가 변하고 움직이는 것을 볼 수 있어 새로운 UI 코드를 실험하는 데 유용하며, 코드를 작성하면서 움직이는 SpriteKit 장면을 재생할 수 있습니다. 플레이그라운드에서 코드를 완벽하게 만들었다면 코드를 프로젝트로 이동하기만 하면 됩니다. Swift는 터미널이나 Xcode LLDB 디버깅 콘솔에서 사용할 때도 상호작용이 가능합니다. Swift 구문을 사용하여 실행 중인 앱을 평가하고 이러한 앱과 상호작용하거나, 새로운 코드를 작성하여 스크립트와 유사한 환경에서 어떻게 작동하는지 확인할 수 있습니다.

    Package Manager

    Swift Package Manager는 Swift 라이브러리 및 실행 파일을 구축, 실행, 테스트 및 패키징하기 위한 단일 크로스 플랫폼 도구입니다. Swift 패키지는 Swift 커뮤니티에 라이브러리 및 소스 코드를 배포하는 가장 좋은 방법입니다. 패키지 구성은 Swift로 직접 작성되어 손쉽게 대상을 구성하고, 제품을 결정하며, 패키지 종속성을 관리할 수 있습니다. 또한 Swift 패키지에는 프로젝트 빌드 및 추가 도구 제공에 도움이 되는 맞춤형 명령어를 포함할 수 있습니다. Swift Package Manager는 실제로 Swift로 빌드되며 Swift 오픈 소스 프로젝트에 패키지 형태로 포함됩니다.

    Objective-C 및 C++ 상호 운용성

    지금 바로 Swift를 사용하여 완전히 새로운 응용 프로그램을 만들거나 Swift 코드 사용을 시작하여 앱에 새로운 기능을 구현할 수 있습니다. 동일한 프로젝트에서 기존 Objective-C 및 C++ 파일과 함께 Swift 코드가 공존하며, Objective-C 및 C++ API에 대한 완전한 접근 권한이 제공되므로 적용이 용이합니다.

    시작하기

    Xcode를 다운로드하고 문서 및 샘플 코드를 통해 Swift로 앱을 빌드하는 방법을 알아보세요.

    리소스 보기