티스토리 뷰

Swift

[Swift] 공식문서 정리하기 00 - Preview

말차프라푸치노 2021. 9. 7. 16:00

Swift 공식 문서를 매번 해석 하면서 보기 힘들어 해석해놓고 틈틈이 보려고 합니다.

 

 

 

 

Swift - Apple Developer

Swift is a powerful and intuitive programming language for iOS, iPadOS, macOS, tvOS, and watchOS. Writing Swift code is interactive and fun, the syntax is concise yet expressive, and Swift includes modern features developers love. Swift code is safe by des

developer.apple.com

 

Swift

강력하고 배우기도 쉬운 프로그래밍 언어 

 

스위프트는 ios, iPadOS, macOS, tvOS 그리고 watchOS 를 위한 강력하고 직관적인 프로그래밍 언어입니다. 

Swift 코드를 작성하는 것은 interactive(상호적이고) 재밌고, 구문(syntax)은 간결하면서도 표현력있고, Swift는 개발자들이 사랑하는  현대적(modern)인 기능을 포함하고 있습니다.

Swift code는 설계적으로 안전하고, 번개같은 속도로 시행되는 software를 만들어냅니다.

 

Modern

스위프트는 애플 플랫폼을 구축한 수십 년의 경험과 포함한 프로그래밍 언어에 대한 최신 연구의 결과물입니다.

명명된 매개변수는 Swift의 API를 읽고 유지 관리하기 쉽게 깨끗한 구문(syntax)으로 표현됩니다.

더 좋은 건 , 세미 콜론 ; 을 안써도 된다는 것 입니다!

추론된(inferred) 유형은 코드를 더 깨끗하게 만들고 실수할 가능성을 낮춥니다.

반면 모듈(module)은 헤더(header)를 제거하고 네임스페이스(namespace)를 제공합니다.

국제 언어 및 이모지를 가장 잘 지원하기 위해 문자열은 유니코드에 적합하며 UTF-8 기반 인코딩을 사용하여 다양한 사용 사례에 맞게 성능을 최적화합니다.

메모리는 가비지 수집의 오버헤드(the overhead of garbage collection) 없이 메모리 사용량을 최소로 유지하기 위해 엄격한 결정론적(deterministic) 참조 카운트를 사용하여 자동으로 관리됩니다.

 

struct Player {
    var name: String
    var highScore: Int = 0
    var history: [Int] = []

    init(_ name: String) {
        self.name = name
    }
}

var player = Player("Tomas")

최신 직설적인(starighforward) 구문를 사용해 새 타입(type) 을 선언합니다.

인스턴스 속성의 초기값을 제공하고 사용자 정의 이니셜라이저를 정의합니다.

-> 선언할 때 = 으로 초기값 제공 or init(사용자 정의) 로 초기값 제공

 

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

확장을 사용하여 기존 타입(type)에 기능을 추가하고, 사용자 정의 문자열 삽입(interpolations)으로 표준 문안(boilerplate)을 절단합니다.

 

extension Player: Codable, Equatable {}

import Foundation
let encoder = JSONEncoder()
try encoder.encode(player)

print(player)
// Prints "Tomas, games played: 1, high score: 50”

사용자 지정 유형을 빠르게 확장하여 자동 JSON 인코딩 및 디코딩과 같은 강력한 언어 기능을 활용할 수 있습니다.

-> Codable, Equatable 사용

 

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"]

간소화된 클로져(Closure)를 사용하여 강력한 사용자 변환을 수행합니다. -> $ 표시 사용으로 코드 간소화

 

 

이러한 미래지향적인(forward-thinking) 개념들은 재미있고 사용하기 쉬운 언어를 낳습니다.

Swift에는 코드 표현력을 높이기 위한 많은 다른 기능이 있습니다.

  • 강력하고 사용이 간편한 일반 기술
  • 일반 코드를 더욱 쉽게 쓸 수 있는 프로토콜 확장(Protocol Extensions)
  • 퍼스트 클래스 함수 및 가벼운 클로져(Closure) 구문
  • Range 혹은 Collection 에서 빠르고 간결한 반복 (-> collection이 뭘까..)
  • Tuple 과 여러 개의 반환 값 (multiple return value)
  • Methods, Extension, Protocols 을 지원하는 Structs
  • Enum은 무언가를 담을 수 있고 pattern matching을 도와준다
  • 함수형 프로그래밍 패턴 ex) map, filter
  • try / catch / throw 를 사용한 Native 에러 관리


Designed for Safety

Swift는 안전하지 않은 코드 클래스 전체를 제거합니다. Variables(변수)들 은 사용하기 전에 항상 초기화(initialized) 되어지고, 배열 및 정수의 오버플로를 검사하고, 메모리가 자동적으로 관리되어지고, 많은 프로그래밍 실수로부터 메모리 보호에 대한 독점적 접근을 시행합니다.

구문은 의도를 쉽게 정의할 수 있도록 조정되어 있습니다. 예를 들어 세글자로 Variable - 변수 (var) 혹은 Constant - 상수(let) 정의합니다.  Swift는 특히 Arrays 및 Dictionaries 와 같이 일반적으로 사용되는 value types 을 많이 활용합니다.

이것은 해당 type의 복사본을 만들 때 다른 곳에서 수정되지 않는다는 것을 의미합니다.

 

또 다른 안전한 특징은 default Swift 객체는 nil이 될 수 없다는 것 입니다. 사실, Swift 컴파일러는 컴파일 시간 오류가 있는 nil 객체를 만들거나 사용하지 못하도록 합니다. 이를 통해 코드를 훨씬 깨끗하고 안전하게 작성할 수 있으며, 앱에서 대규모 런타임 에러(Runtime Crashes) 를 방지할 수 있습니다. 그러나 nil 이 유효하고 적절한 경우가 있습니다. 이러한 상황에서, 스위프트는 Optional이라고 알려진 혁신적인 기능을 가지고 있습니다. Optional 에는 nil이 포함될수 있지만, Swift 구문은 사용자가 컴파일러에게 동작을 이해하고 있음을 나타내는 ? 구문을 사용하여 안전하게 처리하도록 강제합니다.

 

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 })
    }
}

함수에서 반환할 인스턴스가 있을 수도 있고 없을 수도 있는 경우 Optional 을 사용합니다.

 

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

Optional Binding, Optional Chining 그리고 nil coalescing(=합치다) 같은 특징은 optional values로 안전하고 효율적으로 작업할 수 있게 합니다.

 

Fast and Powerful

초기 컨셉부터, Swift는 빠르기 위해 만들어졌다. 놀라운 고성능 LLVM 컴파일러 기술을 사용하여 Swift 코드는 최신 하드웨어를 최대한 활용하는 최적화된 네이티브 코드로 변환됩니다. 구문 및 표준 라이브러리는 코드를 작성하는 가장 확실한 방법을 제시하도록 조정되어 있으며 손목의 워치에서 실행되거나 서버 클러스터에서 실행되든 상관 없이 최상의 성능을 발휘합니다. (LLVM은 intermediate 또는 binary 코드로 내 코드를 컴파일 하는데 사용되는 라이브러리)

Swift는 C 언어와 Objective-C 언어의 후속 언어이다. types, flow control 및 operators(연산자) 와 같은 낮은 수준의 primitives(원형) 이 포함됩니다.  또한 클래스, 프로토콜, 제네릭과 같은 객체 지향 기능을 제공하므로 Cocoa 및 Cocoa Touch 개발자에게 필요한 성능과 파워를 제공합니다.

 

Great First Language

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

 

Source and Binary Compatibility

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

 

open Source

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

 

Cross Platform

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

 

Swift for Server

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

 

Playgrounds and 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 Interoperability

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

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
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 31
글 보관함