CPU / RAM / Storage의 미묘한 삼각관계
·
내게 필요한 개발 공부
예전 조립 PC 구매를 위해 부품을 검색해 보고 다녔을 때가 떠오릅니다. 일단 정확히 뭔지는 모르겠지만 뭐 CPU 사양이 좋다느니,, RAM은 다다익선이라느니,,, 말들을 주워 담으며 열심히 부품을 모아 PC를 장만했었습니다. 이제는 개발자로서 기본적인 하드웨어 동작 방식은 자신 있게 이야기할 수 있어야 하기에 정리해보려 합니다. CPU(Central Processing Unit) 중앙처리장치컴퓨터 시스템을 통제하고 프로그램의 연산을 실행 · 처리하는 가장 핵심적인 컴퓨터의 제어 장치, 혹은 그 기능을 내장한 칩이다.흔히 컴퓨터의 `두뇌` 역할이라고 합니다!`연산`을 수행합니다.(산술, 논리 연산)다른 하드웨어(RAM, Storage 등)와 `데이터 교환 및 제어`CPU의 필수 구성 요소`Cache 캐시..
재르시님의 면접 질문지로 iOS 인터뷰 뽀개기
·
취준
iOS 개발 공부를 하고 계신 분이라면 한번쯤은 들어봤을 'Jercy's Interview Questions for iOS Developers' 뽀개기를 시작했습니다. 대답할 수 있는 질문이 반의 반의 반도 안되는걸 보아하니,,, 얼른 하나씩 뽀개 나가야 할 것 같습니다. 좋은 학습 자료를 Public 하게 볼 수 있게 만들어주신 재르시님 및 Contributor 모두에게 감사합니다!! ☺️🌱 레벨 01. 컴퓨터 시스템에서 CPU, RAM, 저장 장치의 역할과 이들이 어떻게 상호 작용하는지 설명해주세요. - 25.02.21CPU와 메모리 간의 데이터 교환은 어떻게 이루어지나요?버스(Bus)란 무엇이며, 어떤 종류가 있나요?2. 캐시 메모리의 개념과 역할에 대해 설명해주세요. - 25.02.22캐시의 지..
Xcode 유닛테스트 무한 인덱싱 현상
·
트러블슈팅
🤨 문제 정의TCA를 적용한 프로젝트에서 유닛테스트를 진행하려했는데 무한 인덱싱이 빠져버리는 현상이 발생했습니다. 어떤 오류도 안뜨고(심지어 유닛테스트 빌드도 안됨)무한 로딩,,, TCA를 적용한 이유 중 하나가 유닛테스트였는데 무슨 일일까요,,! ++ 신기한건 동료 프로젝트에서는 잘 돌아갑니다,,, 더 의문,,,, 🪓 삽질 기록대략 한 달 동안 너무 많은 삽질을 해버려서 일일히 기록하진 못했지만,,(심지어 TCA 걷어내야하나 생각까지 함,,) 대충 기억 나는 걸 적어보자면!유닛테스트 새로 생성 → 똑같음여러가지 Destination에서 빌드 → 똑같음새로운 Scheme 생성 → 똑같이 안돌아감Execute in parallel 설정 바꾸기 → 빌드 되고 돌아가긴 했으나 결과적으로 오류 없이 테스트 ..
iOS 개발자의 모두를 위한 컴퓨터 과학 CS50 수료 후기
·
내게 필요한 개발 공부
저는 CS를 주먹구구식(?)으로 공부했었습니다. 어떤 것이 중요한지, 어디서부터 시작해야 할지 모르니 일단 iOS 개발을 하다 처음 보는 단어가 나오면 검색해 보며 그때그때 공부했었죠. 어찌 보면 필요에 의한 것이었기 때문에 호기심 있게 공부할 수 있었습니다. 그러나 반대로 말하면 필요가 충족되면 깊게 파고드는 것보다는 다음 문제를 찾아 나서곤 했죠. 딥다이브를 하지 않고 넘어가다보니 CS는 얕게만 쌓여갔습니다. 본질을 이해하지 못한 채 쌓여간 지식들은 금세 휘발되기도 했습니다. 그러다 기술 면접에서 그 결과가 그대로 드러났습니다. 분명 알고 있는 키워드임에도 설명하려다 보니 말문이 턱 막히게 되었죠. 이대로는 안 되겠구나 싶었습니다. iOS 개발 지식도 중요하지만, 스스로 개발자라고 불리고 싶다면 기본..
선택의 연속
·
꾸준히 글쓰기
인생은 선택의 연속이다.아무리 깊게 고민하고 신중히 선택해도 예상과 다르다. 그렇다면 선택은 어떻게 해야 할까?최선의 선택이라 믿었지만 그렇지 않았을 때의 상실감은 어떻게 채워야 하는가? 최선의 선택이 아닐 수 있음을 인정하자.그저 내가 후회하지 않으리라, 내 결정을 온전히 믿으리라 다짐하자. 결과는 아무도 모른다.내 선택이 어떻게 돌아오든, 있는 그대로 받아들이자.그저 최선의 결과가 나올 수 있게, 후회하지 않게 만들도록 노력하자. 선택은 필연적이다.
Swift로 적어보는 버블 / 선택 / 병합 정렬
·
내게 필요한 개발 공부
최근 CS 공부를 위해 Boostcourse의 모두를 위한 컴퓨터 과학(CS50) 강의를 수강하고 있습니다. CS를 전혀 몰라도 쉽고 재밌게 들을 수 있는 강의로 저 또한 만족스럽게 듣고 있습니다. 오늘은 정렬 알고리즘의 대표적인 3가지를 간단하게 알아보고, Swift로 직접 구현해 온전히 습득하고자 합니다. 1. 버블 정렬 Bubble Sort버블 정렬은 가장 직관적인 알고리즘입니다. 쉽게 말해 '두 요소를 비교 후 순서에 맞게 자리를 바꾼다!'의 문장으로 설명할 수 있습니다.위 단계를 배열의 끝까지 반복하게 됩니다.배열 끝까지 반복 후에도 정렬이 되지 않았다면, 다시 한번 같은 과정을 반복하는 식으로 알고리즘을 이어나가는 것이 버블 정렬의 기본 개념입니다. 버블 정렬의 상한선은 O(N^2)의 시간복잡..
스쿱 트러블 슈팅 - 음악 추정 시간으로 정확도 개선하기
·
프로젝트 일지
본 포스팅은 음악을 쉽게 담을 수 있게 도와주는 'Sqoop 스쿱' 프로젝트의 트러블 슈팅 내용을 기록했습니다.스쿱 서비스는 1차 추출(얕은 추출) 단계에서 Description, Comment List 등의 문자열을 받아와 정규표현식으로 변환하고, 이를 활용해 음악 리스트를 추출합니다. 기존의 음악 리스트를 추출 할 때 사용하는 정보는 오로지 타임스탬프 뒤에 따라오는 제목 및 아티스트 titleOrArtists 정보로, 이는 정확도 관련 이슈를 만들었습니다. 03:56 - Sunflower 라는 문자열을 이용해 MusicKit 으로 검색하는 상황을 예시로 들어보겠습니다. MusicKit 의 검색 필드엔 ‘Sunflower’가 사용되고, 이는 다음과 같은 리스트를 반환합니다.외부 검색어를 받아 로직을 수..
스쿱 트러블 슈팅 - API로부터 도메인을 안전하게 지키기
·
프로젝트 일지
본 포스팅은 음악을 쉽게 담을 수 있게 도와주는 'Sqoop 스쿱' 프로젝트의 트러블 슈팅 내용을 기록했습니다.YTPlaylistExtractor 는 Youtube Data API의 영상 및 댓글 정보를 가공해 비즈니스 로직을 수행합니다. 각 API는 여러 메타데이터를 포함하고 있고 이를 다르게 해석하면, 모듈 및 프로젝트의 목적과 상관없는 데이터 또한 포함하고 있다는 말이기도 합니다. 아래는 비디오 정보를 반환하는 API의 Response이며, 이 중 실제로 사용되는 데이터는 ⭐ 표시 해두었습니다.{ "kind": "youtube#videoListResponse", "etag": "YxiDxVDo0f0RJfjjW6MknQNQm9s", "items": [ { "kind": "youtu..
스쿱 트러블 슈팅 - 유연하고 구조적인 정규표현식 만들기
·
프로젝트 일지
본 포스팅은 음악을 쉽게 담을 수 있게 도와주는 'Sqoop 스쿱' 프로젝트의 트러블 슈팅 내용을 기록했습니다.YTPlaylistExtractor 모듈의 핵심 비즈니스 로직인, 영상 플레이리스트 추출을 위해 가장 중요한 단계는 YouTube의 Description, Comment 문자열을 정규표현식과 매칭해 음악 리스트 [YTMusicInfo] 로 추출(1차 스쿱)하는 것입니다.Sqoop 서비스는 ShazamKit을 이용해 정확도가 높은 2차 스쿱(깊은 추출)을 제공하고 있지만, 최소 1분 이상의 긴 추출 시간, 예상보다 큰 데이터 사용량 등의 문제점을 상호보완하기 위해 본 모듈의 1차 스쿱(얉은 추출) 기능을 우선적으로 제공하고 있습니다. 즉, 영상 내 음악 정보가 존재한다면 2차 스쿱으로 넘어가지 않..
A4 한 장을 쓰는 힘 - 이 책은 내게 무엇을 말하려 하는가
·
생각을 담은 독서
A4 한 장을 쓰는 힘 - 안광복이력서를 작성하고, 포트폴리오를 만들고, 블로그 포스팅을 꾸준히 하기 위해 가장 필요한 능력은 무엇일까? 단연코 글쓰기다. 그런 마음으로 도서관을 돌아보던 중, 신간 도서 구역에서 이 책을 발견했다. 글쓰기를 근력을 키워줄 최소한의 근력이라는 표지 속 문구는 지금 내 상황에 딱 맞는 듯했다. 저자는 좋은 글쓰기를 위해선, 좋은 재료가 필요하다 말한다. 여기서 좋은 재료란 읽기, 즉 독서다. 독서가 부족하면 좋은 글이 나올 수가 없다고 한다. 이를 위해 독서의 기본기를 만들어야 한다. 하루 독서 시간을 의도적으로 만들고, 이동 시간 등에도 자연스러운 독서를 위해 책을 챙겨 다니는 등의 노력이다. 이 문장을 실천하기 위해 최근 지하철을 탈 때마다 책을 들고 다니는데 꽤나 감성..
iOS 개발에서 쉽게 도전해볼만한 리팩토링 접근법 8가지
·
내게 필요한 개발 공부
본 포스팅은 애플 디벨로퍼 아카데미 @POSTECH 테크 포럼 이벤트,'기술 글자랑 대회'의 게시글을 가져와 작성되었습니다.안녕하세요, 3기 주니어 러너 한톨입니다! 😇오늘은 Tech Forum 기술 글자랑 대회의 마지막 주제인 ‘더 나은 코드, 리팩토링’ 관련 게시글을 작성해보려 합니다. 개발을 하다보면 ‘리팩토링’ 이라는 단어를 자주 접하게 됩니다. (보통은 일정이 촉박할 때 많이 사용하긴 하지만요.) 저는 관성적으로 리팩토링을 조금씩 하고 있기는 하지만 구체적으로 어떤 목적으로, 어떻게 진행하고 있는지 깊게 고민해본 적은 없는 것 같아 반성하게 되는 것 같습니다. 그래서 이를 정리하고 공유해보고자, iOS 개발에서 제가 직접 경험해본 것들을 바탕으로 여러가지 리팩토링 접근법에 대해 설명해보겠습니다..
뒤로가기 버튼과 함께 제스쳐도 사라진 것에 대하여 in SwiftUI
·
내게 필요한 개발 공부
본 포스팅은 애플 디벨로퍼 아카데미 @POSTECH 테크 포럼 이벤트,'기술 글자랑 대회'의 게시글을 가져와 작성되었습니다.안녕하세요, 3기 주니어 러너 한톨입니다! 😇 오늘은 제가 SwiftUI에서 Navigation 기능을 구현할 때 자주 마주쳤었던 문제 해결 과정을 간단하게 공유해 보려 합니다. 작은 내용이지만 누군가에게 도움이 되길 바람과 동시에, 더 좋은 해결 방법을 함께 고민해 봤으면 합니다! SwiftUI의 NavigationBar 커스텀하기SwiftUI는 기본적으로 Navigation 기능을 제공합니다. NavigationStack 계층 내부에 NavigationLink 를 넣거나, navigationDestination(for:destination:) modifier를 추가함으로써 다음..
너와 함께 개발하기 위한 작은 실천법
·
내게 필요한 개발 공부
본 포스팅은 애플 디벨로퍼 아카데미 @POSTECH 테크 포럼 이벤트,'기술 글자랑 대회'의 게시글을 가져와 작성되었습니다.안녕하세요, 3기 주니어 러너 한톨입니다! 😇평소 테크 포럼에 기여하고 싶은 마음을 작게나마 가지고 있었는데, 기술 글자랑 대회라는 좋은 기회와 함께 살려보고자 용기 내어 글을 작성해 봅니다. 개발 협업이라는 주제에서 하고 싶은 얘기가 너무나도 많습니다. 하지만 오늘은 간단하지만 쉽게 적용해 볼 수 있는, 어쩌면 많은 것들을 바꿀 수 있는, 제겐 이미 많은 것들을 가져다준 실천법을 공유해 보려 합니다. 적용하기까지의 과정을 맥락과 함께 녹여보려다 보니 글이 두서없이 길어졌습니다. 부족한 글이지만, 너그럽게 읽어주셨으면 합니다 :) 1️⃣ 개발 협업의 의미저는 아카데미에서 처음으로 ..
음악 플레이리스트에 Array와 List 중 어떤 걸 사용할까?
·
내게 필요한 개발 공부
라는 질문을 면접 때 받았습니다. 부끄럽게도 답하지 못했습니다. 둘 중 하나를 고를 수 있었겠지만 근거가 없으니 답할 수 없었습니다. 이대로 CS를 내버려두면 앞으로의 면접도 자신있게 나서지 못할 것 같다는 생각이 들었습니다. 모른다고, 시간이 없었다고 핑계 대지 말고 자신있게, 솔직하게 답하기 위해 오늘도 정리를 시작합니다. Array(배열, 순차 리스트)질문에 대한 답을 내리려면 자료구조의 대한 이해가 바탕이 되어야 합니다. Array는 우리가 자주 사용하는 Swift의 Array와 동일합니다. 순서가 있는 컬렉션이죠.Array가 순서를 가질 수 있는 이유는, 실제 메모리 상에서도 연속적으로 저장되어 있기 때문입니다.(논리적 저장 순서 == 물리적 저장 순서) 이 덕분에 순서는 인덱스(Index)로 ..
잘하기 vs 자라기 '함께 OOO'를 읽어봤습니다
·
개발 서적
2024년 07월 14일에 작성한 글을 옮겨왔습니다. 🧐 책을 읽게 된 이유요즘 책 읽기가 부쩍 재밌어졌다! 개발 공부를 위해 공식 문서, 블로그를 떠돌아다니는 것도 재밌지만 책 읽기만의 매력을 느꼈달까?,,, 핵심 주제에 대해 심도 있게 파고들며 많은 생각을 할 수 있게 해준 다는 점이 가장 크다고 느낀다. 가끔은 반복되는 말을 하는 것 같은 느낌도 들지만, 그래서 더 소중하다! 함께 자라기에서도 언급했듯이, 무슨 책을, 얼마나 많은 책을 읽었다고 자랑하는 것이 아닌 여기서 얻은 지식을 얼마나 어떻게 활용했는지를 돌아보려면 그 맥락에 대한 깊은 이해가 필요하기 때문이다. 역시 나는 책을 많이 읽는 것보다, 책을 잘 읽는 것에 더 관심이 간다. 아카데미에서도 꽤나 유명한 '함께 자라기'를 지나가듯 들었..
클린 아키텍처, 소프트웨어 구조와 설계의 원칙을 읽어봤습니다
·
개발 서적
2024년 06월 23일 작성한 글을 옮겨왔습니다. 🧐 책을 읽게 된 이유iOS 개발자로 성장해나가며 최근 가장 관심 있었던 주제는 단연 '아키텍처', 즉 구조 설계였다. 다른 사람들과 함께 협업하는 것, 어제의 나와 프로덕트를 만들어나가는 것, 개발자로서의 의미 모두 구조 설계라는 맥락으로 귀결됐고 배움의 필요성을 절실히 느끼게 되었다. 그러던 중 애플 아카데미 내 '클린 아키텍처 책 읽기' 스터디에 참여하게 되었고, 자연스레 책을 접하게 되었다. 꽤나 폭력적으로 생긴 표지(?)와 어렵다는 악명,, 을 뒤로하고 끝까지 읽을 수 있었던 이유는 함께 읽어서였던 것 같다. 열정적으로 서로의 생각을 나누고, 토론하며 성장해나감을 느꼈고 이 과정을 이끌어준 모수에게 감사 인사를 올린다! 🐰 느낀점 적어보기처..
객체지향의 사실과 오해(feat. 토끼책 🐰)를 읽어봤습니다
·
개발 서적
2024년 3월 31일 작성한 글을 옮겨왔습니다. 🧐 책을 읽게 된 이유그 유명한 토끼책을 추천 받아 읽게 되었다. '객체지향'이라는 단어와 언어(Swift)를 자연스럽게 사용하면서도 정작 그 의미에 대해 잘 알지 못했었는데, 멋있는 분이 추천해주셔서 마음 먹을 수 있게 되었다. 원래 구매해서 읽으려고 했는데 운이 좋게도 아카데미 기숙사 룸메이트가 마침 가지고 있어 빌려 읽을 수 있었다! 🐰 느낀점 적어보기객체지향의 근본적인 의미를 이해하는 것이 왜 어려운지 알게 되었다. 객체지향을 설명할 때 '실제 세계의 모방'을 예시로 들곤 하는데, 이 때문에 내가 원래 가지고 있던 관념과 연결시키기 어려웠던 것 같기도 하다. (실제 세계를 모방하다보면 이해할 수 없는 것들이 많기 때문에) 이 책에서 객체지향은 ..
내일배움캠프 SwiftRise 소소한 후기
·
대외활동
오늘은 스파르타 내일배움캠프에서 주최한 SwiftRise 행사에 다녀왔습니다! 예전에 신청해 놓고 잊고 있었는데 감사하게도 당첨되어 다녀올 수 있었습니다. 무료 컨퍼런스기도 해서 요즘 같이 취준 준비로 고민이 깊어질 때 리프레쉬 하기 좋았던 것 같습니다.(샌드위치와 스콘 맛있게 잘 먹었습니다 🥪) 프로그램 메모 정리1. 주니어 시절 이야기 / 권문범님오픈소스 많이 뜯어보기(가고 싶은 회사가 있다면 어떤 기술 스택 사용하는지 보고 딥다이브 해보기)파이썬, 루비와 같은 언어를 다룰 줄 아는 것도 꽤나 많은 도움이 될 것 2. Automatic Text Replacemen  / 그린 님TextField에 하이픈 등 특수기호가 들어갈 수 있는 상황에서 글자 수 제한과 같은 요구사항 있을 시 해당 개념 살펴보기..
행복의 의미
·
꾸준히 글쓰기
어제는 밤 잠을 설쳤다.내가 정말 하고 싶은 일은 무엇일까?하고 싶은 일을 찾으면 행복해질까?지금 나는 행복하지 않은가? 생각하지 않으려 해도 잔잔한 파도처럼 끊임없이 밀려온다.피곤하지만 이런 생각이 싫지많은 않다. 나는 왜 회사에 들어가려고 할까?회사에 들어가 어떤 일을 기대하고 있는 걸까?그저 매 달 들어오는 돈으로 생계유지를 하기 위한 걸까?매 달 돈이 들어온다면 나는 회사에 들어가지 않아도 되는 걸까? 행복은 잔잔히 그리고 고요히 찾아온다고 한다.어쩌면 지금 나는 행복한 것은 아닐까?아니면 행복해지기 위해 발버둥 치고 있는 걸까.
타입 메서드 vs 싱글톤 성능 비교하기
·
내게 필요한 개발 공부
앱 내 전역적으로 햅틱 이벤트를 호출하기 위해 HapticService를 구현하려 합니다. 함수 두 개만 작성하면 되는 아주 간단한 것이죠!/// 알림 유형에 따른 햅틱 출력func notification(type: UINotificationFeedbackGenerator.FeedbackType) { UINotificationFeedbackGenerator().notificationOccurred(type)}/// 강도에 따른 햅틱 출력func impact(style: UIImpactFeedbackGenerator.FeedbackStyle) { UIImpactFeedbackGenerator(style: .medium).impactOccurred()}그러다 문득 이를 타입 메서드로 구현해야 할지..
캐플 리팩토링 세 번째 이야기 - 트러블 슈팅
·
프로젝트 일지
애플 디벨로퍼 아카데미에서 진행한 프로젝트, 캐플 Qapple 리팩토링 작업의 세 번째 이야기입니다.캐플은 애플 디벨로퍼 아카데미 @POSTECH 3기, TEAM QAPPLE에서 시작한 프로젝트로아카데미 러너들과 익명으로 소통할 수 있는 커뮤니티 서비스입니다! 🍎 AppStore 다운로드하기 방향성 설정, 프로젝트 세팅까지 모두 마쳤습니다. 이제는 실제 리팩토링을 진행하며 마주쳤던 다양한 트러블 슈팅을 정리해봅니다. (역시나 대개 TCA 관련 트러블 슈팅이었습니다 ㅎㅎㅎ,,,,,) 1. Navigation & TabBar 로직 구현하기TCA에서 네비게이션 로직을 구현하는 것은 튜토리얼에서 어느정도 설명이 되었기에 크게 어렵지 않을 것(?)이라 생각했습니다. 하지만 늘 그렇듯 캐플 앱의 네비게이션 + 탭..
SwiftUI ScrollView 리프레쉬 했을 때 화면이 멈추는 현상 해결하기
·
트러블슈팅
🤨 문제 정의캐플 프로젝트 진행 중 다른 ScrollView는 문제가 없었지만 게시판 화면의 ScrollView에서 리프레쉬를 하니 로딩이 멈춰버리는 현상이 발생해 버렸습니다,,! 딱히 로직이 다른 것도 없고 로딩 화면도 같은 컴포넌트를 사용하고 있는데 어떤 부분이 문제일까요,, 🪓 삽질 기록1. GeometryReader 문제?GeometryReader를 사용해 View를 그릴 때 렌더링 문제를 마주했었던 경험이 있었기 때문에 이 부분을 제거해봤지만 결과는 똑같았습니다.(GeometryReader도 언젠가 제대로 이해하는 날이 오기를!)GeometryReader { proxy in // 평소에 얘가 문제가 많던데,,? ZStack { BulletinBoardContentView(s..
Array / Set / Dictionary Swift의 컬렉션 알아보기
·
내게 필요한 개발 공부
Array, Set, Dictionary의 차이점을 분명 알고 있긴 하지만, 누군가에게 설명하라고 했을 때 버벅거리게 되는 것 같습니다. 이는 개념을 더 명확히 인지해야 한다는 뜻이기도 하기에, 아주 간단히 컬렉션 타입을 살펴보고 한 문장으로 정리해 보겠습니다. Array 배열An ordered, random-access collection.순서가 있고 무작위로 접근 가능한 컬렉션0부터 자동으로 순서가 지정되는데 이를 인덱스라고 합니다.순서가 있기 때문에 Array의 데이터는 중복이 가능합니다.* 순서가 중요하거나 인덱스로 접근해야 할 때! Set 집합An unordered collection of unique elements.순서가 없는 고유한 요소들의 컬렉션중복이 불가능합니다.Hashable 프로토콜..
꾸준히 운동하기
·
꾸준히 글쓰기
나는 헬스를 별로 좋아하지 않는다.무게를 올리고 몸을 키워가는 것 자체에 큰 관심이 없기 때문인 것 같기도 하다. 그래도 누군가가 얘기를 할 때도, 책에서도 늘 운동은 중요하다고 한다.체력의 부족함을 날이 갈수록 느끼는 요즘,운동을 좋아하지 않는다고 그만둬버릴 수는 없는 것이다. 이제 열흘 정도 꾸준히 운동했는데 역시나 당연하게도어떤 변화가 있는지 실감하긴 어려운 것 같다. 그래도 한 가지 확실한 것은 기분은 맑아진다.잡생각이 없어지고 온전히 내게 집중할 수 있는 시간이 생긴다.그것만으로도 좋은 시작점이지 않을까 생각한다.
마음 속 원숭이
·
꾸준히 글쓰기
요즘 계속 집에 있어서 그런가 규칙적인 듯 규칙적이지 않은 삶을 살고 있다.10시에 일어나 운동을 가고, 점심을 먹은 후 저녁까지 개발 공부를 한다. 어느정도 정해진 양을 끝내면 나를 위한 보상을 한다.민톨이와 놀거나, 게임을 하거나, 넷플릭스를 보는 등 말이다.마음 속 작은 원숭이를 달래는 일을 하는 것은 꼭 필요하다고 생각하지만,마음 한구석은 늘 불편한 것 같다. 내 목표를 달성하려면 원숭이를 달래는 일 또한 줄여나가야하는 것은 아닌지 고민이 된다.
책임과 역할, 비슷한 듯 다른 두 개념
·
내게 필요한 개발 공부
비슷한 듯 다른 두 개념 시리즈(?)의 두 번째 파트는 책임과 역할입니다. 객체지향 프로그래밍에서 자주 등장하는 두 개념은, 혼용해서 사용하기 쉽습니다.(일단 저부터) 이를 바로 잡아보려 진짜 의미를 찾아보겠습니다. 책임 Responsibility책임이란 객체에 의해 정의되는 응집도 있는 행위의 집합으로, 객체가 유지해야 하는 정보와 수행할 수 있는 행동에 대해 개략적으로 서술한 문장이다. 즉, 객체의 책임은 객체가 '무엇을 알고 있는가'와 '무엇을 할 수 있는가'로 구성된다. 여기서 객체가 무엇을 알고 있는가는 데이터로, 무엇을 할 수 있는가는 함수로 치환할 수 있습니다. 결제 서비스를 예시로 들어보겠습니다. 결제를 위해선 사용자 정보와 금액 정보(데이터), 실제로 결제를 수행할 행동(함수)이 필요합니..
추상화와 일반화, 비슷한듯 다른 두 개념
·
내게 필요한 개발 공부
추상화와 일반화. 개발 공부를 하다 보면 꽤나 많이 듣게 되는 단어입니다. 저 또한 여러 논의를 하며 자연스럽게 두 단어를 이야기하곤 했는데 어느 날 두 개념의 차이점에 대한 질문을 받은 적이 있습니다. 한참을 고민하다 내린 결론은 그동안 혼용해서 사용하고 있었구나라는 깨달음과 이를 깊이 고민해보지 못한 반성이었습니다. 비슷하지만 분명히 다른 추상화와 일반화에 대해 정리해보려 합니다. 추상화 Abstraction컴퓨터 과학에서 추상화는 복잡한 자료, 모듈, 시스템 등으로부터 핵심적인 개념 또는 기능을 간추려 내는 것을 말한다. 이전에 객체지향의 사실과 오해를 읽었을 때의 구절이 다시 떠올랐습니다. "복잡성의 총체인 현실이라는 괴물을 그대로 수용하기에 인간이 지닌 인지 능력과 저장 공간은 너무나도 보잘것없..
캐플 리팩토링 두 번째 이야기 - 프로젝트 세팅하기
·
프로젝트 일지
애플 디벨로퍼 아카데미에서 진행한 프로젝트, 캐플 Qapple 리팩토링 작업의 두 번째 이야기입니다.캐플은 애플 디벨로퍼 아카데미 @POSTECH 3기, TEAM QAPPLE에서 시작한 프로젝트로아카데미 러너들과 익명으로 소통할 수 있는 커뮤니티 서비스입니다! 🍎 AppStore 다운로드하기 첫 번째 이야기에서는 리팩토링의 방향성을 설정했습니다. 어떤 의도로 리팩토링하는지, 어떤 합의를 볼 것인지, 그 합의의 방법인 아키텍처는 어떻게 사용할지에 대해서 말이죠! 이제는 구체적으로 적용해나가기 위해 초기 세팅이 필요했습니다. TCA 기본 세팅합의에서 가장 크고 중요한 부분은 단연코 TCA였습니다. 기존 MVVM 아키텍처로 처리하던 방식과 크게 달랐기 때문에 논의 없이 프로젝트를 진행한다면 큰 혼란을 초래할..
구조체로 싱글톤 만들기?
·
내게 필요한 개발 공부
iOS 공부를 시작한 지 얼마 안 된 시절, 개인 프로젝트를 진행하며 싱글톤이 동작하지 않는 문제를 경험한 적 있습니다. 그때의 기억을 떠올려 비슷하게 코드를 작성해 보면 아래와 같았습니다.struct Singleton { static var shared = Singleton() private init() {} var name = "민톨"}let singleton = Singleton.sharedprint("내 이름은 " + singleton.name)Singleton.shared.name = "한톨"print("내 이름은 " + singleton.name) 싱글톤 패턴을 이용할 때 우리는 '하나의 객체'를 떠올립니다. 타입 프로퍼티로 생성된 shared 객체를 전역적으로 접근 +..
캐플 리팩토링 첫 번째 이야기 - 방향성 설정하기
·
프로젝트 일지
애플 디벨로퍼 아카데미에서 진행한 프로젝트, 캐플 Qapple의 리팩토링 작업이 시작됐습니다.캐플은 애플 디벨로퍼 아카데미 @POSTECH 3기, TEAM QAPPLE에서 시작한 프로젝트로아카데미 러너들과 익명으로 소통할 수 있는 커뮤니티 서비스입니다! 🍎 AppStore 다운로드하기 1년 가까이 진행하면서 쌓여온 코드는 문제점이 많았습니다. 하지만 신규 기능 추가(게시판, 댓글 등...)에 항상 뒷전이 되어 미루다시피 한 기술 부채는 이제는 너무나 늘어나버렸죠,,! 3기가 마무리되고 4기의 시작을 앞둔 지금이 절호의 기회라고 판단해 시즌2에 새롭게 합류한 멤버(시몬스, 무니)들과 함께 진행 중인 리팩토링 여정을 기록해보려 합니다.  무엇이 문제였을까?리팩토링 하자!라고 이야기가 나왔다는 것은 분명 어..