전체 글
-
개방-폐쇄 원칙(Open-Closed Principle)기록/OOP 2023. 1. 28. 21:32
SOLID의 개방-폐쇄 원칙(Open-closed principle)은 소프트웨어 객체는 확장에 대해 열려있어야 하고, 수정에 대해서는 닫혀있어야 함을 말합니다. 다음은 개방-폐쇄 원칙을 위배하는 코드입니다. class BallGame { let name: String init(_ name: String) { self.name = name } } func play(ballGame: BallGame) { switch ballGame.name { case "Soccer": print("11 vs 11") case "BaseBall": print("9 vs 9") default: fatalError("Not implemented.") } } let soccer = BallGame("Soccer") let ba..
-
단일 책임 원칙(Single Responsibility Principle)기록/OOP 2023. 1. 28. 15:31
SOLID의 단일 책임 원칙(Single responsibility principle)은 클래스나 모듈(이하 클래스로 통일해서 작성)은 하나의 책임만을 가지며, 그 책임을 완전히 캡슐화해야 함을 말합니다. 캡슐화란, 변수와 함수를 하나의 단위로 묶는 것을 말합니다. 이는 대체로 클래스를 통해 구현합니다. 다음의 Music struct를 가지고 재생하는 MusicPlayer class를 예시로 들어보겠습니다. struct Music { let name: String let artist: String let length: TimeInterval } 다음은 단일 책임 원칙을 위배한 코드입니다. class MusicPlayer { private var musics: [Music] private var curre..
-
UIKit에서 SwiftUI View 활용하기iOS 2023. 1. 2. 01:46
UIKit에서 SwiftUI View를 활용하기 위해서는 UIHostingController를 사용하면 됩니다. UIHostingController SwiftUI View 계층 구조를 포함하고 있는 UIViewController 따라서, UIHostingController는 UIKit view controller의 모든 API를 활용할 수 있음. UIKit에서 UIViewController를 사용하고 있는 곳에서 전부 사용 가능. Modal, Navigation 모두 UIViewController 처리하는 것처럼 하면 됨. 굉장히 간단함. UIKit에 SwiftUI View를 아래의 방식으로 어떻게 포함시킬 수 있는지 간단한 예시들로 알아보겠습니다. Modal Navigation Embed 포함시킬 Sw..
-
Actor in Swift concurrencyiOS 2022. 12. 31. 07:39
Actor는 Swift concurrency의 핵심으로, async/await 및 structured concurrency와 함께 작동하여 정확하고 효율적인 동시성 프로그래밍 구축을 돕습니다. 데이터 경합(Data Race)은 두 개의 별도의 스레드가 동일한 데이터에 동시에 접근하고 이러한 접근 중 적어도 하나가 '쓰기' 작업일 때 발생합니다. 데이터 경합이 발생할 수 있다고 판단되면, actor를 사용해서 low-level에서 데이터 경합을 방지할 수 있습니다. 데이터 경합은 공유되는 가변 상태로 인해 발생합니다. struct는 동시에 접근할 수 있는 코드가 있을 때 컴파일하는 것을 허용하지 않으며, 값 타입이므로 따로 변수에 복사해서 할당한 후 작업을 수행하면 데이터 경합은 발생하지 않지만, 그것은 ..
-
Diffable DataSourceiOS 2022. 12. 29. 04:53
Diffable DataSource는 간단하고 효율적으로 UICollectionView, UITableView의 데이터 및 UI에 대한 업데이트를 관리할 수 있게 해줍니다. 둘 다 동일한 방식으로 적용하면 되며, 이 글에서는 테이블 뷰를 예로 들겠습니다. 구식 방식에서는 UITableViewDataSource 프로토콜의 구현 메서드에서 editingStyle을 다음과 같이 사용하면서, 아이템을 삭제할 때 애니메이션을 적용할 수 있었습니다.extension CitiesViewController: UITableViewDataSource { func tableView(...) { ... } func tableView(_ tableView: UITableView, commit editingStyle:..
-
Localization in iOSiOS 2022. 12. 14. 04:06
아래 세 가지로 나눠서 현지화에 대해 알아보겠습니다. 기기의 언어 및 지역 정보를 가져와서 소스 코드 내에서 사용하여 사용자 맞춤 데이터를 제공 앱 이름을 언어에 따라 변환하여 현지화를 수행 UI 컴포넌트의 문자열을 변환하여 현지화를 수행 기기 Locale 정보 가져와서 사용하기 기기의 언어 및 지역 정보는 Locale 타입을 이용해서 가져올 수 있습니다. Locale은 사용자에게 보여주기 위한 데이터의 형식을 지정하는 데 사용하기 위한 언어, 문화 및 기술 규칙에 대한 정보를 가지고 있습니다. 다음과 같이 설정 > 일반 > 언어 및 지역의 값을 확인할 수 있습니다. func printLocale() { let identifier = Locale.current.identifier let regionCod..
-
Operator, Combine Framework in SwiftiOS 2022. 12. 11. 17:00
Combine 프레임워크는 앱이 이벤트를 처리하는 방법에 대한 선언적 접근 방식을 제공합니다. 지정된 이벤트 소스에 대해 단일 처리 체인, 즉 파이프라인을 만들 수 있습니다. 파이프라인은 데이터 처리 단계의 출력이 다음 단계의 입력으로 이어지는 형태로 연결된 구조로, 이렇게 연결된 데이터 처리 단계는 한 여러 단계가 서로 동시에, 또는 병렬적으로 수행될 수 있어 효율성이 향상됩니다. 이러한 각 부분은 이전 단계에서 받은 요소에 대해 고유한 작업을 수행하는 Operator입니다. 예를 들어, Combine으로 구독할 수 있는 Notification을 생성했을 때, Notification을 받은 후 operator를 사용하여 이벤트 전달 내용을 사용자 정의하고 최종 결과를 사용하여 UI를 업데이트할 수 있습..