[회고] 신입 iOS 개발자가 되기까지 feat. 카카오 자세히보기

전체 글 496

[Network] TCP의 흐름제어와 혼잡제어

네트워크 통신과정 도중에는 네트워크 혼잡성 및 receiver의 overload 등의 사유로 데이터가 손실되거나, 전달 순서가 바뀌는 등의 문제가 발생할 수 있습니다. 이런 문제를 해결하고 통신의 신뢰성을 보장하기 위해 TCP/IP에서 사용하는 것이 흐름 제어와 혼잡 제어입니다. cf. TCP 버퍼 : 전송 및 수신 전 TCP 세그먼트는 보관하는 곳입니다. 송신 측은 버퍼에 TCP 세그먼트를 보관한 후 순차적으로 전송하고, 수신 측은 도착한 TCP 세그먼트를 애플리케이션이 읽을 때까지 버퍼에 보관합니다. 이 크기에 너무 작으면 당연히 손실되는 데이터가 많아지겠죠? 흐름 제어 수신 측이 송신 측보다 데이터 처리 속도가 느릴 경우 데이터를 손실할 위험이 존재합니다. 흐름 제어는 이런 송신 측과 수신 측의 데..

[UIKit] ViewController Life Cycle

안녕하세요 이누입니다! 여러분은 ViewController의 Life Cycle에 대해 잘 알고 계신가요? 저는 잘 알다가도 헷갈리거나 모르는 부분이 등장해서 당황스러울 때가 많더라구요. 그래서 오늘은 이를 포함해 전체적인 ViewController의 Life Cycle에 대해 정리해보았습니다. (2022.03.16 내용수정) 가장 먼저 init에 대해 정리하려고 살펴보니 nib, xib 파일에 대한 언급이 있더라구요. 그래서 이 부분부터 정리하고 넘어갑니다. cf. nib란? nib : NeXT Interface Builder (binary 기반), 인터페이스 빌더에서 생성한 객체들을 저장하는 파일입니다. UI를 구성하는 객체들과 이들의 세부설정, 각 객체들간의 관계 등을 포함합니다. xib : XML..

🍎 Apple/UIKit 2022.02.12

[알고리즘 연습] 실패율 (프로그래머스 lv1, 스위프트)

문제 https://programmers.co.kr/learn/courses/30/lessons/42889 코딩테스트 연습 - 실패율 실패율 슈퍼 게임 개발자 오렐리는 큰 고민에 빠졌다. 그녀가 만든 프랜즈 오천성이 대성공을 거뒀지만, 요즘 신규 사용자의 수가 급감한 것이다. 원인은 신규 사용자와 기존 사용자 사이에 스 programmers.co.kr 풀이 1 func solution(_ N:Int, _ stages:[Int]) -> [Int] { var numOfPlayer = stages.count var rate = [Int:Float]() let dic = stages.reduce(into: [Int:Int]()) { $0[$1, default: 0] += 1 } for n in 1...N { r..

[iOS] #selector는 무엇이며 왜 필요할까?

우리는 iOS 개발에서 특정 Control에 target-action을 적용할 때 자연스럽게 Selector라는 타입의 객체(#selector(@objc method))를 사용합니다. 그런데 이것이 정확히 무엇일까요...? 오늘은 이 Selector가 무엇인지, 왜 필요한지 알아보고 정리했습니다! Objective-C에서의 Selector 사실 Selector는 원래 Objective-C에서 사용하던 기능입니다. 이는 특정 메서드를 컴파일타임에 동적으로 식별하고 참조하는 역할을 했습니다. 이러한 특징을 기반으로 Objective-C에서 동적으로 메서드를 동작시키려할 때 Selector를 사용했습니다. 반면 Swift에서는 이런 별도의 객체를 사용하지 않아도 메서드를 동적으로 동작시킬 수 있기 때문에 직접..

🍎 Apple/Question 2022.02.07

[UIKit] Multiple Gesture Recognizer 처리하기

안녕하세요 이누입니다. 🐶 하나의 View에 대해 여러 Gesture Recognizer가 등록되어 있는 경우 원하는 대로 처리되지 않는 경우가 종종 있습니다. 특정 Gesture로 인해 먼저 처리해야 될 다른 Gesture가 무시되는 경우도 많고, 동시에 처리되길 원하는 Gesture가 동시에 동작하지 않는 경우가 그 대표적인 예시입니다. 따라서 오늘은 애플 개발자 문서에 등록된 Article인 Coordinating Multiple Gesture Recognizers를 기반으로 하나의 View에 등록된 여러 Gesture Recognizer들의 작업을 원하는대로 처리하는 방법을 알아보겠습니다. OverView Gesture recognizer는 입력된 터치 이벤트를 개별적으로 추적하지만, UIKit은..

🍎 Apple/UIKit 2022.02.05

[알고리즘 연습] 비밀지도 (프로그래머스 lv1, 스위프트)

문제 https://programmers.co.kr/learn/courses/30/lessons/17681 코딩테스트 연습 - [1차] 비밀지도 비밀지도 네오는 평소 프로도가 비상금을 숨겨놓는 장소를 알려줄 비밀지도를 손에 넣었다. 그런데 이 비밀지도는 숫자로 암호화되어 있어 위치를 확인하기 위해서는 암호를 해독해야 한다. 다 programmers.co.kr 풀이 // 방법 1 ("0"으로 이루어진 패딩을 계산적으로 추가해준 뒤 replacingOccurrences로 치환) func solution(_ n:Int, _ arr1:[Int], _ arr2:[Int]) -> [String] { var answer: [String] = [] for idx in 0..

[알고리즘 연습] 다트 게임 (프로그래머스 lv1, 스위프트)

문제 https://programmers.co.kr/learn/courses/30/lessons/17682?language=swift 코딩테스트 연습 - [1차] 다트 게임 programmers.co.kr 풀이 func solution(_ dartResult:String) -> Int { let numberList = dartResult.split(whereSeparator: {$0.isLetter || $0 == "#" || $0 == "*"}) let letterList = dartResult.split(whereSeparator: {$0.isNumber}) var totalScore = 0 for (i, (number, letter)) in zip(numberList, letterList).enum..

[알고리즘 연습] 시저 암호 (프로그래머스 lv1, 스위프트)

문제 https://programmers.co.kr/learn/courses/30/lessons/12926?language=swift 코딩테스트 연습 - 시저 암호 어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 합니다. 예를 들어 "AB"는 1만큼 밀면 "BC"가 되고, 3만큼 밀면 "DE"가 됩니다. "z"는 1만큼 밀 programmers.co.kr 풀이 func solution(_ s:String, _ n:Int) -> String { return s.utf8.map { var code = Int($0) switch code { case 65...90: code = (code + n - 65) % 26 + 65 case 97...122: code..

[iOS Architecture] MVC, MVP, MVVM (feat. Clean Architecture)

안녕하세요 이누입니다. 개인적으로 아키텍처 부분이 많이 부족하다는 생각이 들어서 Clean Architecture 이론과 MVC, MVP, MVVM 아키텍처의 개념을 최대한 iOS의 관점에서 바라보며 공부하고 정리해봤습니다. 그럼 시작할게요! Clean Architecture 먼저 Clean Architecture에 대해서 간단하게 이야기해보겠습니다. Clean Architecture는 Robert C. Martin(a.k.a Uncle Bob)님이 제안하신 '좋은 아키텍처'에 대한 이론입니다. (위 그림에 나오는 각 레이어의 자세한 역할과 의미에 대해서는 원글(https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html)을 참..

🍎 Apple/Patterns 2022.01.30

[DB] Index

Index (인덱스)? 인덱스는 데이터베이스의 테이블에 대한 검색 속도를 높여주는 자료구조입니다. 특정컬럼에 대한 인덱스를 생성하면 해당 컬럼의 데이터들이 정렬되어 별도의 메모리공간에 물리적주소와 함께 저장됩니다. 따라서 해당 컬럼에 where 조건 등을 걸어 접근할 경우 이를 활용할 수 있게 되어 접근 속도가 빨라집니다. 하지만 생성에 시간이 걸리고 INSERT, UPDATE, DELETE가 자주 발생하는 경우 성능이 하락할 수 있습니다. 일반적으로 하나의 컬럼을 key로 인덱스를 생성하지만, 여러개의 컬럼을 key로 인덱스를 생성하는 composite index라는 개념도 존재합니다. Index의 자료구조 이러한 인덱스를 구현하는 자료구조로는 대표적으로 해시테이블과 B+ Tree가 있습니다. 자료구조..