본문 바로가기

IT

(126)
[swift] Protocol [swift 기초문법] - 프로토콜(Protocol) 프로토콜이란(Protocol) 프로토콜은 특정 작업 혹은 기능들을 구현하기 위한 메소드, 프로퍼티 그리고 기타 다른 요구사항들의 청사진입니다. 프로토콜을 클래스, 구조체 또는 열거형에서 채택(adopted)하여 이러한 프로토콜의 요구사항을 실제로 구현할 수 있습니다. 프로토콜의 요구사항을 모두 충족시키는 타입은 해당 프로토콜을 준수(conform)한다고 합니다. 프로토콜은 정의를 할 뿐이지 구현을 하지는 않습니다. 추가적으로, 프로토콜은 구현해야할 요구사항을 지정하는 것 이외에도, 프로토콜을 확장하여 이러한 요구사항 중 일부를 구현하거나, conforming타입에서 활용할 수 있는 추가 기능을 구현할 수 있습니다. 앞에 protocol 키워드를 붙여 ..
[swift] try? try! try [swift 기초문법] - try? try! try try 예외 상황 다루기 위한 방법의 do ~ catch 문 사용해야 온전히 에러 처리를 할 수 있습니다. 기능은 try~catch 방식과 동일.하며 Do문 내에서 try 한 메서드에 에러가 발생하면 앱이 종료되지 않고 catch 문에서 처리합니다. do {try} catch{}문을 모두 적어주지 않아도 간편히 에러처리 가능한 try?와 try!를 사용하는 것이 더 효과적입니다. do { y = try someThrowingFunction() } catch { y = nil } try? 에러 발생 시 nil 반환합니다. 에러가 발생하지 않으면 반환 타입은 옵셔널(Optional)입니다. 반환 타입이 없어도 사용 가능합니다. do-catch문 없이 사용가..
[swift] 스위프트의 특징 1. Enum형 변수가 Associated value(연관값)를 가질수 있다. enum Barcode { case upc(Int, Int, Int, Int) case qrCode(String) } var productBarcode = Barcode.upc(8, 85909, 51226, 3) productBarcode = .qrCode("ABCDEFGHIJKLMNOP") switch productBarcode { case .upc(let numberSystem, let manufacturer, let product, let check): print("UPC: \(numberSystem), \(manufacturer), \(product), \(check).") case .qrCode(let productC..
[swift] ARC(Automatic Reference Counting) [swift 기초문법] - Automatic Reference Counting, ARC ARC란 ARC는 자동 레퍼런스 카운팅으로서 프로퍼티, 상수, 변수에 참조가 지정되면 그때 ARC에 들어있는 카운트를 증가시키고 프로퍼티, 상수, 변수가 해제되면 카운트를 감소시킨다. 보유한 카운트가 0이 되면 메모리를 해제시킨다. Swift는 앱의 메모리 사용을 관리하기 위해서 ARC를 이용해 자동으로 참조 횟수를 관리하여 개발자는 메모리 관리에 신경을 줄일 수 있고 ARC가 사용하지 않는 인스턴스를 메모리에서 해지한다. 최소 하나라도 인스턴스에 대한 참조가 있는 경우 메모리를 해제하지 않는다. Swift에서는 앱의 메모리 사용을 관리하기 위해 ARC(Automatic Reference Counting)을 사용한다...
[swift] Closure, Capture list [swift 기초문법] - 클로저 (Closure), 획득목록 (Capture list) 클로저란 이름 없는 함수로 봐도 무방합니다. in 으로 매개변수, 반환타입과 실제 클로저 의 코드를 분리한다는 점이 함수와 차이점입니다. 클래스처럼 참조타입입니다. 표현방식 { (parameters) -> (return type) in //statements } 함수전달과 클로저 전달방식 비교 let names:[String] = ["banana","apple","dark","iphone"] //함수 전달 예 func backwards(first: String, second: String) -> Bool { print("\(first) \(second) comparing...") return first > secon..
[swift] Mutating, Memberwise Initializers, Access Control [swift 기초문법] - mutating, Memberwise Initializers, 접근제어(Access Control) 구조체와 열거형같은 값타입(value type)은 속성값을 바꿀 수 없습니다. 이런 조건 하에 속성값을 바꾸고 싶으면 mutating이라는 키워드를 앞에 붙여서 메소드를 선언하면 속성값을 바꿀 수 있습니다. struct testStruct{ var total = 0 mutating func addValue(_ value: Int){ total+=value } } 프로퍼티의 이름으로 매개변수를 가지는 이니셜라이져로써 구조체는 사용자 정의 이니셜라이저를 구현하지 않으면 멤버와이즈 이니셜라이져를 자동으로 제공합니다. 클래스는 지원하지 않습니다. 코드의 중..
[swift] Property [swift 기초문법] - 프로퍼티 (Property) 저장 프로퍼티 (Stored Property) 인스턴스의 변수 또는 상수를 의미한다. 클래스 또는 구조체의 인스턴스와 연관된 값을 저장한다. 옵셔널이 아니면 클래스에서는 기본값을 셋팅하거나 이니셜라이져로 초기화를 해줘야 한다. 지연 저장 프로퍼티 (Lazy Stored Property) lazy 키워드를 사용하여 var 로 정의한다. 호출이 있어야 값을 초기화한다. 불필요한 성능 저하나 공간 낭비를 줄일 수 있다. struct Point{ var x: Int = 0 var y: Int = 0 } class Position{ lazy var point: Point = Point() } let yagomPosition: Position = Positio..
[swift] Optional, Optional Chaining [swift 기초문법] - 옵셔널(Optional), 옵셔널체이닝(Optional Chaining) 옵셔널이란? (Optional) swift에서 프로그램의 안전성을 높이기 위해 사용하는 개념으로 nil을 사용할 수 있는 타입을 가리켜 옵셔널 타입 이라고 부릅니다. nil 일수도 아닐 수도 있다는 뜻으로 값이 있을 수도 없을 수도 있습니다.(nil은 값이 "없음"을 의미하는 특수한 값입니다.) 옵셔널로 선언된 변수 상수에만 nil을 할당할수 있습니다. 데이터(변수) 타입 뒤에 '?' 붙여 사용하여 옵셔널로 지정합니다. var optInt: Int? var value: String? = "test" value = nil /* 아래처럼 표현도 가능 그러나 '?'를 붙이는 게 더욱 간결하고 편함 */ var ..