분류 전체보기 9

방치된 앱을 리팩토링해 앱스토어에 출시하기까지

1. 시작 - 공모전 앱에서 시작된 프로젝트 iOS를 학습한 초반, 스토리보드를 사용해 간단한 앱을 만든 적이 있다. 이 앱은 공모전을 위해 단 2주 만에 개발된 프로젝트였다.기능은 국회 공공 API를 활용해 특정 날짜에 발의된 법안을 조회하고, 관심 있는 법안을 즐겨찾기하는 것이었다. 하지만 공모전에서는 탈락했고, 이후 앱은 방치되었다.그러다 2025년이 되면서, “앱을 다시 리팩토링해 앱스토어에 등록해 보자!“라는 목표가 생겼다. 그렇게 앱을 다시 열어본 순간…“내가 이런 코드를 짰다고?”“도대체 무슨 생각으로 이걸 만들었지?” 처음 만든 앱이라 코드 품질이 너무나도 형편없었다.결국, 처음부터 다시 뜯어고치기로 마음먹었다. 2. 리팩토링 과정 (1) 스토리보드를 코드 기반 UI로 변경 처음 작업한 것..

Swift 2025.02.26

클린 아키텍처: TextField 데이터를 Interactor로 전달하는 방법 - (1)

클린 아키텍처를 적용하면서, 가장 저수준 객체인 View에서 TextField를 통해 입력된 텍스트 데이터를고수준 객체인 Interactor에 강결합 없이 전달하는 방법에 대해 고민했습니다.이번 글에서는 이 문제를 해결하기 위해 제가 고민했던 여러 가지 방법과, 최종적으로 선택한 방법에 대해 정리해 보려고 합니다.데이터의 흐름현재 데이터의 흐름은 View → ViewController → Interactor 순으로 진행되고 있습니다.이를 기반으로 조사한 결과, 총 3가지 방법을 생각해 볼 수 있었습니다.오늘은 그중 제가 선택한 방법에 대해 설명해 보겠습니다.첫 번째 방법: 직관적인 접근법이 방법은 제가 실제로 프로젝트에 적용한 방법입니다.장점구현 난이도가 낮고 코드가 직관적입니다.계층 간 데이터 흐름이 ..

Swift 2024.12.19

클린아키텍처 적용해보기 in iOS - 2

https://geonh0dev.tistory.com/5 클린아키텍처 적용해보기 in iOS이전에 클린아키텍처에 대한 저의 생각을 적어 보았습니다. 그럼 이번에는 프로젝트에 직접 적용해 보도록 하겠습니다.https://www.canva.com/design/DAGF2OC79uc/WQkKSiTJWpftVdkyoyOq2Q/edit전체적인 다이어그램geonh0dev.tistory.com지난 시간 클린아키텍처를 설계해 보면서 문제가 발생하는 것이 있었습니다. 이번시간에는 어떤 문제인지 다시 한번 살펴보고 어떤 식으로 설계하면서 문제를 해결했는지 알아보겠습니다. 먼저 저번시간에 설계하면서 발생했던 문제는고수준 객체인 Interactor가 View에 맞는 데이터를 바로 맵핑까지 시켜주었습니다.이로 발생하는 문제는 고..

Swift 2024.08.27

Swift - Closures

개념클로저는 코드에서 전달하고 사용할 수 있는 자체 포함된 기능 블록입니다. 클로저는 정의된 컨텍스트에서는 모든 상수, 변수에 대한 참조를 캡처 하고 저장할 수 있습니다. 이는 해당 상수와 변수를 닫는 것으로 알려져 있습니다.- 전역 함수는 이름이 있고 어떤 값도 캡처하지 않는 클로저- 중첩 함수는 이름이 있고 둘러 싸는 함수에서 값을 캡처할 수 있는 클로저- 클로저 표현식은 주변 컨텍스트에서 값을 캡처 할 수 있는 경량 구문으로 작성된 이름 없는 클로저즉 함수도 클로저 입니다. 클로저 표현식클로저 표현식은 간단하고 집중된 구문으로 인라인 클로저를 작성하는 방법 입니다.명확성이나 의도를 잃지 않고 단축된 형식으로 클로저를 작성하기 위한 여러 구문 최적화를 제공합니다.{ (parameters) -> in..

Swift 2024.08.18

SOLID와 객체지향의 사실과 오해 독서 후기

SOLID 란?SOLID는 객체지향 프로그래밍 및 설계에서 소프트웨어의 구조를 개선하고 유지 보수성을 높이기 위한 다섯 가지 원칙의 약자입니다.각 원칙은 코드의 결합도를 낮추고 응집도를 높여 시스템의 유연성과 확장성을 향상시키는 것을 목표로 합니다. S : SRP 단일 책임 원칙(Single Responsibility Principle)O : OCP 개방- 폐쇄 원칙 (Open/Closed Principle)L : LSP 리스코프 치환 원칙 (Liskov Substitution Principle)I : ISP 인터페이스 분리 원칙 (Interface Segregation Principle)D : DIP 의존 역전 원칙 (Dependency Inversion Principle)이제 이 원칙들을 자세히 살펴..

카테고리 없음 2024.08.03

MVC패턴과 MVVM 패턴에 대한 나의 생각

오늘은 MVC와 MVVM의 패턴에 대해 알아보고 저의 생각은 어떤지 이야기해 보겠습니다.  MVC 패턴출처 : https://medium.com/ios-os-x-development/ios-architecture-patterns-ecba4c38de52 MVC 패턴이란 애플에서 기본적으로 지원하는 디자인 패턴으로 Model + View + Controller 구조의 아키텍처 패턴을 말합니다.Model: 비즈니스 로직과 데이터를 이야기 합니다View: 사용자 인터페이스 요소를 담당합니다. 사용자에게 데이터를 표시하고 사용자의 입력을 받습니다Controller: Model과 View 사이의 인터페이스 역할을 합니다. MVC 패턴의 장점MVC는 각 컴포넌트가 독립적이므로 코드의 재사용성, 유지 보수성이 높습니다..

Swift 2024.07.31

F-Lab iOS 수료 후기

오늘은 제가 F-Lab iOS 코스를 마무리하면서 회고를 해보려고 합니다. 신청하게 된 이유먼저 저는 이전에 테킷 앱스쿨이라는 부트캠프를 수료한 상태였습니다. 하지만 앱스쿨에서는 노베이스인 분들도 많고, 그분들과 같은 수업을 들으며 심화된 내용을 배우는 데 한계가 있었습니다. 또한 SwiftUI 중심으로 학습했기 때문에 UIKit을 좀 더 집중적으로 배우기 위해 멘토링을 신청했습니다.시작하게 된 계기멘토링을 시작하게 된 가장 큰 이유는 기존의 Swift 프로젝트들이 아쉬움이 많았기 때문입니다. 혼자서 개발한 프로젝트들은 코드가 뒤죽박죽이고, 내가 작성한 코드조차 이해하기 어려웠습니다. 그래서 멘토링을 통해 이러한 문제를 해결하고 싶었습니다. 멘토링을 진행 하면서멘토링을 시작하면서 기존 프로젝트를 리팩터링..

Swift 2024.07.27

클린아키텍처 적용해보기 in iOS

이전에 클린아키텍처에 대한 저의 생각을 적어 보았습니다. 그럼 이번에는 프로젝트에 직접 적용해 보도록 하겠습니다.https://www.canva.com/design/DAGF2OC79uc/WQkKSiTJWpftVdkyoyOq2Q/edit전체적인 다이어그램 설계는 Canva를 통해 했으며 아직 프로젝트의 일부인 레시피를 서버에서 fetch해서 보여주고 검색어를 입력하여 특정 레시피를 화면에 보여주는 기능만 먼저 설계해 보았습니다.  먼저 Presentation레이어 입니다.Presentation레이어는 전체적인 UI 요소와 Interactor로 받은 결과물들을 Mapper를 통해 해당 UI에 맞는 요소들로 맵핑한 뒤 ViewController를 통해 화면의 구성을 구성합니다. 다음은 Doamin 레이어 입니..

Swift 2024.06.30

내가 생각하는 Clean Architecture - in iOS

항상 iOS 개발자의 모집 공고를 보면 Clean Architecture에 대한 설계와 디자인 패턴 적용 경험이 있으면 좋다는 것을 보면서 Clean Architecture가 무엇인지 궁금해서 먼저 찾아보게 되었습니다.  많은 구글링과 유튜브를 찾아보면서 Clean Architecture가 무엇인지에 대해 알아보려고 하였습니다. 하지만 항상 비슷한 내용의 블로그 글들뿐 제가 이해력이 부족해서인지 Clean Architecture에 대해 명확하게 무엇인지에 대해 잘 이해하지 못하였습니다. 특히 항상 보이는 그래프와 함께 설명되는 주요 개념들을 이해하기 어려웠습니다   출처: https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.ht..

Swift 2024.06.19