[Swift] Optional.swift 살펴보기
·
Swift/개념 & 응용
Optional.swift를 살펴보게 된 계기 옵셔널은 Swift의 장점 중 하나입니다. 백준 문제를 풀다가 문득 nil 병합 연산자(??)에 대해 궁금해졌습니다. 일반적인 연산자는 즉시 연산이 완료되는데, ?? 연산자는 앞의 수행 결과가 nil인 경우 실행이 되는 부분이 흥미로웠어요. 어떻게 구현되었길래 지연 실행이 되는거지? 라는 생각이 들었습니다. 많은 블로그에서 이미 다룬 주제지만, 실제 구현 코드가 궁금해서 Optional.swift를 살펴봤는데요. 보기 전에는 너무 어려워서 못 읽을 줄 알았지만 막상 보니 읽을만 한거에요..? 그래서 한 번 쫙 읽고 포스팅으로 정리까지 하게 되었습니다 ㅋㅋ 전부 다루는건 아니기 때문에 Optional.swift와 함께 보시면 좋습니다. 기본 구조 @frozen..
[Swift] Generic, Protocol을 이용한 Extension Wrapping
·
Swift/개념 & 응용
Extension Wrapping Extension Wrapping은 유명 라이브러리에서 자주 보이는 구조입니다. (참고로 Extension Wrapping은 정식 명칭이 아니라 제가 임의로 정한 이름입니다.) 대표적으로 Kingfisher, RxSwift가 있습니다. imageView.kf.setImage(with: url) Kingfisher 메서드를 사용할 때 UIImageView가 아니라 kf를 이용해 메서드를 호출하죠? 바로 그게 Extension Wrapping입니다. Extension으로 구현한 Kingfisher 메서드를 UIView에서 직접 호출하지 않고, KingfisherWrapper로 호출하는 것입니다. Extension Wrapping 장점 Extension Wrapping은 안정..
[Swift] Failable Initializer (실패 가능한 초기화)
·
Swift/개념 & 응용
Failable Initializer Failable 초기화는 실패가 가능한 초기화입니다. 클래스, 구조체, 열거형에서 실패 가능한 초기화를 정의할 수 있습니다. Failable 초기화 예시 실패가 가능한 초기화는 특정 조건에서만 객체가 생성되어야 할 때 유용합니다. class Time { var hour: Int var minute: Int } 예를 들어, Time 클래스는 hour와 minute 변수가 있습니다. hour의 범위는 1~12여야 하고, minute은 0~59여야 합니다. 이외의 숫자가 들어오면 객체가 생성되지 않도록 하고 싶을 때 Failable 초기화를 사용할 수 있습니다. class Time { var hour: Int var minute: Int init?(hour: Int, mi..
[Swift] memberwise 초기화, convenience 초기화
·
Swift/개념 & 응용
서론 Swift에서 구조체와 클래스는 많은 차이가 있고, 초기화도 그중 하나입니다. 구조체는 멤버와이즈(memberwise) 초기화를, 클래스는 편의(convenience) 초기화를 가지고 있죠. 초기화에 대해 할 말은 굉장히 많지만, 이번 포스팅에서는 멤버와이즈(memberwise) 초기화와 convenience 초기화에 집중해서 알아보겠습니다. 초기화(Initializer) 초기화란 구조체, 열거형, 클래스의 인스턴스를 생성하는 것입니다. 초기화의 역할은 모든 프로퍼티를 기본값으로 초기화하는 것입니다. 만약 초기화가 끝나는 시점에 모든 프로퍼티가 기본값을 가지고 있지 않다면 초기화가 실패됩니다. (여기서 언급한 초기화의 역할은 아래에서도 꾸준히 언급되므로 알아두시면 좋겠습니다.) Default Ini..
[Swift] 꼬리 재귀(Tail Recursion)와 꼬리 재귀 최적화
·
Swift/개념 & 응용
꼬리 재귀(Tail Recursion) 꼬리 재귀란 재귀의 결과를 바로 반환하는 재귀 형태입니다. 말로 들으면 무슨 말인가 이해가 안 될 것이므로 코드로 알아보겠습니다. 아래 함수들은 단순히 1 ~ n까지의 합을 구하는 역할입니다. 먼저 일반 재귀 형태를 먼저 보겠습니다. func recursion(_ num: Int) -> Int { if num == 0 { return num } return num + recursion(num - 1) } 파라미터로 num을 전달 받고 num + recursion 결과를 반환합니다. 이 메서드 안에는 num + recursion 이라는 연산이 존재합니다. 연산이 존재하면 연산을 위한 값을 스택에 저장해야하기 때문에 재귀를 할 때마다 스택에 메모리 할당이 발생합니다. ..
[Swift] 정규표현식 사용해보기
·
Swift/개념 & 응용
서론 정규표현식 알아보기에 이어 두 번째 정규표현식 포스팅입니다. 아마 3편은 Swift 5.7의 RegexBuilder(https://developer.apple.com/documentation/regexbuilder)가 될건데요. 이건 아마 많이 늦을듯... ㅎ 최소 한 달? (부스트캠프 챌린지 끝나고요 ㅎㅎ) 아무튼, 오늘의 포스팅인 정규표현식 사용해보기는 지난 1편에서 알아봤던 정규표현식을 실제로 사용해보는 내용입니다. 문자열에서 정규표현식을 어떻게 사용하느냐에 대한 글이니 정규표현식에 대해 잘 모르신다면 1편을 먼저 봐주세요. 학습하면서 작성한 포스팅인 만큼 부족한 점이 있을 수 있습니다. 틀린 점, 부족한 점 댓글 달아주시면 즉시 수정하도록 하겠습니다. 테스트 데이터 아래 문자열과 정규식을 사..
[Swift] 정규표현식 알아보기
·
Swift/개념 & 응용
서론 최근 정규표현식이 많이 부족하다는 걸 느꼈습니다. 이번 기회에 제대로 알아보자! 결심하고 정규표현식에 대해 공부해봤습니다. 정규표현식 개념보다는 예제 위주로 포스팅을 작성하였습니다. 정규표현식 정규표현식(regular expression, regex)이란 사용자가 규칙을 세워 패턴을 정의해둔 문자열입니다. 정규표현식은 문자열의 일부나 전체가 패턴이 일치하는지 알아볼 수 있는 편리한 방법입니다. 패턴이 일치하는 문자열만 추출할 때, 문자열이 패턴과 일치하는지 알고 싶을 때 등의 상황에서 유용하게 사용할 수 있습니다. 정규표현식 문법 문법 기능 설명 . 문자 일치 개행 문자를 제외한 문자 1개와 일치 [ ] 문자 집합 : 를 여러 번 쓴 것과 동일함. 사이에 들어온 문자를 선택하고 - 기호를 통해 범위..
[Swift] Enum을 이용한 Mixed Type JSON 디코딩
·
Swift/개념 & 응용
서론 JSONArray의 아이템 타입이 혼합될 수 있습니다. let mixedData = """ [{ "type": "movie", "id": 100, "title": "타이타닉", "country": "USA" }, { "type": "person", "id": 101, "name": "레오나르도 디카프리오", "role": "Actor" }, { "type": "music", "id": 102, "title": "My Heart Will Go On", "artist": "Céline Dion" }] """.data(using: .utf8)! 위 JSON을 보면 각 아이템의 type, id는 공통되고 이외 key 구성이 다릅니다. 이럴 경우 type을 이용해 if문으로 처리할 수도 있지만, Enum을 ..
[Swift] Dependency Container(feat. Property Wrapper)
·
Swift/개념 & 응용
* 틀린 내용이 있을 수 있습니다. 댓글로 알려주시면 매우 감사하겠습니다. Dependency Container 지난 포스팅에서 DI에 대해 배웠습니다. DI를 하나의 Container로 관리하는 방법이 Dependency Container(DI Container, IoC Container)입니다. 기존 DI는 인스턴스 생성 위치가 분산되었지만, Container를 사용하면서 한 곳에 모아진다는 장점이 있습니다. 동일한 생성자 코드 중복을 줄일 수 있다는 장점도 있습니다. 이번 포스팅에서 (매우) 기본적인 Container를 직접 만들어보고, 다른 포스팅에서 Swinject 라이브러리를 소개하겠습니다. Dependency Container 구현 Dependency Container(이하 Container..
[Swift] 의존성 주입 DI(Dependency Injection)와 IoC(Inversion Of Control)
·
Swift/개념 & 응용
서론 SOLID 원칙 with Swift의 D를 담당하고 있는 의존성은 중요한 개념입니다. 객체 지향에서 객체의 의존성은 빼놓을 수 없는 개념이고, 결합도와 응집도에서 다룬 낮은 결합도의 핵심 방법이기 때문입니다. 의존성과 의존성 주입의 개념 자체는 간단하기 때문에 짧게 다뤄보겠습니다. Protocol을 이용한 ViewModel 의존성 주입 등 지난 여러 포스팅들에서 간접적으로 소개한 적이 있기 때문에 함께 읽어주시면 감사하겠습니다 OvO b 의존성 의존성이란 하나의 객체에서 다른 객체를 참조하는 것을 말합니다. class AClass { var number: Int = 0 } class BClass { var numberClass: AClass = AClass() } let bClass = BClass..
유정주
'Swift/개념 & 응용' 카테고리의 글 목록 (2 Page)