Swift

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

Swift는 macOS, iOS, watchOS, tvOS를 위한 강력하고 직관적인 프로그래밍 언어입니다. Swift 코드 작성은 대화식으로 재미있고, 구문은 간결하면서도 표현력이 풍부하며, Swift에는 개발자들이 좋아하는 첨단 기능이 포함되어 있습니다. Swift 코드는 안전하게 설계되었으며 빛의 속도로 빠르게 실행되는 소프트웨어도 제작할 수 있습니다.

Swift 5 소개

Swift 5를 사용하면 앱 개발이 훨씬 편리해집니다. Swift 런타임은 이제 iOS, macOS, watchOS 및 tvOS에 기본적으로 내장됩니다. 이제는 최신 OS가 출시될 때마다 해당 라이브러리를 앱에 번들로 묶을 필요가 없습니다. 게다가 사용자들은 탁월한 App Store 지원을 통해 보다 작아진 앱을 보다 빠르게 다운로드할 수 있게 됩니다.

Swift 5의 추가 기능

  • 더 빠른 코드를 만들어낼 수 있는 UTF-8 인코딩으로 문자열 재구현
  • 빌드 디버깅 및 릴리즈 시 메모리에 대한 독점적인 접근이 기본적으로 적용
  • SIMD 벡터 및 결과 유형이 표준 라이브러리에 추가됨
  • 딕셔너리 및 세트 성능 개선
  • Python, JavaScript 및 Ruby 등 동적 언어와의 상호 운용성 개선을 위해 동적으로 호출 가능한 유형 지원

최신 기능

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 "Tomas, games played: 1, high score: 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는 다음과 같이 코드의 표현력을 높이기 위한 다른 많은 기능을 제공합니다.

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

안전 중심 설계

Swift는 불안전한 코드의 전체 클래스를 제거합니다. 변수는 사용 전에 항상 초기화되고, 배열 및 정수에 대한 오버플로우 검사가 수행되며, 메모리는 자동으로 관리됩니다. 또한 메모리에 대한 독점적인 접근을 통해 많은 프로그래밍 실수가 발생하지 않도록 보호합니다. 구문은 사용자의 의도를 쉽게 정의할 수 있도록 조정됩니다. 예를 들어 3자로 된 간단한 키워드는 변수(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 및 Objective-C 언어의 후속 언어로 유형, 흐름 제어, 연산자와 같은 하위 수준 프리미티브를 포함합니다. 또한 클래스, 프로토콜, 제네릭과 같은 객체 지향 기능을 제공하므로 Cocoa 및 Cocoa Touch 개발자에게 필요한 성능과 파워를 제공합니다.

탁월한 제1언어

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

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

Apple의 Swift 교육 리소스 더 알아보기(영문)

소스 및 바이너리 호환성

Swift 5를 사용하면 새로운 버전의 컴파일러를 사용하기 위해 Swift 4 코드를 수정할 필요가 없습니다. 대신 새로운 컴파일러를 사용하여 한 번에 한 모듈씩 새로운 Swift 5 기능을 활용하여 자신만의 속도로 마이그레이션할 수 있습니다. 또한 Swift 5는 앱에 대한 바이너리 호환성을 도입합니다. 즉, Swift 라이브러리가 향후 릴리즈될 모든 OS에 포함되므로 현재 및 향후 OS 릴리즈를 대상으로 하는 앱에 Swift 라이브러리를 포함하지 않아도 됩니다. 앱은 OS에서 최신 라이브러리 버전을 활용하게 되며 코드 역시 다시 컴파일할 필요 없이 계속 실행 가능합니다. 따라서 앱을 보다 간단하게 개발하면서 앱의 크기도 줄고 실행 시간도 단축됩니다.

오픈 소스

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

크로스 플랫폼

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

서버를 위한 Swift

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

오픈 소스 Swift 커뮤니티 및 Swift 서버 작업 그룹에 대해 자세히 알아보려면 Swift.org(영문)를 방문하십시오.

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

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

Package Manager

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

Objective-C 상호 운용성

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

Swift를 시작하려면 Xcode를 다운로드하고 리소스 탭에서 튜토리얼을 따르십시오.