본문 바로가기

전체 글

(14)
[SwiftUI] TCA의 핵심, Reducer와 Store 직접 구현해보기 안녕하세요~!이번 포스팅에서는 TCA의 핵심인 Reducer와 Store를 제 방식대로 직접 구현해 본 내용을 소개하고자 합니다! 여러분은 프로젝트를 하실 때 주로 어떤 아키텍처 패턴을 사용하고 계셨나요?저는 최근 1년 동안 계속 SwiftUI로만 프로젝트를 진행해 왔었는데요,SwiftUI에서 가장 보편적으로 사용되는 아키텍처 패턴인 MVVM을 거의 대부분 사용해 왔었습니다.그리고 MVVM 구조에서 단방향 구조를 접목시켜 사용해 왔었습니다.@Observablefinal class ViewModel { struct State { ... } enum Action { ... } // View에서는 state를 직접 수정할 수 없음 private(set) var state = State() //..
[Swift] Namespace 용도로 Struct와 Enum 타입 중 어느 것이 적절할까? 안녕하세요~!오늘은 Namespace 용도로 Struct와 Enum 타입 중 어느 것이 더 적절할지에 대해 짧게 이야기해보려고 합니다! 보통 iOS 개발을 하시다 보면 View에 사용될 width, height, spacing 등을 쉽게 관리하기 위해 상수로 선언하실 텐데요.물론, View 뿐만 아니라 다른 여러 로직에서 사용되는 경우도 마찬가지일 테고요.많은 경우가 구조체 또는 열거형 타입 프로퍼티로 상수를 선언해서 사용하고 있으실 거 같아요.// 구조체 타입으로 타입 프로퍼티 정의struct SViewConstants { static let width = 100 static let height = 200 static let spacing = 10}// 열거형 타입으로 타입 프로퍼티 정..
[SwiftUI] SwiftUI에서 View를 왜 some View로 리턴할까? 안녕하세요~!이번 포스팅에서는 SwiftUI에서 View를 왜 some View로 리턴하는지에 대해 알아보려고 합니다! 오늘의 주제인 some View에 대해 알기 위해서는 먼저 some 키워드, 즉 불투명 타입(Opaque Type)에 대해 알아야 합니다.그와 더불어 박스형 프로토콜 타입(Boxed Protocol Type)까지도 알아야 합니다. 이 두 개념에 대해서는 이전에 작성했던 [Swift] Opaque Type과 Boxed Protocol Type에 대해 알아보자에서 확인할 수 있습니다! 목차는 다음과 같이 이루어져 있습니다.some View 대신 구체적인 타입을 지정한다면?some View 대신 any View를 사용할 수는 없을까?some View에 대해 좀 더 파고들자 그럼 지금부터 한 ..
[Swift] Opaque Type과 Boxed Protocol Type에 대해 알아보자 안녕하세요 ~!이번 포스팅에서는 불투명 타입(Opaque Type)과 박스형 프로토콜 타입(Boxed Protocol Type)에 대해 알아보려고 합니다. 최근에 계속 SwiftUI 프로젝트를 여러 개 진행하면서 some View를 계속해서 봐왔는데요,'some 키워드는 뭘까, 그래서 왜 some View를 리턴하는 건데'에 대해 궁금증이 있었지만 계속 뒤로 미뤘거든요 ㅎㅎ;;그래서 이번에 한번 불투명 타입에 대해 딥 다이브 해보자는 마음가짐을 가지고 공부를 해보았습니다! 불투명 타입과 박스형 프로토콜 타입이 뭐야?Swift에서는 값의 타입에 대한 자세한 정보를 숨기기 위한 방법을 불투명 타입과 박스형 프로토콜 타입을 통해 제공하고 있어요.이들 각각 some 키워드와 any 키워드를 통해 사용되고 있죠...
[CS & Swift] 클린 아키텍처와 코드로 알아보는 SOLID 원칙 안녕하세요~!이번 글은 클린 아키텍처 책 내용을 기반으로 SOLID 원칙에 대해 이야기해보려고 합니다. 다들 한 번쯤은 들어보셨을 원칙일 텐데요,클린 아키텍처 저자이신 로버트 C. 마틴은 건물을 지을 때 좋은 벽돌을 사용하더라도 건물의 아키텍처를 엉망으로 만들면 결국엔 큰 의미가 없는 것과 같다고 말하고 있습니다.마찬가지로 소프트웨어도 시스템에서도 깔끔한 코드를 작성하더라도 시스템의 설계가 엉망이라면 깔끔한 코드도 결국엔 의미가 없다는 것이죠. (물론, 그 반대도 마찬가지입니다.)그래서 좋은 벽돌(깔끔한 코드)로 좋은 아키텍처를 정의하는 원칙이 필요한데, 그것이 바로 SOLID 원칙이다라고 소개하고 있습니다. SOLID 원칙은 각 원칙의 첫 번째 글자를 이어 붙인 이름으로 각 원칙은 다음과 같습니다.단일..
[Swift] 공식 문서로 알아보는 제네릭(Generic) Swift Programming Language 공식 문서를 통해 공부한 내용을 정리하는 글입니다! 1. 제네릭이란?제네릭은 정의한 요구사항에 따라 모든 타입에서 동작할 수 있는 유연하고 재사용 가능한 함수 또는 타입을 작성할 수 있도록 하는 기능입니다.이는 중복을 피하고 코드의 의도를 명확하고 추상적인 방식으로 표현할 수 있습니다.2. 제네릭이 해결하는 문제다음과 같이 두 정수 타입의 값을 바꾸는 함수가 있습니다.func swapTwoInts(_ a: inout Int, _ b: inout Int) { let temp = a a = b b = temp}var someInt = 10var anotherInt = 90swapTwoInts(&someInt, &anotherInt)print("..
[Swift] 공식 문서로 알아보는 ARC Swift Programming Language 공식 문서를 통해 공부한 내용을 정리하는 글입니다!  1. ARC란?Automatic Reference Counting의 약자로, Swift에서 앱의 메모리 사용량을 추적하고 관리하기 위한 기법입니다.클래스의 인스턴스가 생성될 때마다 ARC는 인스턴스에 대한 정보(인스턴스 타입에 대한 정보, 인스턴스에 저장된 프로퍼티 값 등)를 저장하기 위해 메모리에 할당하게 됩니다.그리고 ARC는 인스턴스가 필요로 하는 동안 메모리에서 사라지지 않도록 얼마나 많은 프로퍼티, 상수 또는 변수가 각 인스턴스에 참조하고 있는지를 추적합니다.만약 인스턴스를 참조하고 있는 요소가 하나라도 존재하지 않는다면 ARC는 해당 인스턴스를 메모리에서 해제시키게 됩니다.예제 코드로 간단히 ..
[NC1] 꽤 고생했던 혼자만의 여정 MC1을 지나 어느덧 2주간의 NC1 여정도 마무리가 되었다. Nano Challenge는 개인 작업으로 진행했고, '나만의 다이어리 앱 만들기'라는 주제를 가지고 이후 챌린지를 위한 기본기를 다지는 2주였다. 달리 말하면 내가 MC1을 하면서 부족하다고 느꼈던 부분들(디자인, 테크 등)을 학습하거나, 내가 새롭게 학습하고 도전해 보고 싶은 것들을 공부하고 적용해 보는 챌린지였다. '나만의 다이어리 앱' 기획하기 어떤 주제를 가지고 기록을 할까 생각을 했을 때, 오랜 시간 고민을 하지 않고 개발 관련해서 학습했던 내용들을 기록해 보기로 했다. 그리고 내가 학습했던 기록들을 Github의 contribution(a.k.a. 잔디)처럼 날짜별로 표시해서 내가 얼마나 꾸준히 학습했는지를 표시해 보기로 했다. ..