새로 올라온 글 보러가기!
-
[WWDC25] 2025 Platforms State of the Union 빠르게 톺아보기
Platforms State of the Union - WWDC25 - 비디오 - Apple DeveloperApple 플랫폼의 최신 기술을 만나보세요.developer.apple.com 안녕하세요 여러분!어제 한국 시간 기준 새벽 2시, 팀쿡의 Keynote를 시작으로 일주일 간 진행되는 Apple의 WWDC25 행사가 시작되었습니다.저는 포항에 있는 애플 디벨로퍼 아카데미에서 4기 러너들과 아카데미 동문, 여러 외부 초청 지인분들과 함께 WWDC 2025 W@TCH PARTY를 즐겼는데요.Apple 생태계 OS의 "26" 버전 네임 통일을 시작으로 (visionOS는 2에서 냅다 26으로 쩜-프를 하게 되었다는..)유리와 물방울 그 사이 어딘가에 해당하는 Apple의 새로운 디자인 시스템 Liquid..
-
[iOS] 토스터 앱의 에러 처리 (Error Handling) 흐름을 소개합니다 (feat. Moya, Combine, networkFlatMap)
저 몰래 천천히 야금야금 진행하던 코드 리팩토링이 거의 마무리 단계에 진입했습니다!"중복 코드의 최소화" 그리고 "명확한 데이터 처리 흐름"을 목표로 코드 리팩토링을 계속 진행해왔고,블로그로도 (언제가 될지는 모르겠지만) 차근차근 한 주제씩 다뤄보겠습니다! 오늘은 이 중 에러 처리 (Error Handling)에 집중해볼거구요.Combine 적용한 선언적 데이터 스트림 흐름의 ViewModel 구조 (Input-transform-Output 흐름) 적용하기Completion 핸들러 기반 네트워크 비동기 처리 메서드 -> Combine 기반 네트워크 비동기 처리 메서드로 변경 (코드 일관성 증대)네트워크 메서드에서 발생하는 에러 처리 흐름 (Error Handling Stream) 구조화이벤트 브로드캐스..
-
[GCD] 메인 스레드에서 DispatchQueue.main.sync를 사용하면 안되는 이유
☑️ 데드락 (Deadlock) 발생 상황을 이해해보자메인 스레드에서 DispatchQueue.main.sync를 호출할 때 아래와 같은 데드락 (Deadlock, 무한 대기 상태) 에러가 발생합니다.우선 데드락이 발생하는 아래 코드의 의미를 정확하게 이해해보겠습니다.별도의 설정을 하지 않으면, 기본적으로 우리의 코드는 메인 스레드 (main)에서 동작합니다. -> 해당 코드도 메인 스레드 위에서 동작 중!DispatchQueue.main : main Queue로 작업을 전달한다는 의미입니다. 메인 큐는 기본적으로 Serial Queue (직렬 큐)이기에 동일한 스레드인 자기자신, 메인 스레드 (main)로 작업 (Task)이 할당되겠군요.sync : 동기적인 작업 (= 작업을 보내고 끝날 때까지 기다림..
-
[Swift] 당신이 싱글톤 (Singleton)을 사용하기 전에 반드시 알아야 하는 것들
💡 싱글톤 패턴(Singleton Pattern)은 앱에서 전역적 (global)으로 접근 가능한 하나의 "공유 클래스 인스턴스 (shared instance of a class)"를 만들어 사용하도록 하는 디자인 패턴이다.예전 제 글 중, Swift 디자인 패턴 중 싱글톤 패턴 (Singleton Pattern)에 대해 설명했던 내용이 있었습니다.아래에 첨부되어 있는 글의 내용은 타입 프로퍼티 (static 키워드)부터 시작해 실제 싱글톤 패턴을 Swift 코드로 구현하는 방법, 그리고 싱글톤의 가벼운 장단점과, Apple이 채택하고 있는 싱글톤의 사례 (UserDefaults.standard, Notification.default 등등)까지 알아봤었죠. ✔️ 싱글톤 패턴이 무엇인지 아직 개념에 대한..
블로그 주인장이 추천하는 글 보러가기!
-
[Clean Architecture] OOP의 SOLID 원칙을 Swift의 관점에서 이해하기
0️⃣ OOP(Object-Oriented Programming)와 SOLID 원칙"일단 앱잼 기간 중에 빨리 기능부터 구현하고, 우리 앱잼 끝나면 진짜 리팩토링하자!"단기간에 결과물을 내야하는 솝트 동아리 내의 과제, 합동 세미나, 장기 해커톤 앱잼 같은 곳에서 가장 많이 들었고, 가장 많이 해온 말이다.하지만 해당 기능 개발이 끝나면, 또 다른 기능 개발이 개발자들을 기다리고 있고....또 다른 기능 구현을 우선적으로 하다 보면, 코드 정리나 프로젝트의 구조를 개선하는 일은 후순위가 항상 되기 마련이었다.어쩌면 리팩토링은 평생 동안 목표에 그칠 수밖에 없는 "이룰 수 없는 과제"일지도 모르겠다.그래서 나는 여기서 의문을 하나 가지게 되었다."겉으로 보이지 않는 코드의 퀄리티나 프로그램의 구조를 굳이 ..
-
[Swift] Coordinator & Router & Factory Pattern을 사용한 리팩토링 (1) : 초기 세팅부터 로그인 화면까지
💡 해당 글은 Coordinator Pattern, Router, Factory Method Pattern을 사용한 리팩토링 코드를 설명하는 글입니다!글이 너무 길어져 총 3개로 나누어 글을 올릴 예정이구요, 만약 잘못된 개념이나 개선할 부분, 질문 등이 있다면 댓글로 지적해주시면 빠르게 남겨드리도록 하겠습니다 ^__^1️⃣ Coordinator & Router & Factory Pattern을 사용한 리팩토링 (1) : 초기 세팅부터 로그인 화면까지2️⃣ Coordinator & Router & Factory Pattern을 사용한 리팩토링 (2) :코디네이터로 탭바 만들기3️⃣ Coordinator & Router & Factory Pattern을 사용한 리팩토링 (3) : 앱 전체 흐름 구성, ..
-
[Combine] Combine 진짜 알기 쉽게 정리해서 올려줄게 (1) - Combine 기초 개념 이해하기
⚠️ 이번 글은 Combine Framework가 처음 소개되었던 WWDC19의 두 세션 Introducing Combine과 Combine in Practice의 예제 을 직접 구현하면서 사용된 Combine 개념들에 대해 집중적으로 소개합니다.이 글에서 소개되지 못한 Combine의 다른 여러 개념들은 Apple Developer Documentation-Combine 글을 참조하길 바랍니다.번역 또는 프로젝트의 목적, 그리고 저의 부족한 이해력 때문에 일부 잘못된 내용이 있을 수 있다는 점. 전제하고 읽어주시면 감사하겠습니다 (잘못된 개념 제보 및 질문 댓글로 얼마든지 환영입니다:) ^__^ 1️⃣ Combine이 뭔데? 왜 공부하는 건데? 언제 쓰는 건데?Combine에 대해 공부하기 전에 우리가..
-
[SPM] Swift 라이브러리를 만들어보자 (1) - Package의 개념과 배포 과정 (feat. Creating Swift Packages)
1. Swift Package와 SPM (Swift Pacakge Manager)Swift Package는 Swift에서 모듈식으로 코드를 관리하고 배포할 수 있도록 제공하는 개념입니다. Swift Package는 단순히 이번 글에서 만들고자 하는 라이브러리뿐만 아니라, 프레임워크, 실행가능한 모듈로서 분리, Swift 매크로 등 다양한 코드 묶음을 만들 수 있는데요.이렇게 작은 묶음으로써 코드를 프로젝트 내에 분리하는 이유는 그 무엇보다 "다른 여러 프로젝트에서 재사용되는 코드를 효율적(의존성 관리, 버전 관리 등)으로 활용할 수 있다는 점"이 가장 큽니다.*흔히 사용하던 서버 통신 라이브러리 Alamofire와 Moya, 이미지 캐싱 라이브러리 Kingfisher, AutoLayout을 도와주는 Sn..
블로그에서 가장 인기가 많은 글이에요!
-
[생활스포츠지도사 2급 자격증] #2 - 생체 2급 야구 실기, 구술 합격 후기
지난번 글에 이어서, 오늘은 스포츠지도사 자격증 취득 후기 2편을 준비해봤다. 생체 필기시험을 본 다음에는, 실기랑 구술시험이 바로 기다리고 있다. 실기 평가와 구술 평가는 70점 이상을 모두 받아야 합격이고, 두 시험을 같은 날짜에 바로 이어서 보기 때문에 동시에 준비를 해야 한다. (아래부터는 내용은 야구 종목에 해당하는 내용이고, 세부 수행 내용은 연도별로, 종목별로 차이가 있을 수 있다 ^__^) (1편, 필기시험을 다룬 포스팅은 아래에👇🏻) [생활스포츠지도사 2급 자격증] #1 - 생체 2급 필기 시험 합격 후기 지금으로부터 거의 3년 전, 초등학교 때부터 고등학교 때까지 줄곧 야구라는 운동을 해온 나는 1년 간 긴 독학 재수생활을 마치고 대학 합격을 통보받은 후, 할 것이 없어 심심해지게 된다..
2021.09.26 14:20 -
[WWDC25] 2025 Platforms State of the Union 빠르게 톺아보기
Platforms State of the Union - WWDC25 - 비디오 - Apple DeveloperApple 플랫폼의 최신 기술을 만나보세요.developer.apple.com 안녕하세요 여러분!어제 한국 시간 기준 새벽 2시, 팀쿡의 Keynote를 시작으로 일주일 간 진행되는 Apple의 WWDC25 행사가 시작되었습니다.저는 포항에 있는 애플 디벨로퍼 아카데미에서 4기 러너들과 아카데미 동문, 여러 외부 초청 지인분들과 함께 WWDC 2025 W@TCH PARTY를 즐겼는데요.Apple 생태계 OS의 "26" 버전 네임 통일을 시작으로 (visionOS는 2에서 냅다 26으로 쩜-프를 하게 되었다는..)유리와 물방울 그 사이 어딘가에 해당하는 Apple의 새로운 디자인 시스템 Liquid..
2025.06.12 16:40 -
[Xcode] 코드 스니펫(Code Snippet)을 사용하는 방법
💡코드 스니펫(Code Snippet)이란? 오늘 내 머리를 탁(?) 치게 만든 코드 스니펫이란 엄청난 녀석을 알게 되었다. 코드 스니펫이란 코드를 빠르고 효율적으로 작성하기 위해 자주 쓰는 코드를 템플릿으로 저장해 두고 단축어를 이용해 간편하게 코드를 작성할 수 있도록 도와주는 기능이다. 하지만 사실, 이미 우리는 은연중에 코드 스니펫 기능을 사용하고 있었다. 아래 예시를 보자. if를 쓰기만 해도 if - If Statement라는 칸이 아래 표출되고, 이 부분을 클릭하면 오른쪽처럼 자동으로 if 문법에 대한 기본 템플릿이 표출되는 것을 한 번쯤은 경험한 적이 있을 것이다. 만약, 기본적으로 있는 이 템플릿 외에 자주 쓰는 주석, 테이블뷰, 컬렉션뷰 익스텐션을 이렇게 만들어두면 더 편하지 않을까? 그..
2021.11.06 22:46 -
[생활스포츠지도사 2급 자격증] #3 - 생체 2급 연수, 현장실습까지 최종 합격 후기
이제 길고 길었던 2급 생활스포츠지도사 자격증 시험 후기를 마무리 지을 차례이다. 원래는 자격증 취득을 1년 내에 끝날 계획이었는데, 2020년에 예상치 못한 코로나가 발생하는 바람에 실기까지 모두 끝내 놓고 연수와 현장실습 과정이 모두 취소되는 바람에 2021년까지 자격증 취득이 미뤄지게 됐다. 그리고 2021년 하반기 연수 과정을 끝내고 드디어 지난달 자격증을 취득했다⭐️ 오늘은 생체 2급 자격증 취득의 마지막 과정인 연수와 현장실습에 대해 후기를 작성해보록 하겠다 :) (👇🏻2020년에 끝내 둔 필기, 실기, 구술 후기는 아래 글에서 작성해두었다👇🏻) [생활스포츠지도사 2급 자격증] #1 - 생체 2급 필기 시험 합격 후기 지금으로부터 거의 3년 전, 초등학교 때부터 고등학교 때까지 줄곧 야구라는 ..
2022.01.09 22:59 -
[Apple Developer Academy @ POSTECH] #1 - 4기 하반기 지원/합격까지 오게 된 지금까지의 내 생각 모음
블로그에서 기술 글이 아닌, 일상 글로 돌아온 것은 또 오랜만이네요.사실 써야 하는 일상 회고 글이 꽤 있긴 한데... 이제 방학했으니까 하나둘씩 미뤄놨던 글들을 써보고자 함니다..! (벌써 1년 된 토스터 앱잼 회고부터.. 디자인패턴 스터디..컴바인 스터디.. 쿠다 데이터톤.. 플립 등..컨텐츠는 아주 많이 쌓여있으니 만관부...) 아무튼! 제목에서 이미 써있는 것처럼, 저는 (겨우 일주일 남은) 내년 포스텍에서 1년 동안 Apple Developer Academy 4기 러너로 참여하게 되었습니다! 👏🏻👏🏻👏🏻지원하기까지 정말 많은 고민 과정과 생각들, 그리고 준비 과정까지 모든 것들을 한순간 저만의 기억으로만 남기기에 너무 아쉬운 점도 많고 / 공유하고 싶은 내용도 많아서 글을 써보고자 ..
2024.12.25 14:48