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

전체 글 491

[iOS Design Pattern] Factory Method

Factory Method Pattern Factory 패턴은 객체를 생성하는 모듈인 'Factory'를 만들어놓고 요청에 따라 객체를 생성하는 패턴입니다. Factory Method 패턴은 어떤 객체의 인스턴스를 생성할지 서브 클래스에서 결정하도록 합니다. 객체 생성을 처리하는 팩토리를 프로토콜로 관리하여 실질적인 생성을 캡슐화하는 것이 가능합니다. 일반적으로 Creator, Concrete Creater, Product, Concrete Product로 구성됩니다. Creator에서는 추상적 정보만 파악하고 있고, Concrete Creator에서 객체 생성에 대한 결정을 수행합니다. 아래는 간단한 구현예시입니다. // Product protocol Product { func hello() } Pro..

🍎 Apple/Patterns 2022.04.26

[Swift] 순열과 조합 구현

지난 포스팅에서 Queue를 구현해봤는데요 알고리즘 문제에는 순열 및 조합도 가끔 쓰이죠! 그래서 이번엔 순열과 조합을 구현해봤습니다. 순열 (Permutation) 순열은 전체에서 중복없이 순서를 고려해 n개를 배열하는 경우의 수입니다. 해당 특성에 맞게 DFS를 사용해 접근했습니다. 따라서 Stack과 재귀함수 둘 모두를 사용할 수 있습니다. Stack 사용 func permutation(_ array: [T], _ n: Int) -> [[T]] { var result = [[T]]() if array.count < n { return result } var stack: [([T], [Bool])] = array.enumerated().map { var visited = Array(repeating:..

🍎 Apple/Swift 2022.04.25

[Swift] Queue (Deque) 구현

최근 Swift로 알고리즘 문제를 해결하고 있습니다. 그런데 Swift에는 Queue(Deque)가 없어 종종 불편할 때가 있더라구요 그래서 한번 직접구현해봤습니다. Swift로 구현한다는 것에 목적이 있는 포스팅이기 때문에 Queue와 Deque에 대한 설명은 생략하겠습니다. 참고 : https://velog.io/@seri_ous/Swift-%ED%81%90-Swift-Algorithm-Club-%EB%B2%88%EC%97%AD 구현 class Queue { var array: [T?] var head = 0 var isEmpty: Bool { return count == 0 } var count: Int { return array.count - head } var first: T? { if isEm..

🍎 Apple/Swift 2022.04.25

[알고리즘 연습] 방금그곡 (프로그래머스 lv2, 스위프트)

문제 https://programmers.co.kr/learn/courses/30/lessons/17683 코딩테스트 연습 - [3차] 방금그곡 방금그곡 라디오를 자주 듣는 네오는 라디오에서 방금 나왔던 음악이 무슨 음악인지 궁금해질 때가 많다. 그럴 때 네오는 다음 포털의 '방금그곡' 서비스를 이용하곤 한다. 방금그곡에서는 TV, programmers.co.kr 풀이 func solution(_ m:String, _ musicinfos:[String]) -> String { func change(_ melody: String) -> String { var melody = melody melody = melody.replacingOccurrences(of: "A#", with: "a") melody = ..

[UIKit] dequeueReusableCell (withIdentifier:for:) vs (withIdentifier:)

tableView에서 Cell을 재사용하기 위해 사용되는 메서드인 dequeueReusableCell에는 두가지 형태가 있습니다. dequeueReusableCell(withIdentifier:for:)과 dequeueReusableCell(withIdentifier:)가 그것인데요. 이 두 메서드의 정확한 차이는 무엇일까요? 하나는 indexPath를 함께 파라미터로 받고 있고, 하나는 받지 않고 있습니다. 두 메서드의 기능이 똑같다면 굳이 indexPath 넣어주는 메서드를 사용할 필요가 있을까요? 무언가 특별한 기능이 있으니까 사용하는 것 아닐까요? 일단 애플 공식문서 찾아보기 일단 문서의 글을 읽어봅시다. func dequeueReusableCell(withIdentifier:for:) : reu..

🍎 Apple/Question 2022.04.18

[UIKit] UITableView 기초부터 다시 살펴보기

안녕하세요 이누입니다. UITableView, UICollectionView 둘다 상황에 따라 많이 사용하는 View죠. 그런데 저는 지금까지 프로젝트에서 적용하기에만 급급해서인지 사용과정 및 원리가 머릿속에서 정리되어 있다는 느낌이 없었습니다. 그래서 이번기회에 둘 다 정리를 해보려고 합니다. 오늘은 먼저 TableView입니다! 이번 포스팅은 쓰다보니 좀 길어져서 목차도 첨부합니다. 아래 순서대로 설명할거예요. UITableView란? UITableView 생성하기 UITableViewCell, UITableViewDataSource Cell Reuse? UITableViewDelegate (이하 내용은 모두 코드베이스를 기준으로 설명되어 있습니다.) 1. UITableView란? iOS의 UITab..

🍎 Apple/UIKit 2022.04.17

[iOS Design Pattern] Coordinator

Coordinator Pattern Coordinator 패턴은 ViewController가 보유하던 책임 중 Navigation과 관련된 부분을 다른 인스턴스에서 책임지도록 하는 패턴입니다. 기존의 ViewController에서 직접적으로 화면전환을 시행하는 방식은 다음에 띄워질 다른 ViewController에 대해 기존 ViewController가 알고 있어야 하는 구조입니다. 이는 ViewController 인스턴스 간에 심한 커플링을 발생시킵니다. 이를 해결한 것이 Coordinator 패턴입니다. 모든 ViewController는 Coordinator 인스턴스만 보유할뿐, 다른 ViewController 인스턴스를 직접적으로 보유하지 않습니다. 그저 Coordinator에게 요청할 뿐입니다. ..

🍎 Apple/Patterns 2022.04.12

[iOS Architecture] VIPER

안녕하세요 이누입니다. 오늘은 많이 들어만보고 뭔지는 아직도 모르는 VIPER 패턴에 대해 학습해봤습니다. VIPER 패턴? 먼저 VIPER 패턴입니다. VIPER는 View, Interactor, Presenter, Entity, Router의 약자입니다. 이름대로 이 5개의 요소로 UI 구성 패턴을 정의합니다. 각 요소들은 위와 같이 상호작용하며 자신의 역할을 수행합니다. 각 요소의 역할은 다음과 같습니다. View ViewController를 포함해 화면에 보여지는 모든 것들이 여기에 포함됩니다. Presenter에 대한 참조를 보유합니다. Presenter에서 호출하여 자신을 변경할 수 있는 메서드를 내부에 보유합니다. (다른 방식으로 Presenter의 이벤트를 확인해 직접적으로 처리하도록 할 ..

🍎 Apple/Patterns 2022.04.11

[Swift] Method Swizzling

Method Swizzling? 개념 Method Swizzling은 원래의 메서드를 runtime에 원하는 메서드로 변경해 사용할 수 있도록 하는 기법입니다. UIViewController의 viewWillAppear같은 메서드를 원하는 메서드로 변경해 여러 ViewController에 한번에 작업을 적용하는 방식으로도 사용이 가능합니다. 예를 들어 앱 분석기능을 적용하는 경우 여러 ViewController에 같은 동작을 수행해야하는 경우가 있습니다. 이럴 때 하나씩 적용하는 것보단, Method Swizzling으로 한번에 처리하는 것이 효율적인 것이지요. 사용예시 import UIKit extension UIViewController { static func methodSwizzling() { l..

🍎 Apple/Swift 2022.04.10

[Swift] Localizing (NSLocalizedString)

안녕하세요 이누입니다! Localizing에 대해 알고는 있었지만, 직접 적용시켜본적은 없었습니다. 다국어 지원은 글로벌 앱 서비스 제작에 상당히 중요한 부분이라 한번쯤은 적용해볼 필요가 있다고 느꼈습니다. 그래서 동아리에서 하고있는 인스타그램 클론코딩 과제에 Localizing을 적용해봤습니다. 하나씩 살펴보시죠! cf. 코드로 Localizing을 적용하는 것을 기준으로 설명했습니다. 사용과정 String 파일 생성 먼저 Strings 파일을 생성해야합니다. 이 때 파일명은 반드시 Localizable이어야 합니다. 그렇지 않으면 프로젝트 상에서 인식할 수 없어요! 경로는 상관없습니다. 저는 이렇게 생성해줬습니다. 언어 추가 이제 오른쪽 Localizable 파일을 선택하고 Inspector 영역에서..

🍎 Apple/Swift 2022.04.10