캐플 리팩토링 세 번째 이야기 - 트러블 슈팅
·
iOS
애플 디벨로퍼 아카데미에서 진행한 프로젝트, 캐플 Qapple 리팩토링 작업의 세 번째 이야기입니다.캐플은 애플 디벨로퍼 아카데미 @POSTECH 3기, TEAM QAPPLE에서 시작한 프로젝트로아카데미 러너들과 익명으로 소통할 수 있는 커뮤니티 서비스입니다! 🍎 AppStore 다운로드하기 방향성 설정, 프로젝트 세팅까지 모두 마쳤습니다. 이제는 실제 리팩토링을 진행하며 마주쳤던 다양한 트러블 슈팅을 정리해봅니다. (역시나 대개 TCA 관련 트러블 슈팅이었습니다 ㅎㅎㅎ,,,,,) 1. Navigation & TabBar 로직 구현하기TCA에서 네비게이션 로직을 구현하는 것은 튜토리얼에서 어느정도 설명이 되었기에 크게 어렵지 않을 것(?)이라 생각했습니다. 하지만 늘 그렇듯 캐플 앱의 네비게이션 + 탭..
ScrollView 리프레쉬 했을 때 화면이 멈추는 현상 해결하기
·
iOS
🤨 문제 정의캐플 프로젝트 진행 중 다른 ScrollView는 문제가 없었지만 게시판 화면의 ScrollView에서 리프레쉬를 하니 로딩이 멈춰버리는 현상이 발생해 버렸습니다,,! 딱히 로직이 다른 것도 없고 로딩 화면도 같은 컴포넌트를 사용하고 있는데 어떤 부분이 문제일까요,, 🪓 삽질 기록1. GeometryReader 문제?GeometryReader를 사용해 View를 그릴 때 렌더링 문제를 마주했었던 경험이 있었기 때문에 이 부분을 제거해봤지만 결과는 똑같았습니다.(GeometryReader도 언젠가 제대로 이해하는 날이 오기를!)GeometryReader { proxy in // 평소에 얘가 문제가 많던데,,? ZStack { BulletinBoardContentView(s..
Array / Set / Dictionary Swift의 컬렉션 알아보기
·
iOS
Array, Set, Dictionary의 차이점을 분명 알고 있긴 하지만, 누군가에게 설명하라고 했을 때 버벅거리게 되는 것 같습니다. 이는 개념을 더 명확히 인지해야 한다는 뜻이기도 하기에, 아주 간단히 컬렉션 타입을 살펴보고 한 문장으로 정리해 보겠습니다. Array 배열An ordered, random-access collection.순서가 있고 무작위로 접근 가능한 컬렉션0부터 자동으로 순서가 지정되는데 이를 인덱스라고 합니다.순서가 있기 때문에 Array의 데이터는 중복이 가능합니다.* 순서가 중요하거나 인덱스로 접근해야 할 때! Set 집합An unordered collection of unique elements.순서가 없는 고유한 요소들의 컬렉션중복이 불가능합니다.Hashable 프로토콜..
꾸준히 운동하기
·
꾸준히 글쓰기
나는 헬스를 별로 좋아하지 않는다.무게를 올리고 몸을 키워가는 것 자체에 큰 관심이 없기 때문인 것 같기도 하다. 그래도 누군가가 얘기를 할 때도, 책에서도 늘 운동은 중요하다고 한다.체력의 부족함을 날이 갈수록 느끼는 요즘,운동을 좋아하지 않는다고 그만둬버릴 수는 없는 것이다. 이제 열흘 정도 꾸준히 운동했는데 역시나 당연하게도어떤 변화가 있는지 실감하긴 어려운 것 같다. 그래도 한 가지 확실한 것은 기분은 맑아진다.잡생각이 없어지고 온전히 내게 집중할 수 있는 시간이 생긴다.그것만으로도 좋은 시작점이지 않을까 생각한다.
마음 속 원숭이
·
꾸준히 글쓰기
요즘 계속 집에 있어서 그런가 규칙적인 듯 규칙적이지 않은 삶을 살고 있다.10시에 일어나 운동을 가고, 점심을 먹은 후 저녁까지 개발 공부를 한다. 어느정도 정해진 양을 끝내면 나를 위한 보상을 한다.민톨이와 놀거나, 게임을 하거나, 넷플릭스를 보는 등 말이다.마음 속 작은 원숭이를 달래는 일을 하는 것은 꼭 필요하다고 생각하지만,마음 한구석은 늘 불편한 것 같다. 내 목표를 달성하려면 원숭이를 달래는 일 또한 줄여나가야하는 것은 아닌지 고민이 된다.
책임과 역할, 비슷한 듯 다른 두 개념
·
CS
비슷한 듯 다른 두 개념 시리즈(?)의 두 번째 파트는 책임과 역할입니다. 객체지향 프로그래밍에서 자주 등장하는 두 개념은, 혼용해서 사용하기 쉽습니다.(일단 저부터) 이를 바로 잡아보려 진짜 의미를 찾아보겠습니다. 책임 Responsibility책임이란 객체에 의해 정의되는 응집도 있는 행위의 집합으로, 객체가 유지해야 하는 정보와 수행할 수 있는 행동에 대해 개략적으로 서술한 문장이다. 즉, 객체의 책임은 객체가 '무엇을 알고 있는가'와 '무엇을 할 수 있는가'로 구성된다. 여기서 객체가 무엇을 알고 있는가는 데이터로, 무엇을 할 수 있는가는 함수로 치환할 수 있습니다. 결제 서비스를 예시로 들어보겠습니다. 결제를 위해선 사용자 정보와 금액 정보(데이터), 실제로 결제를 수행할 행동(함수)이 필요합니..
추상화와 일반화, 비슷한듯 다른 두 개념
·
CS
추상화와 일반화. 개발 공부를 하다 보면 꽤나 많이 듣게 되는 단어입니다. 저 또한 여러 논의를 하며 자연스럽게 두 단어를 이야기하곤 했는데 어느 날 두 개념의 차이점에 대한 질문을 받은 적이 있습니다. 한참을 고민하다 내린 결론은 그동안 혼용해서 사용하고 있었구나라는 깨달음과 이를 깊이 고민해보지 못한 반성이었습니다. 비슷하지만 분명히 다른 추상화와 일반화에 대해 정리해보려 합니다. 추상화 Abstraction컴퓨터 과학에서 추상화는 복잡한 자료, 모듈, 시스템 등으로부터 핵심적인 개념 또는 기능을 간추려 내는 것을 말한다. 이전에 객체지향의 사실과 오해를 읽었을 때의 구절이 다시 떠올랐습니다. "복잡성의 총체인 현실이라는 괴물을 그대로 수용하기에 인간이 지닌 인지 능력과 저장 공간은 너무나도 보잘것없..
캐플 리팩토링 두 번째 이야기 - 프로젝트 세팅하기
·
iOS
애플 디벨로퍼 아카데미에서 진행한 프로젝트, 캐플 Qapple 리팩토링 작업의 두 번째 이야기입니다.캐플은 애플 디벨로퍼 아카데미 @POSTECH 3기, TEAM QAPPLE에서 시작한 프로젝트로아카데미 러너들과 익명으로 소통할 수 있는 커뮤니티 서비스입니다! 🍎 AppStore 다운로드하기 첫 번째 이야기에서는 리팩토링의 방향성을 설정했습니다. 어떤 의도로 리팩토링하는지, 어떤 합의를 볼 것인지, 그 합의의 방법인 아키텍처는 어떻게 사용할지에 대해서 말이죠! 이제는 구체적으로 적용해나가기 위해 초기 세팅이 필요했습니다. TCA 기본 세팅합의에서 가장 크고 중요한 부분은 단연코 TCA였습니다. 기존 MVVM 아키텍처로 처리하던 방식과 크게 달랐기 때문에 논의 없이 프로젝트를 진행한다면 큰 혼란을 초래할..
구조체로 싱글톤 만들기?
·
iOS
iOS 공부를 시작한 지 얼마 안 된 시절, 개인 프로젝트를 진행하며 싱글톤이 동작하지 않는 문제를 경험한 적 있습니다. 그때의 기억을 떠올려 비슷하게 코드를 작성해 보면 아래와 같았습니다.struct Singleton { static var shared = Singleton() private init() {} var name = "민톨"}let singleton = Singleton.sharedprint("내 이름은 " + singleton.name)Singleton.shared.name = "한톨"print("내 이름은 " + singleton.name) 싱글톤 패턴을 이용할 때 우리는 '하나의 객체'를 떠올립니다. 타입 프로퍼티로 생성된 shared 객체를 전역적으로 접근 +..
캐플 리팩토링 첫 번째 이야기 - 방향성 설정하기
·
iOS
애플 디벨로퍼 아카데미에서 진행한 프로젝트, 캐플 Qapple의 리팩토링 작업이 시작됐습니다.캐플은 애플 디벨로퍼 아카데미 @POSTECH 3기, TEAM QAPPLE에서 시작한 프로젝트로아카데미 러너들과 익명으로 소통할 수 있는 커뮤니티 서비스입니다! 🍎 AppStore 다운로드하기 1년 가까이 진행하면서 쌓여온 코드는 문제점이 많았습니다. 하지만 신규 기능 추가(게시판, 댓글 등...)에 항상 뒷전이 되어 미루다시피 한 기술 부채는 이제는 너무나 늘어나버렸죠,,! 3기가 마무리되고 4기의 시작을 앞둔 지금이 절호의 기회라고 판단해 시즌2에 새롭게 합류한 멤버(시몬스, 무니)들과 함께 진행 중인 리팩토링 여정을 기록해보려 합니다.  무엇이 문제였을까?리팩토링 하자!라고 이야기가 나왔다는 것은 분명 어..
비동기 작업의 단위, Task 알아보기
·
iOS
Swift Concurrency를 사용해 비동기 코드를 작성하려면 Task를 이용해야합니다. Task { await 나는야비동기함수()} 일단 여기에 넣으라고 하니까 넣어서 쓰던 반성의 시간들,,,(맨날 봐야지 봐야지 하고 프로젝트에 쫓겨 미루던 나,,,🥲) 그래도 기본 동작 정도는 알고 있어야하겠죠? 간단하게나마 Task의 동작 방식을 살펴보겠습니다. Task의 정의애플 공식문서에 기술된 Task에 대해 살펴보겠습니다.  그렇습니다. Task는 비동기 작업의 단위라고 합니다. 추측하자면 우리가 지금까지 관성적으로 사용하던 다음과 같은 코드는 모두 하나의 비동기 작업으로 볼 수 있다는 뜻이기도 합니다.  Task { // 3개 함수 모두 하나의 비동기 단위임! await 나는야비동기함수..
공부할게 정말 많다
·
꾸준히 글쓰기
개발 공부를 하다 보면 여러 가지 생각이 든다. iOS 개발자라면 Swift에 대해 제일 잘 알아야 하지 않을까?새로운 아키텍처, 사람들이 만든 멋진 라이브러리를 살펴봐야 할 것 같은데,,,그래도 기초가 가장 중요하지. CS를 공부하자.일단 취업하려면 코테를 먼저 뚫어야겠어. 이것저것 생각도 많아지고, 할 것도 많아지는 요즘 중심을 잘 잡아야겠다는 생각을 한다.상황을 재기만 하다 모든 걸 놓쳐버리고 싶지는 않기 때문이다.결국엔 하나하나 조금씩, 깊게 파고들어야 한다.열심히 파내려가보자.
더 많이 배트를 휘두르자
·
생각을 담은 독서
"더 많이 배트를 휘두르자"이 문장이 가장 와닿았다. 인생의 행운은 누구에게나 한 번쯤 찾아온다고 한다.하지만 배트를 휘둘러보지 않은 사람은 헛스윙 할 뿐 나아갈 수 없다.실수해도, 실패해도 배트를 계속 휘둘러야 언젠가 홈런을 칠 수 있다. 나는 배트를 많이 휘두르고 있는가?팔이 아플까봐, 웃음거리가 될까봐 가만히 앉아있지는 않은가? 매일매일 배트를 휘둘러보자.매일매일의 노력한 결과는 곧 내게 신용으로,신용은 돈으로 돌아올 것이다. 지금 마음 가짐 그대로공부하고, 운동하고, 사랑하자.현재 내가 할 수 있는 최고의 투쟁일 것이다.
테스트 더블? 두 번 테스트 하는 건가요?
·
CS
면접관이 테스트 더블에 대해 물었을 때 어처구니없는 제 답변은 이랬습니다. "두 번 테스트하는 건가요,,?" 다시 생각해 봐도 부끄러운 것 같습니다.(뭐라도 대답을 해야 할 거 같은 기분에 그랬는데 앞으로는 솔직히 모르겠습니다라고 답변 하는 게 더 좋을 것 같네요) 집에 돌아가는 길 GPT에 검색해 보니 예상과는 전혀 다른 키워드들이 나왔습니다. 평소에 혼동해서 사용하던 단어를 바로잡을 좋은 기회이기도 해 정리해보려 합니다. 테스트 더블?A test double is software used in software test automation that satisfies a dependency so that the test need not depend on production code. A test doub..
취준은 외로워
·
꾸준히 글쓰기
취업 준비는 사람을 외롭게 만드는 것 같다.뭐랄까 혼자서 준비해야하는 것이 너무 많은 느낌,,,?그러나 곱씹어봤을 때 그리 외로운 상황 같지는 않다.여전히 사람들과 소통하고 몰입해 일을 할 수 있기 때문이다.그래서 가짜 외로움이라는 생각이 들기도 한다.그러니 지금처럼 뒤돌아보지 말고 하루하루 열심히 노력하자.
MVC와 Cocoa MVC, 뭐가 다를까?
·
iOS
0. 서문디자인 패턴을 공부할 때 가장 먼저 들었던 키워드가 MVC였습니다. Model-View-Controller로 책임을 나눠 구현하는 방법으로, 가장 널리 사용되는 패턴이기도 합니다. 많이 듣기도 했고 많이 적용도 해봐서였을까요(자만 했었던 것 같습니다), 면접 질문에서 잘 대답했다고 생각했었는데 집으로 돌아오는 길에 확인해보니 잘못된 부분이 분명 있었습니다. 다시 한번 초심으로 돌아간다 생각하고 MVC를 정리해보려 합니다. 1. 전통적인 MVC우선 전통적인 MVC가 무엇인지 알아야 합니다. 모든 디자인 패턴이 그렇듯이 각 부분은 저마다의 '관심사'가 존재합니다. 이로써 서로의 명확한 관심사를 분리하고, 더 나은 업무의 분리와 향상된 관리를 제공하는 것이 디자인 패턴의 주 목적입니다. 전통적인 MV..
스레드와 메모리,, 비슷한 거 아니었나요?
·
CS
서문'스레드와 메모리의 차이점을 설명해 주세요'라는 질문을 들었을 때 머리가 새하얘졌습니다. 어,, 이거 분명히 다르긴 한데 정확히 어떻게 다른 거지,,?라는 생각이 들면서 아,, CS가 부족한 밑천이 이렇게 드러나는구나라고 아쉬움이 남았습니다. 하지만 아쉬움뿐이면 또 어떻게 성장하겠어요! 이번 기회에 CS 관점에서도, iOS 관점에서도 제대로 짚고 넘어가 보려 합니다. GPT 선생님께 여쭤보자이런 보편적인 정의, 특징, 차이점을 알고 싶을 때 GTP 만큼 효율적인 것이 없는 것 같습니다. GPT의 내용을 인용해 자세히 살펴보겠습니다. 1. 스레드 Thread프로세스 내에서 실행되는 작은 실행 단위.프로세스가 할당 받은 메모리 자원을 공유하며, 독립적으로 실행 가능한 단위를 제공.경량 프로세스: 스레드는..
인생 첫 번째 iOS 개발 면접 후기
·
iOS
오늘은 제 인생 첫 번째 iOS 개발 면접 후기를 회고하며 기록을 남겨보려 합니다. 서류 및 사전 과제를 통과하고 처음 면접에 붙었을 때 기분이 좋으면서도 묘했습니다. 사실 이제 진짜 시작이라는 생각도 들었었죠. 여하튼 처음이라 떨리기도 했지만 초심자의 행운이라는 게 있었던 걸까요? 재미있게 이야기했었던 것 같기도 합니다. 면접이 끝난 후의 감정 및 복기 사항을 기록해두지 않으면 금방 휘발될 것 같아 집으로 오자마자 생생한 마음으로 기록해보려 합니다. 면접 흐름20분 정도 일찍 회사 로비에 도착해 기다렸습니다. 회사 소개가 담긴 작은 아이패드와 물 한 병을 주시더군요. 사무실이 무척 더웠기 때문에 반가웠습니다. 기다림 끝에 회사 건물 옆 작은 카페 룸으로 들어가 면접을 진행했습니다. 총 두 분이 앉아계셨..
순리자가 아닌 역행자로 살아간다는 것
·
생각을 담은 독서
나는 역행자로 살아가고 싶다.한 번뿐인 인생을 순리자로 살아가기엔 아쉬운 점이 너무나도 많다.내 인생 철학관 중 하나인 '인생의 절반 이상 일을 하며 살아가야 할텐데,그럼 인생의 절반을 재밌게 보내려면 재밌는 일을 해야 하지 않겠는가?'의 관점에서 봐도 말이다.사랑하는 사람들에게 내 마음을, 가치를 전달하려면 더욱이 역행자로 살아가야 할 것이다. 자청은 역행자가 되기 위한 방법론이 있다고 확신한다.이상하리만치 쉽고 간단하기에 누구나 역행자가 될 수 있지만,아이러니하게도 모두가 실천하지는 않는다고 한다.나도 그 중에 하나였다. 하지만 이제는 정말 달라져야 하지 않을까?내 인생에 주도권을 가져오는 시간을 더 이상 뒤로 미루면 안된다고 느낀다.조금이라도 젊을 때 더 많은 행복을 느끼고 싶다. 책을 읽자. 다양..
당신은 사용성을 평가할 수 있나요?
·
UXUI
오늘은 제가 UX 디자이너로 입문할 때 어찌 보면 당연하면서도 간과하고 있었던 사실, 그만큼 중요한 깨달음을 얻을 수 있었던 재미있는 실험에 대해 간단히 소개해보려 합니다. UX(사용자 경험), 사용성 등의 내용이 익숙치 않은 분들 모두 쉽고 재미있게 볼 수 있으며, 실무진 분들 또한 해당 부분의 중요성을 되짚기 좋은 사례라 생각합니다. Udemy - 'The Ultimate Guide to Usability and UX' 강의 내 수강 내용을 바탕으로 작성되었으며,관련하여 문제 혹은 피드백 있을 시, 적극 조치 하겠습니다 🙂사용성이란 무엇일까요?음,,, 사용성이란 무엇일까요? 일반적으로 쉽게 떠올릴 수 있는 사용성의 기준은 얼마나 효용적이고, 편리하고, 간단한가? 등으로 정의되며, 이는 보통 제품을 ..