[Swift] defer
·
Swift/개념 & 응용
서론 최근 lock 코드를 작성하면서 defer를 처음 사용해보았는데요. 이번 포스팅에서 defer란 무엇이고 어떤 특징이 있는지 알아보겠습니다. defer defer는 코드 블럭이 종료되기 직전에 호출되는 코드 블럭입니다. "코드 블럭"이기 때문에 메서드 뿐만 아니라 for문, if문 등이 종료될 때도 사용할 수 있습니다. 사용법은 간단합니다. 코드 블럭 안에 defer { } 를 추가하면 됩니다. func functionA() { print("In functionA") defer { print("Out functionA") } } functionA() //In functionA //Out functionA 메서드가 종료될 때 Out functionA가 호출되는 것을 볼 수 있습니다. if true {..
[Swift 알고리즘] 백준 마법사 상어와 파이어볼, 토네이도, 파이어스톰, 비바라기(20056, 20057, 20058, 21610)
·
코딩테스트
백준의 마법사 상어 시리즈 중 파이어볼, 토네이도, 파이어스톰, 비바라기 문제입니다. 단순 구현 문제라 코드가 길어 전체 코드는 링크로 첨부합니다. 모든 코드는 https://github.com/jeongju9216/Algorithm/tree/main/Swift 에서 볼 수 있습니다. Swift 코드가 올라와 있는게 많이 없어서 자세한 풀이보다는 개인 복습 겸 올렸습니다. 마법사 상어와 파이어볼 (BOJ 20056) 풀이 코드 : https://github.com/jeongju9216/Algorithm/blob/main/Swift/BOJ/20000/20056.swift 파이어볼을 범위 밖으로도 이동 시키는 작업이 포인트인 문제입니다. 질량이 0인 파이어볼은 사라진다는 점 파이어볼은 4방향으로 퍼지는게 아..
[Swift] Protocol 확장을 이용한 Singleton 개선
·
Swift/개념 & 응용
서론 싱글톤 패턴의 가장 큰 장점은 편리하다는 것입니다. 하지만 여러 부수적인 문제가 많고 특히, 사이드 이펙트가 크다는 점이 문제입니다. 프로젝트 전역에 두루두루 쓰이는 게 싱글톤 객체인데, 이말은 곧 싱글톤 객체에 문제가 생기면 프로젝트 전역에 문제가 생긴다는 뜻이기 때문입니다. 오늘은 Swift의 프로토콜 확장을 통해 이를 어느정도 해소할 수 있는 방법을 알아보겠습니다. 이것도 장단점이 있으니 프로젝트에 적절할 때 적용해보면 좋을듯 합니다. 프로토콜 확장(extension Protocol) 기본 원리는 프로토콜을 이용해 한 곳에서 싱글톤 호출을 담당하는 것입니다. 구조체나 클래스가 아니라, 프로토콜을 사용하는 이유는 싱글톤의 존재를 숨길 수 있기 때문입니다. 프로토콜을 정의하고, extension으..
[Swift] SOLID 원칙 with Swift
·
Swift/개념 & 응용
서론 최근에 디자인 패턴 글과 ViewController, ViewModel의 역할 분리 글을 작성했습니다. 해당 글들에서는 배경지식 없이도 이해가 되도록 표현을 풀어서 쓰다보니 정확성이 떨어진다고 느껴졌습니다. 이도저도 아니게 된 것 같아 보다 정확한 내용 전달을 위해 이후 관련 글에서는 "단일책임 원칙", "개방폐쇄 원칙" 등의 단어로 표현을 명확하게 하려고 합니다. 그런 의미로 이번 포스팅에서 SOLID 원칙에 대해 정리해보고, Swift와 iOS에서는 어떻게 적용할 수 있는지 알아보겠습니다. SOLID란 SOLID란 OOP(객체 지향 프로그래밍) 및 설계의 기본 원칙으로, 단일 책임 원칙 (Single Responsibilty Principle) 개방 폐쇄 원칙 (Open-Closed Princi..
[Swift] 콤마(,)와 && 차이
·
Swift/개념 & 응용
서론지난 포스팅에서는 where을 다뤘습니다. 포스팅을 적으면서 여러 반복문을 where로 바꿔보고 있었는데요. 아래와 같은 에러가 발생하는 경우가 있었습니다.where문에서 두 개의 조건을 콤마(,)로 연결해본 코드인데요.for i in 0..
[Swift] where문 활용법
·
Swift/개념 & 응용
서론 where은 Swift의 특정 제약을 거는 키워드입니다. 비슷한 효과를 내는 문법은 if문입니다. if문에 비해 where문은 낯설게 느껴질 수 있는데요. where문을 이용하면 가독성은 유지하면서 코드 길이를 줄일 수 있다는 사실을 알고 계시나요? 이번 포스팅에서는 그 방법에 대해 알아보겠습니다. for문과 where where문을 사용하면 for문 안의 if문을 없애고 코드를 줄일 수 있습니다. 아래는 0부터 100 사이의 5의 배수를 출력하는 코드입니다. //if문 for i in 0.. Bool where T: Equatable { return a == b } isEqual과 isEqualWithWhere는 모두 T에 특정 제약을 추가했습니다. 두 개의 차이는 미미하기 때문에 어떤 것을 선택..
[Swift] Protocol을 이용한 ViewModel 의존성 주입
·
Swift/개념 & 응용
* 초보 개발자의 학습 내용이므로 잘못된 점이 있을 수 있습니다. 잘못된 점을 댓글로 남겨주시면 정말 도움이 많이 됩니다. 필요성 MVVM에서는 ViewController가 ViewModel에 의존하고 있는 구조가 많습니다. 코드로 표현하면 class ViewController { var viewModel = ViewModel() ... } 이렇게 ViewController 내부에서 ViewModel을 직접 생성하는 구조입니다. 이런 구조는 ViewModel이 없으면 ViewController를 테스트할 수 없고, ViewController 재활용도 어렵다는 단점이 있습니다. 예를 들어, 리스트를 보여주는 ViewController가 있다고 합시다. 이 리스트는 영화 리스트가 될 수도 있고, 맛집 리스트..
[Swift] Enum을 이용한 ViewModel Output 정의
·
Swift/개념 & 응용
ViewModel Output의 필요성 이전 포스팅인 Enum을 이용한 ViewModel Action 정의을 보시면 한 가지 의문이 생길 수 있습니다. 바로 메서드의 반환 값이 다른 경우입니다. 예를 들어 아래와 같은 action 메서드가 있을 때 func action(_ actions: ViewModelActions) { switch actions { case .save(let data): save(data) case .delete(let data): delete(data) case .deleteAll: deleteAll() } } save, delete, deleteAll 메서드가 각각 다른 타입의 반환값을 가진다면 어떻게 해야할까요? 이때 필요한게 ViewModelOutputs 입니다. ViewMo..
[Swift] Enum을 이용한 ViewModel Action 정의
·
Swift/개념 & 응용
ViewModelAction의 필요성 MVVM 패턴에서 ViewModel은 비즈니스 로직을 정의합니다. ViewController에서는 ViewModel 객체를 통해 비즈니스 로직을 수행하는 메서드를 호출하죠. 이때, ViewModel에서 수행하는 액션들을 Enum으로 묶으면, ViewController가 ViewModel의 개별적인 메서드들을 직접 호출하는 것보다 명확하고 안전하게 메서드를 호출할 수 있습니다. 또한 개별 메서드를 private 접근제어자로 설정이 가능하여 캡슐화도 엄격해집니다. 그럼 이제 방법을 알아보도록 합시다. Enum ViewModelActions 정의 ViewModel의 Action들을 묶은 Enum을 정의합시다. enum ViewModelActions { case save(I..
[Swift] Dictionary Grouping
·
Swift/개념 & 응용
서론 Array를 포함한 Collection를 Dictionary로 묶고 싶은 상황이 있습니다. 예를 들면, 아래와 같은 ItemType Enum이 있다고 합시다. enum ItemType: Hashable, CustomStringConvertible { case old, new var description: String { switch self { case .old: return "old" case .new: return "new" } } } 그리고 이 Enum을 가지고 있는 구조체 Item이 있어요. struct Item: CustomStringConvertible { var name: String var type: ItemType var description: String { return name ..
유정주
'스위프트' 태그의 글 목록 (4 Page)