목록전체 글 (64)
GGURUPiOS

Protocols (프로토콜) 프로토콜은 특정 기능 수행에 필수적인 요소를 나타내는 청사진 임 프로토콜을 만족시키는 타입을 프로토콜을 따른다(conform) 고 말함. 프로토콜에 필수 구현을 추가하거나 추가적인 기능을 더하기 위해 프로토콜을 확장 하는 것이 가능함 프로토콜 문법 protocol SomeProtocol { // protocol definition goes here } 프로토콜을 따르는 타입을 정의하기 위해서는 타입 이름 뒤에 콜론(:) 을 붙이고 따를 프로토콜 이름을 적는다. 여러개라면 콤마로 구분해주자 만약 슈퍼클래스가 있는 경우 프로토콜 앞에 슈퍼클래스 이름을 먼저 나열하자 struct SomeStructure: FirstProtocol, AnotherProtocol { // struc..

Extensions (익스텐션) 익스텐션을 이용해 클래스, 구조체, 열거형 혹은 프로토콜 타입에 기능을 추가할 수 있음 원본 코드를 몰라도 그 타입에 대한 기능을 확장할 수 있음 → 이게 매우 큰 장점인듯. 익스텐션을 이용해 할 수 있는 것들 계산된 인스턴스,타입 프로퍼티 추가 인스턴스,타입 메소드 추가 새로운 이니셜라이저 제공 서브스크립트 정의 중첩 타입의 선언과 사용 특정 프로토콜을 따르는 타입 만들기 익스텐션 은 타입에 새 기능을 추가할 수 있지만 오버라이드는 불가능 익스텐션 문법 // extension 키워드 사용 (기본) extension SomeType { // new } // 프토토콜 채택 extension SomeType: SomeProtocol, AnotherProtocol { // im..

Nested Types (중첩 타입) 열거형은 특정 구조체나 클래스의 기능을 처리하기 위해 자주 사용됨 이와 비슷하게 특정 문맥에서 좀 더 복잡한 타입을 위해 사용할 수 있는 유틸리티 클래스나 구조체를 정의 가능 스위프트에서는 이 기능을 위해 중첩타입을 지원 함. 중첩타입 ? → 열거형, 클랫, 구조체를 그 타입 안에서 다시 정의할 수 있음 struct BlackjackCard { // nested Suit enumeration // struct 안에 enum이 들어갈 수 있습니다. enum Suit: Character { case spades = "♠", hearts = "♡", diamonds = "♢", clubs = "♣" } // nested Rank enumeration enum Rank: I..

Type Casting(타입 캐스팅) 타입 캐스팅은 인스턴스의 타입을 확인하거나 인스턴스를 같은 계층에 있는 다른 슈퍼클래스나 서브클래스로 취급하는 방법임 타입캐스팅에는 is, as 두 연산자를 사용 타입 캐스팅을 위한 클래스 계층구조 선언 예제클래스 class MediaItem { var name: String init(name: String) { self.name = name } } class Movie: MediaItem { var director: String init(name: String, director: String) { self.director = director super.init(name: name) } } class Song: MediaItem { var artist: String ..

Concurrency ( 동시성 ) 스위프트는 구조화된 방식으로 비동기 및 병렬 코드 작성을 지원 함 비동기 코드는 일시 중지 했다가 나중에 재개할 수 있음 네트워크를 통해 데이터를 가져오거나 파일 구문 분석과 같은 장기 실행 작업을 하면서 UI 업데이트와 같은 단기 작업을 수행할 수 있음 병렬 또는 비동기 코드의 스케줄링 유연성은 복잡성 증가 비용과 함께 적용됨 스위프트의 언어지원을 사용하지않고 동시성 코드를 작성할 수 있지만 읽기 더 어려운 경향이있음 listPhotos(inGallery: "Summer Vacation") { photoNames in let sortedNames = photoNames.sorted() let name = sortedNames[0] downloadPhoto(named:..

Error Handling (에러 처리) 프로그램 실행시 에러가 발상하면 그 상황에 대해 적절한 처리가 필요함 스위프트는 런타임에 에러가 발생한 경우 그것의 처리를 위해 에러의 발생(throwing), 감지(catching), 증식(propagating), 조작(manipulating)을 지원하는 일급 클래스를 제공함 어떤 명령은 항상 완전히 실행되는 것이 보장되지 않는 경우가 있음 그런 경우에 옵셔널을 사용해 에러가 발생해 값이 없다는 것을 표시할 수 있지만 어떤 종류의 에러가 발생했는지 확인할 수는 없음 이럴 때는 구제적으로 발생한 에러를 확인할 수 있어야 코드를 작성하는 사람이 적절한 처리가 가능함 에러의 표시와 발생 스위프트에서 에러는 Error 프로토콜을 따르는 타입의 값으로 표현됨. 비어있는 ..