본문 바로가기

IT/Swift

(35)
[swift] Protocol Default Implementations, Associated Type [swift 기초문법] - 프로토콜 초기구현(Protocol Default Implementations), 연관타입(Associated Type) 프로토콜 초기구현이란(Protocol Default Implementations) 프로토콜의 익스텐션을 통해 구현하는 것을 프로토콜 추기구현이라고 합니다.(protocol + extension 의 결합) 프로토콜은 프로토콜을 채택하여 사용할 타입들에서 구현해줘야하는 요구사항들을 정의만 해줄 뿐 내용을 구현할 수는 없습니다. 그러나 익스텐션을 사용하면 프로토콜이 요구하는 기능을 실질적으로 정의할 수 있습니다. 다만 익스텐션에서 저장 프로퍼티는 구현이 불가능합니다. 하나의 프로토콜을 만들어 초기 구현을 해둔다면 여러 타입에서 해당 기능을 사용하고 싶을때, 프로토콜..
[swift] Extension, Generic [swift 기초문법] - 익스텐션(Extension) 익스텐션이란(Extension) 익스텐션은 Objective-C의 카테고리(Category)와 유사합니다. 카테고리는 이름을 명명해야했지만 스위프트의 익스텐션은 이름이 없습니다. 확장이란 뜻처럼 있는 클래스, 구조체, 열거형, 프로토콜 타입등에 새로운 기능을 추가하여 확장할 수 있는 기능입니다. 기존에 존재하는 기능을 재정의할 수는 없습니다. 익스텐션에 추가할 수 있는 항목은 연산 타입/연산 인스턴스 프로퍼티, 타입/인스턴스 메서드, 이니셜라이저, 서브스크립트, 중첩 타입, 특정 프로토콜을 준수할 수 있도록 기능 추가가 있습니다. 외부에서 가져온 프레임워크나 라이브러리에 내가 원하는 기능을 추가하고자 할 때 사용하면 유용합니다. extension이라..
[swift] Type Casting [swift 기초문법] - 타입캐스팅(Type casting) 스위프트는 굉장히 type strict한 언어 입니다. 다른 타입끼리의 값 교환을 엄격히 제한합니다. 또한 암시적 데이터 타입 변환(Implicit Type Conversion)은 지원하지 않습니다. var doubleValue: Double = 4.2 var castingValue: Int = Int(doubleValue) 스위프트에서는 위와같이 타입을 변경합니다. 이는 타입캐스팅이 아니라 이니셜라이저를 통해 새로운 Int구조체 인스턴스를 생성한 것입니다. 위 내용은 스위프트에서 타입캐스팅이라기 보다는 이니셜라이저의 사용입니다. 스위프트에서 타입캐스팅은 is(타입 확인 연산자)와 as 연산자로 구현됩니다. 타입 확인 연산자 is 해당 클래스..
[swift] Inheritance [swift 기초문법] - 상속(Inheritance) 용어 정리 상속 받은 클래스 : 자식 클래스 (Subclass, Child class) 물려준 클래스 : 부모 클래스 (Superclass, Parents class) 다른 클래스로부터 상속받지 않은 클래스 : 기반클래스(Base class) 상속(Inheritance) 기반클래스를 다른 클래스에서 물려받는 것을 말합니다. 자식 클래스는 부모 클래스의 메서드, 프로퍼티, 서브스크립트를 사용, 재정의 할 수 있으며 프로퍼티 감시자를 구현할 수 있습니다. class 자식 클래스 이름: 부모 클래스 이름 { //클래스 내용 구현 } 재정의(Override) 부모클래스의 메서드, 프로퍼티, 서브스크립트 등을 그대로 사용하지 않고 변경하여 사용하는 것을 오버..
[swift] Subscript [swift 기초문법] - 서브스크립트(Subscript) 서브스크립트(Subscript) 클래스, 구조체, 컬렉션, 리스트, 시퀀스 등 타입 요소에 접근하는 단축 문법입니다. 별도의 getter, setter를 구현하지 않아도 set하거나 get할수 있습니다. 각 타입의 구현부 또는 익스텐션 구현부에 위치해야 합니다. 읽고 쓰기 가능하게 하거나 읽기만 가능하게도 구현이 가능합니다. 연산 프로퍼티의 형태와 유사합니다. 다양한 매개변수 타입을 사용하여 중복정의(Overload)가 가능합니다. 자신이 가지는 시퀀스나 컬렉션 리스트 등의 요소를 반환하고 설정할 때 주로 사용합니다. 인스턴스 이름 뒤에 대괄호만으로 편리하게 사용 가능합니다. subscript(index: Int) -> Int { get { //..
[swift] Map, Filter, Reduce, Monad, FlatMap [swift] 기초문법 - 맵(Map), 필터(Filter), 리듀스(Reduce), 모나드(Monad), 플랫맵(FlatMap) 스위프트의 대표적인 고차함수로 맵(Map), 필터(Filter), 리듀스(Reduce)가 있다. (고차함수 : 매개변수로 함수를 갖는 함수를 말함) 맵(Map) 컨테이너가 담고 있던 각각의 값을 매개변수를 통해 받은 함수에 적용한 후 새로운 컨테이너를 생성하여 반환 (기존 컨테이너의 값은 변경되지 않음) 시퀀스(Sequence), 콜렉션(Collection) 프로토콜을 따르는 타입과 옵셔널은 모두 맵을 사용할 수 있다. (배열, 딕셔너리, 세트, 옵셔널) for-in 구문 사용하는것과 비슷하나 코드가 더 간결하고 컴파일러 차원에서 성능 차이가 있다. array example ..
[swift] Architecture mvc/mvp/mvvm/viper/vip 비교 Apple’s MVC Model : 프로그램에서 사용되는 실제 데이터 및 데이터 조작 로직을 처리하는 부분 View : 사용자에게 제공되어 보여지는 UI 부분 Controller : 사용자의 입력을 받고 처리하는 부분 Distribution : View 와 Controller가 붙어있다. Testability : Model만 테스트 가능하다. Ease of use : 코드가 적게 든다, 쉽게 접근 가능 하다, 유지보수가 힘들다. MVP Model : 프로그램에서 사용되는 실제 데이터 및 데이터 조작 로직을 처리하는 부분 View : 사용자에게 제공되어 보여지는 UI 부분 Presenter : View에서 요청한 정보를 Model로 부터 가공해서 View로 전달하는 부분 Distribution : Pres..
[swift] swift5 [swift] swift5 swift5 변경된 부분에 대하여 알아보겠습니다. Release note url : https://developer.apple.com/documentation/xcode_release_notes/xcode_10_2_release_notes/swift_5_release_notes_for_xcode_10_2 1. Enhancing String Literals Delimiters to Support Raw Text 여는 따옴표 앞에 #이 있는 String literal은 하나의 literal로 처리한다. swift5이전 방식과 혼용가능 swift 5swift 5 이전 print(#""#) print("" 2. Result type https://developer.apple.com/d..