-
[Clean Code] 독후감 및 정리 - 2
[Clean Code] 독후감 및 정리 - 1들어가기 앞서 (다시 읽기에 앞서)며칠 전 한 면접을 보게 되면서, "좋은 코드 가독성이라는 것을 어떻게 생각하세요 ?" 라는 질문을 받았습니다. 평소에 지키는 클린 코드라고 생각한 방법들(좋chanhhh.tistory.com지난 편 정리 및 결론 링크입니다.들어가기 앞서 (다시 읽기에 앞서) 이전에 1-3 장에 대해서 클린 코드를 읽고 주변의 프로그래머 지망생 동료와 책에 대한 얘기를 해봤습니다. 호불호가 많이 갈리는 책이다라고 얘기를 해주더라고요. 무조건적인 맹신은 지양하는 게 좋겠다는 뻔한 그런 얘기를 나눈 것 같습니다. 그래도 한 번쯤은 읽어서 좋은 인사이트를 가져가는 게 좋을 거 같다는 뻔한 얘기로 마무리되었습니다. 😊끊임없이 "왜"라는 질문을 문제..
2024.11.13 18:52 -
[Clean Code] 독후감 및 정리 - 1
들어가기 앞서 (다시 읽기에 앞서)며칠 전 한 면접을 보게 되면서, "좋은 코드 가독성이라는 것을 어떻게 생각하세요 ?" 라는 질문을 받았습니다. 평소에 지키는 클린 코드라고 생각한 방법들(좋은 함수 명명법, 변수명, 보기 좋은 코드...등등) 만 주욱 나열하고 "네 뭐 그런 클린코드에 나온 방법들입니다." 라는 말로 그대로 끝난 경험이 있습니다. 🥲 사실 클린 코드 책을 읽은지 오래되기도 했고, 아마 이 책을 처음 접했던 날은 2020년쯤이었던 것으로 기억합니다. 생각처럼 명쾌하지 못하게, 기억나는 대로 더듬더듬 이야기했던, 그런 유쾌하지 못한 경험을 하게 되었네요. 역시 기억보다는 기록인가 봅니다. 그래서 이젠 제대로 정리하여 명쾌하게 이야기할 수 있도록 글로 남기고자 합니다.이 책을 통해 좋은 코..
2024.11.02 21:34 -
[Xcode / Swift] 빌드 시스템에 대한 이해 / 증분 빌드 / 병렬 처리 / Eager Linking / Incremental
이 글을 쓰게 된 이유.. 웅장해진다... [Architecture] Modular Architecture VS Clean Architecture어느날 문득 Modular Architecture와 Clean Architecture에 대한 생각을 하게 되었습니다. 모듈화나 클린이나 결국엔 개념적으로 레이어를 나누고 개발자들의 상황에 맞춰 선택적으로 사용할텐데, 둘은 어chanhhh.tistory.comModular Architecture와 Clean Architecture는 의존성 관리 방식에서 차이를 보입니다.Modular Architecture에서는 모듈 간 의존성이 명시적으로 설정됩니다. 즉, 하나의 모듈이 필요한 경우 다른 모듈에 의존성을 가지며, 이를 통해 기능별로 독립된 모듈들이 서로 필요한 부..
2024.10.29 19:12 -
[Architecture] The Composable Architecture(TCA)를 사용해 보기 앞서 고려해야할 점은 뭐가 있을까
들어가기 앞서...오늘은 SwiftUI에서 가장 인기있고 맛있다고 소문난 TCA를 경험해보려고 합니다. 아키텍쳐를 사용해보기 이전에 먼저 이 아키텍쳐는 어떤 이점이 있고, 어떤 점이 중점적으로 다뤄지고 있고 무슨 기저를 가지고 아키텍쳐를 구성했는지에 대해서 생각해보려고 합니다.혹시 잘못 이해하고 있거나 글에 잘못된 점이 있으면 피드백 부탁드리겠습니다. 🙇♂️더보기 GitHub - pointfreeco/swift-composable-architecture: A library for building applications in a consistent and understandable way,A library for building applications in a consistent and underst..
2024.11.07 05:02 -
[Architecture] Modular Architecture VS Clean Architecture
어느날 문득 Modular Architecture와 Clean Architecture에 대한 생각을 하게 되었습니다. 모듈화나 클린이나 결국엔 개념적으로 레이어를 나누고 개발자들의 상황에 맞춰 선택적으로 사용할텐데, 둘은 어떤 공통점이 있고, 어떤 차별화된 점이 있는지에 대해서 생각해 보려고 합니다.개념과 목적 Modular Architecture나 Clean Architecture나 모두 레이어를 분리하여 코드의 가독성을 높이는 구조를 갖고 있어서, 둘 다 코드 가독성 면에서는 비슷한 장점을 공유하고 있습니다. 그렇다면 각 접근이 iOS개발의 어떤 필요성을 충족하는지, 특히 협업과 코드베이스 관리에 얼마나 유리한지, 유연성과 유지보수성이 어떻게 앱 품질에 기여하는지에 대해서 생각해 보게 되었습니다.우선..
2024.09.18 23:55 -
[Clean Architecture, SwiftUI] SwiftUI를 위한 클린 아키텍처
SwiftUI를 위한 클린 아키텍처에 대한 고찰팀 프로젝트를 준비하며, SwiftUI에서의 클린 아키텍처에 대해 고민하게 되었습니다. SwiftUI 관련 아키텍처를 검색하던 중 가장 먼저 눈에 띈 아티클이 바로 "SwiftUI Clean Architecture"였습니다. 다행히도 이 아티클은 한국어 번역본도 제공하고 있어, SwiftUI의 클린 아키텍처에 대해 조금 더 깊이 이해할 수 있는 좋은 기회가 될 것 같아 천천히 읽어보았습니다. 이번 글에서는 아티클의 주요 내용을 요약하고, 제 개인적인 생각도 함께 나눠보고자 합니다.아래 링크는 해당 아티클의 한국어 번역본 링크입니다. SwiftUI를 위한 클린 아키텍처들어가기에 앞서gon125.github.ioUIKit과 SwiftUI, 그리고 아키텍처 패턴의..
2024.09.07 07:32 -
[Clean Architecture] Presentation(MVVM), Domain, Data
Clean Architecture and MVVM iOS에서 가장 유명한 Clean Layered Architecture and MVVM 클린 아키텍쳐에 대해서 얘기해 보려고 합니다. 여태까지 UIKit으로 진행한 프로젝트들은 거의 MVVM으로 진행 했었고 나름 이정도면 MVVM에 대해서 잘 알고 있다고 생각했었는데요. 그냥 우물안의 개구리였을 뿐이라는 것을 깨달았습니다. 여태까지 한 프로젝트들은 Presentation의 MVVM 까지 구현하고 VM에서 Business 로직을 실행하고 있었습니다. 도메인과 데이터는 Clean Layered가 아닌 그냥 제가 편한대로 구현하고 있었는데요. 이번에 개인 프로젝트를 진행하면서 정리를 해볼겸, 설명을 좀 쉽게 해서 이해해볼 겸 작성합니다.iOS 개발자라면..
2024.08.30 18:38 -
[MacOS, iOS] Cocoa Fundamentals Guide / 코코아 기본 사항
코코아란 무엇인가요?Cocoa는 OS X 운영 체제와 iOS를 위한 애플리케이션 환경입니다.iOS는 iPhone, iPad, iPod touch와 같은 멀티터치 기기에서 사용되는 운영 체제를 뜻합니다.객체 지향 소프트웨어 라이브러리, 런타임 시스템 및 통합 개발 환경으로 구성되어 있습니다.이 글에서는 이 정의를 확장하여 두 플랫폼에서 Cocoa의 목적, 기능 및 구성 요소에 대해 설명합니다.Cocoa 환경Cocoa는 OS X 및 iOS에서 실행되는 애플리케이션을 위한 런타임 환경을 제공하는 객체 지향 프레임워크의 집합입니다. Cocoa는 OS X을 위한 탁월한 응용 프로그램 환경이며 iOS를 위한 유일한 응용 프로그램 환경입니다. (Carbon은 OS X의 대체 환경이지만 기존 OS X 코드 기반을 지..
2024.05.01 23:23 -
[Github] Sponsor
스폰서 기능이 어떻게 이뤄져있는지 궁금해서, 그냥 한번 해봤습니다. 스폰했다고 자랑하라고 해서 블로그에 올립니다 😂Tuist는 iOS, macOS, tvOS, watchOS 프로젝트의 관리와 빌드를 자동화하는 오픈 소스 도구입니다. Xcode 프로젝트와 workspace 파일을 자동으로 생성해주고, 프로젝트 구성을 코드로 정의할 수 있게 하여 협업과 유지보수를 쉽게 할 수 있게 도와줍니다.너무 잘 사용하고 있어서 타겟을 이곳으로 정했습니다 ☺️그냥 결제하면됩니다. ㅋㅋ결제하면 스폰서에 이름을 띄워주고, 깃허브 프로필 밑에 스폰서링이라고 뱃지가 달립니다. 축포와 함께 옥토켓이 저를 반겨줍니다.
2024.10.10 18:05
-
삼성 2024년 하반기 신입사원 공채 후기
글을 작성해 두고 한 동안 올릴지 말지 고민하다가, 이 글 보고 도움이 되실 분들도 있으실 것 같아서 작성합니다.궁금하신 점 있으시거나 도움이 필요하신 분들은 편하게 연락주세요. 삼성 에스원 연구개발(SW)지난 삼성 하반기 공채에서 삼성 에스원 연구개발(SW) 직무에 지원했습니다.지원 동기는 무엇보다도 모바일 앱 개발에 자신 있기도 하고, CI/CD에 관심이 많아 클라우드(AWS) 환경에도 관심이 많고 AI기반 영상처리와 얼굴인식 알고리즘이 정말 재밌어 보이기도 해서였습니다.그리고 무엇보다 에스원이 서울에 있어서 그게 제일 끌려서 지원한 것도 있습니다. 😊 서류 후기우선 서류는 3문항이 나왔습니다.1. 입사동기 + 이후 계획2. 성장과정3. 사회이슈1번은 수행업무와 그에 따른 제 역량에 관해 연관 ..
-
[Clean Code] 독후감 및 정리 - 2
[Clean Code] 독후감 및 정리 - 1들어가기 앞서 (다시 읽기에 앞서)며칠 전 한 면접을 보게 되면서, "좋은 코드 가독성이라는 것을 어떻게 생각하세요 ?" 라는 질문을 받았습니다. 평소에 지키는 클린 코드라고 생각한 방법들(좋chanhhh.tistory.com지난 편 정리 및 결론 링크입니다.들어가기 앞서 (다시 읽기에 앞서) 이전에 1-3 장에 대해서 클린 코드를 읽고 주변의 프로그래머 지망생 동료와 책에 대한 얘기를 해봤습니다. 호불호가 많이 갈리는 책이다라고 얘기를 해주더라고요. 무조건적인 맹신은 지양하는 게 좋겠다는 뻔한 그런 얘기를 나눈 것 같습니다. 그래도 한 번쯤은 읽어서 좋은 인사이트를 가져가는 게 좋을 거 같다는 뻔한 얘기로 마무리되었습니다. 😊끊임없이 "왜"라는 질문을 문제..
-
TIL: Today I Learned
TIL은 Today I Learned입니다.'오늘 내가 배운 것'이라는 뜻입니다. 개발자들에게는 익숙한 단어지만, 처음 들어보시는 분들도 있을 것 같습니다.그동안 프로젝트하느라 바빠서.. 자격증 공부하느라 바빠서라는 변명으로 기록하는 일들을 미뤄온 것 같습니다. 무엇을 하고 있는지, 또 무엇을 하고 싶은지 점점 목적을 잃어가고 있다는 생각이 들기도 했습니다. 🤔그래서 이제는 기억보다는 기록을 위해서 TIL을 작성하자라는 마음이 생겼습니다. 요즘 하루에 하나씩 꾸준히 포스팅하고, 백준 문제를 매일 한 문제씩 푸는 것도 그렇고, 매일 꾸준히 공부하는 습관을 TIL을 통해서 차근차근 잘 쌓아가고 있습니다.결론적으로 제가 하고 있는 것을 제대로 보여줄 수 있는 기록이 필요하다는 생각이 들어서 TIL을 꾸준히 ..
-
[Clean Code] 독후감 및 정리 - 1
들어가기 앞서 (다시 읽기에 앞서)며칠 전 한 면접을 보게 되면서, "좋은 코드 가독성이라는 것을 어떻게 생각하세요 ?" 라는 질문을 받았습니다. 평소에 지키는 클린 코드라고 생각한 방법들(좋은 함수 명명법, 변수명, 보기 좋은 코드...등등) 만 주욱 나열하고 "네 뭐 그런 클린코드에 나온 방법들입니다." 라는 말로 그대로 끝난 경험이 있습니다. 🥲 사실 클린 코드 책을 읽은지 오래되기도 했고, 아마 이 책을 처음 접했던 날은 2020년쯤이었던 것으로 기억합니다. 생각처럼 명쾌하지 못하게, 기억나는 대로 더듬더듬 이야기했던, 그런 유쾌하지 못한 경험을 하게 되었네요. 역시 기억보다는 기록인가 봅니다. 그래서 이젠 제대로 정리하여 명쾌하게 이야기할 수 있도록 글로 남기고자 합니다.이 책을 통해 좋은 코..
-
멀티미디어콘텐츠제작전문가 필기 후기
Specialist-Multimedia Contents Producing 스페셜리스트 ㄷㄷ.. 간지 나 보인다..국가자격 종목별 상세정보 | Q-net국가자격 종목별 상세정보www.q-net.or.kr한국산업인력공단에서 시행하는 영상 편집 전문가 시험입니다. 사실 이런 건지 몰랐습니다. 아래 pdf 출제 기준에 HTML, CSS 이런 게 있길래 이런것도 멀티미디어콘텐츠로 껴주나 싶은 그런 국가공인자격증인 줄 알고 신청했습니다. 출제기준이 25년에는 변경되는 거 같습니다. 출제기준 자료실에서 찾아보세요.정보처리기사 준비하면서 필기시험이 겹치는 부분이 좀 있어서 디자인, 멀티미디어 쪽 공부를 추가로 더 해서 보게 되었는데, 합격해 버려서 멀콘전 실기를 보러 갑니다. 😂 정보처리기사 실기 준비한다고 2회에서 ..
-
iOS 와 Web FrontEnd 그리고 하이브리드앱에 대한 주관적인 생각
iOS, Web FrontEnd, 그리고 하이브리드 앱: 다양한 경험과 사용자 중심 설계저는 iOS 개발을 지망하고 있지만, 사실 특정 플랫폼이나 프레임워크에 얽매이지 않고 다양한 기술을 시도해 보고 있는 중입니다. iOS뿐만 아니라 Web FrontEnd 개발, 그리고 하이브리드 앱까지 경험해보면서 얻은 인사이트를 공유하고자 합니다.iOS 개발: 정교한 사용자 경험의 중심iOS는 제가 개발자로서 처음으로 진지하게 빠져든 플랫폼입니다. Apple 생태계의 매력은 명확합니다. 세련된 UI/UX, 강력한 하드웨어 통합, 그리고 사용자를 위한 세심한 기능들 덕분에 많은 사용자가 iOS를 사랑하고 있습니다. 저도 마찬가지로 사용자 중심의 정교한 설계가 iOS 개발의 핵심이라고 느꼈습니다.Swift와 UIKit,..
-
2023 회고 그리고 2024 계획
안녕하세요, 개발자(였던 것) 찬히히 입니다.2023년이 끝나고, 이제 2024년을 맞이하며 더 많은 노력을 기울일 예정입니다. 2023년 목표와 결과 취소선은 실패한 녀석들 입니다.앱 만들기 (배포하기!): macOS 클라이언트 앱 배포 성공! 아카이브 배포이긴 하지만, 그 과정까지 완료.협업 앱 만들기 (배포까지!): macOS에서 iOS로 마이그레이션 진행 중이며, 배포 자동화도 예정중에 있습니다.네트워크 공부: 네트워크뿐만 아니라 CS적 요소들을 함께 학습할 예정 입니다.42 집현전(도서관 서비스) 프론트엔드Swift: Object-C, SwiftUI, rxSwift 학습.Realm 학습.My Pod Library 성장: 작지만 꾸준히 진행.오픈소스 기여: 참여 계획 중.해커톤 참여: 완료..
-
[오래된 연장통] 진화심리학에 대한 가벼운 통찰
이 책은 ?이 책은 다윈의 렌즈라는 제목으로 연재한 칼럼을 기초로 하여 쓰여진 진화심리학에 관한 과학책입니다. (묵직한 진화심리학 책이 아닌 가볍고 흥미로운 주제로 쓰인 책입니다.)인간의 마음을 공구에, 인간 자체를 연장통으로 비유한 책입니다. 인간을 톱이나 망치, 드라이버처럼 전통적인 공구들만 들어 있는 오래된 연장통이라고 빗대며, 오래된 연장통이기 때문에 가끔씩 문제를 일으키키도 한다고 설명하고있습니다.이 책은 인간의 심리와 행동을 오래된 연장에 비유하여 설명하면서, 본능과 적응의 관계를 파헤칩니다. 전통적인 공구처럼 우리의 마음은 특정한 환경에서 오랜 시간 동안 진화해 왔고, 그 과정에서 자연선택은 심리적 적응을 만들어냈습니다. 책에서는 이러한 심리적 적응이 오늘날에도 여전히 우리의 행동을 좌우하고..
-
수병아... 니가 밉다... (미지의 공간 탈출 c++)
삼성 SW 역량테스트 2024 하반기 오전 1번 문제 복기입니다. 문제는 아래 링크에서 보실 수 있습니다. 코드트리 | 코딩테스트 준비를 위한 알고리즘 정석국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.www.codetree.ai 다시는 이런 문제를 틀리지 않기 위해 복기 하였습니다... 🙃빡센 구현 문제 입니다. 산 부분을 어떻게 처리하느냐가 핵심입니다. 더보기 #include #include #include #include using namespace std;#define FASTIO ios_base::sync_with_stdio(0), cin.tie(0)#define MAXN 20#define MAXM 20#define..
-
[Xcode Cloud] 토이프로젝트에 CI / CD 적용하기
현재 진행하고 있는 토이프로젝트에 Xcode Cloud를 적용해 보려고 합니다.이번 포스팅에서는 Xcode Cloud를 하나씩 차근차근 진행하는 것에 대해 다룹니다.이전에 진행한 Tuist + Fastlane + Github Action을 Xcode에서 진행하는 거라고 생각하시면 됩니다. command +9를 누르거나 좌측 상단에 있는 report navigator 버튼을 선택 합니다.선택하게 되면 Xcode Cloud 설명이 나오고 아래 Get Started 버튼이 나오는데 이걸 선택해줍니다.쭉쭉 Next를 선택하여 지나가면, GitHub와 Xcode Cloud를 연결하라고 하는데, 연결해주면 됩니다. Xcode Cloud 범위를 해당하는 레포로만 잡아줍니다. 나중에 필요하다면 깃허브에서 변경해주면 ..
-
[Tuist] TCA 프레임워크 적용하기
Tuist에서 TCA를 적용하기 위해서 작성했습니다.이전에 만들어두기만 Tuist로 만들어 두기만 하고 방치되었던 repo를 하나 꺼내왔습니다.tuist@4.15때 만들어진 레포입니다. 아래와 같이 적용시키고, tuist install을 실행하자 // Tuist/Package.swift// swift-tools-version: 5.9import PackageDescription#if TUIST import ProjectDescription let packageSettings = PackageSettings( productTypes: ["ComposableArchitecture": .framework] )#endiflet package = Package( name: "Us..
-
[Architecture] The Composable Architecture(TCA)를 사용해 보기 앞서 고려해야할 점은 뭐가 있을까
들어가기 앞서...오늘은 SwiftUI에서 가장 인기있고 맛있다고 소문난 TCA를 경험해보려고 합니다. 아키텍쳐를 사용해보기 이전에 먼저 이 아키텍쳐는 어떤 이점이 있고, 어떤 점이 중점적으로 다뤄지고 있고 무슨 기저를 가지고 아키텍쳐를 구성했는지에 대해서 생각해보려고 합니다.혹시 잘못 이해하고 있거나 글에 잘못된 점이 있으면 피드백 부탁드리겠습니다. 🙇♂️더보기 GitHub - pointfreeco/swift-composable-architecture: A library for building applications in a consistent and understandable way,A library for building applications in a consistent and underst..
-
[Developer] 앱 사라짐 / 멤버십 만료 / 멤버십 갱신
2024년 11월 3일경앱스토어를 확인해 봤는데, 출시했던 앱인 42Box앱이 없어졌습니다. 사실 멤버십 갱신일이 조금 지났는데, 일부러 미루고 있었거든요. 오래된 앱들을 보면 마지막 업데이트가 7년, 8년 전인 그런 앱들이 있는 것을 봤었고, 옛날 게임 앱 중에서는 13년이나 지난 앱을 봤던 기억이 있거든요. 사실 얼마나 지나야 없어지는지 궁금했던 상황이었습니다. 결론은 두 가지입니다. 바로 적자면, 첫 째. 멤버십이 만료되고 한 달 정도 지나면 앱스토어에서 앱이 내려가게 됩니다. 둘째. 멤버십이 남아있으면 특별한 경우를 제외하고 앱이 사라지지 않습니다. 사실 없어졌다고 해서 완전히 앱스토어에서 삭제된 것은 아닙니다. 소프트 딜리트된 상태로 보입니다. (검색 안됨 / URL로 직접 접근 불가) 멤버십..
-
[Xcode / Swift] 빌드 시스템에 대한 이해 / 증분 빌드 / 병렬 처리 / Eager Linking / Incremental
이 글을 쓰게 된 이유.. 웅장해진다... [Architecture] Modular Architecture VS Clean Architecture어느날 문득 Modular Architecture와 Clean Architecture에 대한 생각을 하게 되었습니다. 모듈화나 클린이나 결국엔 개념적으로 레이어를 나누고 개발자들의 상황에 맞춰 선택적으로 사용할텐데, 둘은 어chanhhh.tistory.comModular Architecture와 Clean Architecture는 의존성 관리 방식에서 차이를 보입니다.Modular Architecture에서는 모듈 간 의존성이 명시적으로 설정됩니다. 즉, 하나의 모듈이 필요한 경우 다른 모듈에 의존성을 가지며, 이를 통해 기능별로 독립된 모듈들이 서로 필요한 부..
-
[Github] Sponsor
스폰서 기능이 어떻게 이뤄져있는지 궁금해서, 그냥 한번 해봤습니다. 스폰했다고 자랑하라고 해서 블로그에 올립니다 😂Tuist는 iOS, macOS, tvOS, watchOS 프로젝트의 관리와 빌드를 자동화하는 오픈 소스 도구입니다. Xcode 프로젝트와 workspace 파일을 자동으로 생성해주고, 프로젝트 구성을 코드로 정의할 수 있게 하여 협업과 유지보수를 쉽게 할 수 있게 도와줍니다.너무 잘 사용하고 있어서 타겟을 이곳으로 정했습니다 ☺️그냥 결제하면됩니다. ㅋㅋ결제하면 스폰서에 이름을 띄워주고, 깃허브 프로필 밑에 스폰서링이라고 뱃지가 달립니다. 축포와 함께 옥토켓이 저를 반겨줍니다.
-
[Architecture] Modular Architecture VS Clean Architecture
어느날 문득 Modular Architecture와 Clean Architecture에 대한 생각을 하게 되었습니다. 모듈화나 클린이나 결국엔 개념적으로 레이어를 나누고 개발자들의 상황에 맞춰 선택적으로 사용할텐데, 둘은 어떤 공통점이 있고, 어떤 차별화된 점이 있는지에 대해서 생각해 보려고 합니다.개념과 목적 Modular Architecture나 Clean Architecture나 모두 레이어를 분리하여 코드의 가독성을 높이는 구조를 갖고 있어서, 둘 다 코드 가독성 면에서는 비슷한 장점을 공유하고 있습니다. 그렇다면 각 접근이 iOS개발의 어떤 필요성을 충족하는지, 특히 협업과 코드베이스 관리에 얼마나 유리한지, 유연성과 유지보수성이 어떻게 앱 품질에 기여하는지에 대해서 생각해 보게 되었습니다.우선..
-
[Clean Architecture, SwiftUI] SwiftUI를 위한 클린 아키텍처
SwiftUI를 위한 클린 아키텍처에 대한 고찰팀 프로젝트를 준비하며, SwiftUI에서의 클린 아키텍처에 대해 고민하게 되었습니다. SwiftUI 관련 아키텍처를 검색하던 중 가장 먼저 눈에 띈 아티클이 바로 "SwiftUI Clean Architecture"였습니다. 다행히도 이 아티클은 한국어 번역본도 제공하고 있어, SwiftUI의 클린 아키텍처에 대해 조금 더 깊이 이해할 수 있는 좋은 기회가 될 것 같아 천천히 읽어보았습니다. 이번 글에서는 아티클의 주요 내용을 요약하고, 제 개인적인 생각도 함께 나눠보고자 합니다.아래 링크는 해당 아티클의 한국어 번역본 링크입니다. SwiftUI를 위한 클린 아키텍처들어가기에 앞서gon125.github.ioUIKit과 SwiftUI, 그리고 아키텍처 패턴의..
-
[Framework] PHPhotoLibrary.shared().presentLimitedLibraryPicker(from: self)
PHPhotoLibrary.shared().presentLimitedLibraryPicker(from: self) 터짐 현상이 에러에서 VC가 문제인지. coordinator패턴이 문제인지. 계속 삽질하다가 찾아냈습니다. 🥲iOS 17 버전에서 오류라고 합니다.16버전에서는 그냥 import로 된다고...*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[PHPhotoLibrary presentLimitedLibraryPickerFromViewController:]: unrecognized selector sent to instance 0x10300fc60' 에러 해결 방법. Targets > Ge..
-
[Clean Architecture] Presentation(MVVM), Domain, Data
Clean Architecture and MVVM iOS에서 가장 유명한 Clean Layered Architecture and MVVM 클린 아키텍쳐에 대해서 얘기해 보려고 합니다. 여태까지 UIKit으로 진행한 프로젝트들은 거의 MVVM으로 진행 했었고 나름 이정도면 MVVM에 대해서 잘 알고 있다고 생각했었는데요. 그냥 우물안의 개구리였을 뿐이라는 것을 깨달았습니다. 여태까지 한 프로젝트들은 Presentation의 MVVM 까지 구현하고 VM에서 Business 로직을 실행하고 있었습니다. 도메인과 데이터는 Clean Layered가 아닌 그냥 제가 편한대로 구현하고 있었는데요. 이번에 개인 프로젝트를 진행하면서 정리를 해볼겸, 설명을 좀 쉽게 해서 이해해볼 겸 작성합니다.iOS 개발자라면..
-
[Architecture] 프로젝트에 Modular Architecture를 적용하는 이유
https://github.com/chanheki/swifty-proteins/가장 큰 이유는 프로젝트에 모듈화를 적용해보고 싶었습니다.기존에 있던 프로젝트에 모듈화를 해보는 것도 좋겠지만, 그렇게 하는게 더 접근이 더 어려울것 같아서 처음부터 모듈화된 프로젝트를 만들어서 개발해보고 싶었습니다. 모듈화의 큰 장점인 수평적 확장이 가능하다는 점과 단위 테스트의 용이성을 경험해보고 싶어서 개발 방향을 잡았습니다.비교 요약특성모듈화모놀리식독립성높은 독립성, 모듈별로 독립적인 테스트 가능낮은 독립성, 모든 코드가 하나의 코드베이스에 있음재사용성높은 재사용성, 모듈별로 재사용 가능한 테스트낮은 재사용성, 코드베이스 전체에 적용되는 테스트설정 및 관리 복잡성높은 설정 및 관리 복잡성낮은 설정 및 관리 복잡성의존성 ..
-
[Architecture] Matching MVVM architecture in a modular architecture
Cocoa-MVC에 이어 MVVM 아키텍쳐 적용 방식에 대한 정리입니다. [Architecture] Matching Cocoa-MVC architecture in a modular architecturehttps://github.com/chanheki/swifty-proteins현재는 pirvate 이지만 완성 후 public으로 공개 예정 레포지토리입니다.위 프로젝트에서 Modular architecture를 적용하여 설계, 구현하고 있습니다.레이어별로 모듈화를chanhhh.tistory.com MVVM을 Modular architecture에 적용시 어떤 부분이 어떤 layer에 들어가는지 정리하기 위해서 작성한 글입니다.모듈러 아키텍처 설계App Layer앱의 진입점 및 전체적인 앱 라이프사이클 관..
-
[Architecture] Matching Cocoa-MVC architecture in a modular architecture
https://github.com/chanheki/swifty-proteins현재는 pirvate 이지만 완성 후 public으로 공개 예정 레포지토리입니다.위 프로젝트에서 Modular architecture를 적용하여 설계, 구현하고 있습니다.레이어별로 모듈화를 나누고 Cocoa-MVC 패턴을 적용하기 위해 정리한 내용입니다. 모듈러 아키텍처 설계App Layer앱의 진입점 및 전체적인 앱 라이프사이클 관리주요 앱 설정 및 초기화 코드Feature Layer사용자 인터페이스 및 사용자의 액션을 처리뷰(View) 및 뷰와 관련된 로직각 기능별로 독립적인 UI 및 로직 (AuthFeature, ProfileFeature 등)Domain Layer비즈니스 로직과 애플리케이션의 도메인 모델엔터티, 유스케이스..
-
[iOS, macOS layer] libSystem / CFNetwork / URLSession / 네트워크로 보는 Core OS, Core Services
Cocoa Fundamentals를 정독하던 도중 CoresOS와 CoreFoundation에 대한 궁금증이 생겨서 사용해보고 이해를 돕기위해 이 글을 작성합니다. 아래 링크는 해당 내용을 번역, 알아보기 쉽게 작성한 블로그 글입니다. [MacOS, iOS] Cocoa Fundamentals Guide / 코코아 기본 사항 chanhhh.tistory.com Cocoa framework의 계층은 위와같이 나뉠 수 있습니다.그 중 Core OS 레벨에는 커널, 파일 시스템, 네트워킹 인프라, 보안, 전원 관리 및 여러 장치 드라이버가 포함되어 있습니다. 또한 POSIX/BSD 4.4/C99 API 사양을 지원하고 많은 서비스에 대한 시스템 수준 API를 포함하는 libSystem 라이브러리도 있습니다.l..
-
[Objective-C] 런타임에서 동작하는 과정.
Objective-C는 동적 언어의 특성을 가지고 있어 런타임 시에 많은 동작들이 수행됩니다. 이러한 동적 특성은 런타임 시 객체의 타입을 확인하거나 변경할 수 있게 하며, 메소드를 동적으로 호출하거나 교체하는 것도 가능하게 합니다.Objective-C의 런타임 시스템은 아래와 같은 과정을 거치게됩니다.1. 클래스와 객체의 동적 생성Objective-C에서는 런타임 시 클래스를 생성하고 수정할 수 있습니다. 예를 들어, `NSClassFromString()` 함수를 사용하여 문자열 이름으로 클래스의 인스턴스를 생성할 수 있습니다. 또한, 클래스에 새로운 메소드를 추가하거나 기존 메소드를 교체하는 것도 가능합니다.2. 메소드 호출의 동적 결정Objective-C 메소드 호출은 컴파일 타임이 아닌 런타임에 ..
-
6987 c++ - 월드컵
어떻게 풀까 고민하다가. 데이터가 적어서 그냥 조합으로 풀었습니다. [C++] 순열, 조합표준 라이브러리로는 next_permutaion 과 prev_permutaion 이 있습니다.next_permutaion : "오름차순의 배열"을 기반prev_permutaion : "내림차순의 배열"을 기반#include using namespace std;template void pa(t T) { for (auto p : Tchanhhh.tistory.com가능한 모든 조합을 combi로 찾아서 matches 를 만들고, 해당 matches부터 재귀적으로 찾아 모든 게임이 끝났을때 result의 승,무,패가 0이 아닌경우를 찾아서 반환하는 경우로 처리하였습니다. #include #include using nam..
-
10827 c++ - a^b
큰 수 string 계산 c++ 버전. cmath 함수인 pow를 사용하지 못하는 이유는 부동소수점 연산을 사용하여 근사값을 계산하기 때문입니다.부동소수점은 IEEE 754 표준을 따르며, C++의 double 타입은 약 15~17자리 십진수 정밀도를 제공합니다.테스트 케이스를 보면 소수점들이 들어가 있는데 이를 부동소수점으로 저장하면 이진수로 근사 처리되어 미세한 차이가 발생합니다.부동소수점 연산은 각 단계에서 오차를 누적시킵니다. 거듭제곱 연산은 반복 곱셈을 포함하므로, 결과에 포함된 오차가 더 커집니다.#include int main(void) { double s; double p; cin >> s >> p; cout.precision(20); cout 그래서 해당 문제에서는 고정 소수점..
-
9414 c++ - 프로그래밍 대회 전용 부지
간단한 정렬 문제이다. (그리디)pow의 헤더를 포함 안해줘서 컴파일 에러가 났다. cmath를 이용하면 된다.두번째 틀린 이유는 sum의 오버플로우 이슈 때문이었다.long long으로 고쳐서 제출하니 통과 되었다.https://www.acmicpc.net/problem/9414#include #include #include #include #define INIT_MONEY 5 * 1000000#define FASTIO ios::sync_with_stdio(0), cin.tie(0)using namespace std;int main() { FASTIO; int t; cin >> t; for (int i = 0; i p; while (1) { cin >> m; if (m ..
-
7453 c++ - 합이 0인 네 정수
이분탐색 문제입니다. 처음엔 해시로 접근했었습니다. 더보기해시 적용첫 풀이. -> 시간초과map을 사용해서 AB의 합을 먼저 구하고, 이후 CD의 합으로 unordered_map으로 접근 O(1) -> N^2 + N^2의 시간으로 풀 수 있을 거라 판단 최악의 경우 4000^2 + 4000^2으로 32,000,000번의 연산으로 충분히 풀 수 있을 거라 생각했습니다.시간초과의 이유 : 캐시히트의 시간까지 고려가 되어야함.더보기#include #include #include #define FASTIO ios::sync_with_stdio(0), cin.tie(0)using namespace std;int main() { FASTIO; int n; cin >> n; vector A(n), B(n), ..
-
1655 c++ - 가운데를 말해요
우선순위 큐를 사용하는 문제.처음에는 우선순위 큐, vector의 정렬 중간값을 사용해서 풀이를 진행했는데, 시간초과가 났습니다.그래서 우선순위 큐 두개를 사용하여 최대힙, 최소힙을 사용하여 풀었습니다.더보기 더보기vector v; for (int i = 0; i > t; v.push_back(t); sort(v.begin(), v.end(), less()); cout 더보기#include #include #define FASTIO ios::sync_with_stdio(0), cin.tie(0)using namespace std;int n;int main() { FASTIO; cin >> n; priority_queue, greater> pq; queue q; for (int ..
-
30469 c++ - 호반우가 학교에 지각한 이유 2
소수찾기 문제의 심화버전이다. 알고리즘 분류는 애드 혹이다.체를 사용하여 최적해를 구할 수 있도록 하였다. 더보기 c++ 코드#include #include #include using namespace std;bool prime[100];void savePrime() { memset(prime, true, sizeof(prime)); prime[0] = prime[1] = false; for (int i = 2; i = 10 && c & number) { number[0] = a / 10; number[1] = a % 10; for (int i = 2; i > a >> b >> n; if (!prime[a] || !prime[b]) { cout number(n, 0); if (fin..
-
25511 c++ - 값이 k인 트리 노드의 깊이
문제 제목이나 분류를 보면 트리로 되어있지만, 굳이 트리로 풀지 않아도 됩니다.결국 깊이를 찾는 문제이므로, 부모의 정점을 기억하여 0으로 고정되어있는 root를 찾아서 거슬러 올라가면 찾을 수 있습니다.기본적인 그래프 문제. 트리로 풀려다가 이진 트리가 아니면 부모의 인덱스로 찾기가 어려워질것 같아서 부모만 잡아서 풀었습니다. 자료구조를 편협하게 정해서 "무조건 이걸로 풀어야해"하면서 문제에 덤비게 되면 눈 뜬 장님이 되어버리는 경우가 생기는 것 같습니다. 이런 문제도 그렇고 bfs도 그렇고.. 그래서 좀 시각을 넓게 보고 이게 '확실한가 ?', '이게 최적인가 ?' 하는 의심을 계속해서 해보고 더이상 의심이 들지 않을때 문제를 풀어내는 습관을 들이는 중입니다.뭐 많이 의심해도 그게 잘못된거면, 아직은..
-
21735 c++ - 눈덩이 굴리기
백트래킹 문제입니다. 또는 DP로도 풀 수 있습니다. [Swift] BackTracking / 백트래킹 / 퇴각검색BackTracking / 백트래킹 / 퇴각검색 여러 후보 해 중에서 특정 조건을 충족시키는 모든 해를 찾는 알고리즘. 해를 찾는 도중 막히면 돌아가 다시 해를 찾아간다. 1. 해를 찾아가는 과정은 '루트'에서chanhhh.tistory.com [종만북] Dynamic Programming / DP / 동적 계획법Algorithmic Problem Solving Strategies 개인적으로 읽고 정리한 요약입니다. 아래 링크에 문제 풀이 예제가 있습니다. GitHub - chanheki/AlgorithmicProblemSolvingStrategies: Algorithm Book Stu..
-
2623 c++ - 음악프로그램
위상정렬을 사용해서 풀었습니다. 처음에는 조금 헤맸습니다. 뒤에 나오는 값들을 들고있게 만들어야 하나 해서, reverse로 뒤집어 보기도 했는데 그냥 바로 뒤에 있는 값만 들고 있으면 된다는 사실을 깨닫고 풀었습니다. [그래프/정렬/유향] 위상정렬 / Topological Sorting위상정렬 / Topological Sorting 유향 비순환 그래프(Directed Acyclic Graph, DAG) 에서 각 노드들을 선형 순서로 나열하는 방법입니다. 여기서 유향 비순환 그래프란, 방향이 있는 그래프 중에 사이클이 없chanhhh.tistory.com 문제보기 #include #include #include #include #include #define FASTIO ios::sync_with_stdi..
-
2239 c++ - 스도쿠
간단한 백트래킹 문제이다. queue를 사용해서 0의 좌표값들을 저장해서 사용했는데, 이런식으로는 처음 사용해봐서 애를 좀 먹었다. /* ************************************************************************** *//* *//* ::: ::: ::: *//* Problem Number: 2239 :+: :+: :+: *//* ..
-
1005 c++ - ACM Craft
위상정렬을 사용하면 쉽게 풀 수 있습니다. [그래프/정렬/유향] 위상정렬 / Topological Sorting위상정렬 / Topological Sorting 유향 비순환 그래프(Directed Acyclic Graph, DAG) 에서 각 노드들을 선형 순서로 나열하는 방법입니다. 여기서 유향 비순환 그래프란, 방향이 있는 그래프 중에 사이클이 없chanhhh.tistory.com1516번 문제와 거의 동일한 문제. 단 w의 값을 출력해주면 됩니다.#include #include #include #define fastio ios::sync_with_stdio(0), cin.tie(0)using namespace std;int main() { fastio; int t; cin >> t; for (i..
-
5619 c++ - 세 번째
세번째 작은 수 찾는 프로그램. 우선 처음 접근을 next_permutation을 통해 찾으려고 했는데, 해당 함수는 1,1,1 과 같은 중복된 숫자에 대해서 순열을 찾지 않는다는 것을 깨달았습니다. 이는 모든 요소가 동일하기 때문에 사전 순으로 더 이상의 다른 순열이 존재할 수 없기 때문입니다. int i = 0; do { if (i == 2) { cout 그래서 dfs로 변경해서 풀었는데, 갯수가 10^8개가 되면서 dfs로 전부 찾으려고 하니까 시간 초과가 났다.생각해보니, 가장 작은 수 4개만 찾으면 세번째로 작은 수를 찾을 수 있을거라 판단하고 코드를 작성하여 해결했다. 정답 코드.#include #include #include #define fastio ios::sync_..
-
26072 c++ - 곰곰이와 시소
이분탐색으로 풀었습니다. 중간에 입실론 오차범위 때문인지 오답이 되고 res의 범위를 탐색하는 과정에서 res0으로 걸어서 시간초과에 빠지게 된 경우도 생겨서 double형의 범위나 이분탐색의 무한루프에 대해서 다시 한번 생각하는 문제가 되었습니다.#include #include #include #define fastio ios::sync_with_stdio(0), cin.tie(0)using namespace std;int n;double l;int main() { fastio; cin >> n >> l; vector w(n); vector x(n); for (int i = 0; i > x[i]; for (int i = 0; i > w[i]; double s = 0.0, e = l, mi..
-
11052 c++ - 카드 구매하기
DP문제입니다. 헷갈리는 흐름을 정리하기 위해서 글을 씁니다.dp[i - j]는 문제를 이해하는 데 매우 중요한 부분입니다. 이 부분을 명확히 이해하는 것이 문제 해결의 핵심입니다.dp[i - j]가 의미하는 것dp[i]는 i개의 카드를 구매할 때 지불할 수 있는 최대 금액입니다. 그렇다면, dp[i - j]는 i - j개의 카드를 구매할 때 지불할 수 있는 최대 금액을 의미합니다.다시 말해서, 이미 i - j개의 카드를 최대로 구매한 상태에서 j개의 카드가 들어있는 카드팩을 추가로 구매했을 때의 최댓값을 계산하는 것입니다.구체적인 예시로 살펴봅시다:만약 i = 4, 즉 4개의 카드를 구매하려고 한다면, 우리는 다음과 같이 생각할 수 있습니다:j = 1일 경우:dp[4 - 1] = dp[3]: 이미 3개..
-
17069 c++ - 파이프 옮기기 2
17070번. 파이프 옮기기 1 과 같은 문제이지만 N(3 ≤ N ≤ 32)의 범위가 굉장히 넓기 때문에 dp를 적용해야만 풀 수 있습니다. + int형을 return값으로 가지게 되면 오버플로우가 나므로 ll을 사용하여 풀어야 합니다.완전탐색으로 풀었지만, 시간초과가 나게 되어서 dp에 대한 고민을 많이 해볼 수 있는 문제였습니다.#include #include using namespace std;using ll = long long;#define fastio ios::sync_with_stdio(0), cin.tie(0)ll n;ll dx[] = {1, 1, 0};ll dy[] = {0, 1, 1};ll dfs(ll y, ll x, ll dir, vector> &b, vector>> &v..
-
1644 c++ - 소수의 연속합
자연수 n을 연속된 소수의 합으로 나타낼 수 있는 경우의 수를 출력한다.여기에서 연속된 소수의 합이라고 해서 처음 접근법을 에라토스테네스의 체로 소수를 거르고, 소수들의 배열을 만들어서 누적합을 만드는 식으로 진행하였다. 에라토스테네스의 체의 수행시간은 O(nloglogn)이고 누적합 탐색 O(n^2)으로 시간초과에 걸렸다.시간초과 누적합더보기#include #include using namespace std;int n;int pn[4000001];int conPn[4000001];int sumPn[4000001] = {0};int primeNumberSieve() { for (int i = 2; i > n; int count = 0; int sumPnSize = 0; sumPnSize = pri..