분류 전체보기

iOS

[ iOS ] 프로젝트에 Clean Architecture를 도입하며 배운 구조적 사고

iOS 앱 개발을 하며 규모가 커질수록 기능마다 역할과 책임이 명확히 나뉜 구조가 필요하다는 것을 느꼈고, 그 해답 중 하나로 Clean Architecture를 도입해보았습니다. 이 글은 Clean Architecture의 핵심 개념과 이를 iOS 프로젝트에 어떻게 적용했는지를 정리한 기록입니다.Clean Architecture란?Clean Architecture는 의존성 방향이 바깥에서 안으로만 흐르고, 핵심 로직(비즈니스 규칙)을 외부 구현과 분리하는 소프트웨어 아키텍처입니다. 이 구조는 Robert C. Martin(aka. Uncle Bob)이 제안했으며, 다음의 원칙을 따릅니다의존성은 안쪽 계층으로만 흐른다.바깥 계층은 안쪽 계층의 존재를 알 수 있지만, 그 반대는 아니다.구현보다 추상에 의존..

iOS/UIKit

[ UIKit ] 회원가입 버튼이 비활성화되는 문제 해결기 (UIKit + MVVM)

회원가입 화면을 UIKit + MVVM 구조로 구현하던 중, 모든 입력이 유효함에도 회원가입 버튼이 비활성화되어 있는 문제가 발생했습니다.이 글에서는 그 문제의 원인을 분석하고 해결한 과정을 기록합니다. 문제 상황회원가입 화면에서 다음 조건을 모두 만족했음에도 불구하고,닉네임 / 이메일 중복 확인 완료필수 약관 동의 체크 완료비밀번호, 비밀번호 확인 입력 완료 및 일치회원가입 버튼이 활성화되지 않고 비활성화 상태로 유지되는 문제가 발생했습니다.원인 분석MVVM 구조로 구현된 프로젝트에서 ViewModel은 사용자 입력 상태를 바탕으로 isFormValid 값을 계산하고, 클로저를 통해 View에 전달하고 있었습니다.viewModel.isFormValidChanged = { [weak self] isVal..

iOS/UIKit

[ UIKit ] UITableViewCell에서 AutoLayout 충돌 이슈 해결

문제 정의환율 계산기 앱을 만들던 중 UITableViewCell에서 다음과 같은 오류 로그가 반복 출력됐다Changing the translatesAutoresizingMaskIntoConstraints property of the contentView of a UITableViewCell is not supported and will result in undefined behavior...Unable to simultaneously satisfy constraints.Will attempt to recover by breaking constraint...이 오류는 contentView에 명시적으로 제약을 주거나 translatesAutoresizingMaskIntoConstraints = false를..

iOS/UIKit

[UIKit] ViewController의 개념과 생명주기 정리

iOS 개발을 시작하면서 가장 처음 마주하게 되는 개념 중 하나가 바로 ViewController이다. 화면 하나를 담당하며, 그 안에서 사용자와의 상호작용을 처리하는 중심 역할을 한다.이번 글에서는 ViewController가 어떤 역할을 하는지, 그리고 iOS에서 어떤 순서로 생명주기 메서드들이 호출되는지 정리해보려고 한다. 직접 실습하며 알게 된 내용을 바탕으로, 처음 접하는 분들도 이해하기 쉽게 풀어보았다.ViewController란?앱 내 하나의 화면을 담당하는 컨트롤러화면에 보이는 모든 뷰(UIView, UIButton, UILabel 등)를 관리사용자의 액션에 따라 데이터를 변경하거나 다른 화면으로 전환UIKit의 기본 구성 요소Apple 공식 문서에서는 UIViewController를 다음..

iOS/UIKit

[ UIKit ] SwiftUI만 공부하던 내가 UIKit MVVM에서 클로저를 처음 마주쳤을 때

저는 SwiftUI로 iOS 개발을 공부해왔습니다.@State, @Binding, @ObservedObject… 이런 키워드만 있으면 데이터가 바뀌면 UI가 저절로 바뀌는, 말 그대로 마법 같은 환경이 익숙했지만 UIKit으로 넘어오면서 MVVM 패턴을 적용해보려던 순간, 나는 **클로저(Closure)**라는 녀석과 마주쳐 어떠한 역할을 하는지 알아보려고 합니다.SwiftUI에서는 왜 클로저를 안 썼지?SwiftUI에서는 데이터에 @Published만 붙여주면 UI는 알아서 반응한다.class ViewModel: ObservableObject { @Published var title = "Hello"}struct MyView: View { @ObservedObject var viewModel..

iOS/UIKit

[ UIKit ] Combine으로 상태를 바인딩하는 방법

UIKit 환경에서 Combine 프레임워크를 활용해 상태를 자동으로 바인딩하는 방법을 배워보려 합니다.. 예제로는 내배캠 iOS 앱 개발 입문 1주차 강의의 Counter 앱을 활용했습니다. 기존에는 Delegate 패턴으로 사용자 이벤트를 처리했다면, 이번엔 Combine을 통해 모델의 상태가 바뀔 때 UI가 자동으로 업데이트되는 구조를 구현해보려 합니다.Combine이란?Combine은 Apple이 WWDC 2019에서 발표한 반응형(Reactive) 프로그래밍 프레임워크입니다. Swift 언어로 작성된 코드에서 다양한 이벤트 스트림(데이터, 네트워크 응답, 사용자 인터랙션 등)을 하나의 방식으로 처리할 수 있도록 만들어졌습니다.Combine은 Swift 개발자가 다음과 같은 상황에서 강력하게 활용..

Sheep1sik
'분류 전체보기' 카테고리의 글 목록