프로토콜 지향 프로그래밍(POP), OOP 한계를 넘는 법
프로토콜 지향 프로그래밍(POP)은 무엇을 상속받았는지가 아니라 무엇을 할 수 있는지로 타입을 설계합니다. 상속이 막히는 지점과 프로토콜 조합으로 푸는 방법, 피해야 할 경우까지 Swift 예제로 정리했습니다.
읽어보기엄선한 주제 · 41 글
iOS 앱 개발, UIKit과 아키텍처 선택에 필요한 글을 한곳에서 살펴보세요.
최신 글
프로토콜 지향 프로그래밍(POP)은 무엇을 상속받았는지가 아니라 무엇을 할 수 있는지로 타입을 설계합니다. 상속이 막히는 지점과 프로토콜 조합으로 푸는 방법, 피해야 할 경우까지 Swift 예제로 정리했습니다.
읽어보기RIBs는 앱을 화면이 아니라 비즈니스 로직 단위로 쪼갭니다. 화면 없는 조각이 존재한다는 전제와 초대형 조직에서만 쓰이는 이유, VIPER와 무엇이 다른지를 정리했습니다.
읽어보기ReactorKit은 UIKit과 RxSwift 조합에서 단방향 데이터 흐름을 표준처럼 만든 프레임워크입니다. View와 Reactor 두 역할, Mutation이라는 중간 단계가 필요한 이유, TCA와의 차이를 정리했습니다.
읽어보기iOS 개발하면서 테스트 코드 짜다 보면 XCTest에 슬슬 답답함을 느끼는 순간이 옵니다.
읽어보기iOS 아키텍처 시리즈를 여기까지 따라오셨다면, 이제 선택지는 다 펼쳐졌습니다. MVC, MVVM, MVP, VIPER, 클린 아키텍처, MV, TCA까지요.
읽어보기SwiftUI 시대의 아키텍처 논의에서 빠지지 않는 이름이 하나 있습니다. Point-Free가 만든 TCA(The Composable Architecture)입니다.
읽어보기채용 공고나 기술 블로그에서 "클린 아키텍처 기반"이라는 문구를 자주 보게 됩니다. 그런데 막상 코드를 열어보면 팀마다 모습이 제각각이에요. UseCase가 있는 곳도 있고 없는 곳도 있고, Repository의 역할도 다 다릅니다.
읽어보기iOS 앱 규모가 커지면서 의존성 관리 때문에 골치 아파진 적, 한 번쯤 있으실 거예요.
읽어보기iOS 앱 만들다 보면 꼭 마주치는 순간이 있어요. 화면 하나에 로딩 중, 성공, 실패, 빈 데이터 상태가 뒤섞이는 순간이요.
읽어보기Swift Copy-on-Write는 값 타입을 대입할 때 저장소를 공유하고, 한쪽이 수정되는 순간에만 실제 복사합니다. 이 최적화가 값 의미를 지키면서 프로토타입 패턴의 역할을 줄이는 원리를 설명합니다.
읽어보기Swift 정적 팩토리 메서드는 생성 의도를 이름으로 드러내고 반환 타입, 캐싱, 인스턴스 재사용을 제어합니다. static func make를 init 대신 선택할 때의 장단점과 GoF 패턴과의 차이를 정리합니다.
읽어보기iOS 개발 공부를 하다 보면 어느 시점에 반드시 RxSwift나 Combine이라는 벽을 만나게 됩니다. 채용 공고에는 빠지지 않고 등장하는데, 막상 코드를 열어보면 map, flatMap, sink가 줄줄이 이어지는 낯선 문법에 당황하기 쉽습니다. "그냥 클로저랑…
읽어보기디자인 패턴 책을 펼치면 늘 마지막쯤에 등장하는 게 인터프리터 패턴이에요. "이게 대체 언제 쓰이나" 싶어서 대충 넘기기 쉬운 패턴이죠.
읽어보기iOS 아키텍처 이야기에서 VIPER만큼 평가가 극단적으로 갈리는 패턴도 드뭅니다.
읽어보기비슷한 로직을 클래스마다 복붙하다가 "이거 뭔가 잘못됐는데" 싶었던 적 있으신가요? iOS 앱에서 화면별 데이터 로딩 코드를 세 번째 복사할 때쯤이면 손이 멈추게 되죠.
읽어보기Objective-C 코드에서 대괄호로 감싼 [receiver message] 구문, 겉보기엔 그냥 메서드 호출처럼 보입니다.
읽어보기퍼사드 패턴은 여러 객체가 얽힌 서브시스템 앞에 단순한 진입점 하나를 제공합니다. Swift 회원가입 예제로 호출 순서를 한곳에 모으는 법과 어댑터·프록시·데코레이터와의 차이를 설명합니다.
읽어보기Swift로 iOS 앱을 만들다 보면 버튼을 눌렀는데 왜 이 뷰컨트롤러가 이벤트를 받는 걸까 궁금했던 순간이 다들 있으실 거예요.
읽어보기Swift로 앱을 만들다 보면 for item in array 같은 반복문을 하루에도 수십 번 씁니다. 워낙 자연스럽게 쓰다 보니, 커스텀 타입을 for-in으로 돌리려다 컴파일 에러를 만나고 나서야 궁금해지곤 하죠. "이 반복문, 대체 안에서 무슨 일이 벌어지는 거지?"
읽어보기앱을 만들다 보면 비슷비슷한 객체를 수천, 수만 개씩 찍어내야 할 때가 있어요. 지도 위에 마커를 수만 개 뿌리는 기능이 대표적인데, 이런 상황에서는 메모리 그래프가 계속 치솟기 쉽습니다.
읽어보기스테이트 패턴은 상태별 행동과 전환을 객체나 enum으로 모아 흩어진 조건문을 줄입니다. Swift 화면 상태를 리팩터링하는 순서와 전략 패턴처럼 보이는 구조를 의도로 구분하는 법을 설명합니다.
읽어보기SwiftUI 소개 문서 첫 줄에는 어김없이 "선언형(declarative) 프레임워크"라는 말이 나옵니다. React도, Jetpack Compose도 자신을 선언형이라 부르죠.
읽어보기폴더 안에 폴더, 그 안에 또 파일. 이런 트리 구조를 코드로 다뤄본 분이라면 한 번쯤 막막했을 거예요.
읽어보기iOS 개발하다 보면 이런 순간이 옵니다. 기본 기능은 그대로 두고 로깅 하나만, 캐싱 하나만 얹고 싶은데, 그걸 하려고 클래스를 상속받기 시작하면 어느새 상속 트리가 엉망이 되어 있죠.
읽어보기Swift 팩토리 함수는 생성 로직에 의도를 드러내는 이름을 붙이고 반환 타입과 재사용 정책을 유연하게 만듭니다. init 대신 static func를 선택할 기준과 GoF 팩토리 메서드와의 차이를 정리합니다.
읽어보기어댑터 패턴은 레거시 API의 인터페이스를 새 코드가 기대하는 프로토콜로 변환합니다. Swift에서 변환 경계를 만들고 교체와 테스트를 쉽게 하는 구현 순서와 다른 래핑 패턴과의 차이를 정리합니다.
읽어보기iOS 개발을 하다 보면 델리게이트 패턴은 정말 지겹도록 만나게 됩니다.
읽어보기지난 편에서 Massive View Controller가 생기는 이유를 다뤘습니다. 뷰컨트롤러가 View와 Controller를 겸하는 바람에, 갈 곳 없는 코드가 전부 그리로 몰린다는 이야기였죠.
읽어보기Swift 개발을 하다 보면 static let shared 한 줄로 만드는 싱글톤을 정말 자주 만나게 됩니다.
읽어보기iOS 개발 공부를 시작하면 꼭 한 번 마주치는 언어가 있어요. 대괄호가 잔뜩 들어간 낯선 문법, NSString 같은 알 수 없는 접두어.
읽어보기Swift로 앱을 만들다 보면 do-catch로 에러를 잡았는데, 정작 화면에 띄울 메시지가 영 시원찮았던 경험 있으실 거예요.
읽어보기