본문 바로가기

iOS

(6)
[Swift : 알고리즘] 순열과 조합 (Permutation and Combination) 코딩 테스트에서 빈번하게 사용되는 순열과 조합 알고리즘에 대해 공부해보자. 직접적으로 몇 개의 조합을 찾아라!라는 문제보다는 순열 혹은 조합을 적절히 사용해서 경우의 수를 찾는 문제들이 빈번히 출제되므로 대비해두는 것이 좋다. 1. 순열 (Permutation) '서로 다른 n 개의 원소 중에서 r 개를 골라 순서를 구분하여 나열한 경우의 수'를 의미한다. 순열은 nPr 로 표현한다. 순열의 개수를 구하는 공식은 n! / (n-r)! 이다. 순열에서 중요한 점은 순서를 구분한다는 점이다. 예를 들어 [1, 2, 3, 4]의 배열에서 순서를 구분하여 3가지 원소를 경우의 수를 나열하면 아래와 같이 24개의 경우의 수가 나온다. [1, 2, 3] [1, 2, 4] [1, 3, 2] //[1, 2, 3] 과 ..
[Swift] 순환참조에 대해 알아보자 (feat. strong, weak, unowned reference) 순환 참조란 두 가지 이상의 객체가 서로에 대한 Strong Reference(강한 참조) 상태를 가지고 있을 때 발생하며, 순환 참조가 발생하게 되면 서로에 대한 참조가 해제되지 않기 때문에 메모리에서 유지되며 이로 인해 메모리 릭이 발생하게 된다. 이러한 순환 참조를 해결하기 위해 weak, unowned reference가 사용된다. ☞ 클로저에서의 weak self 1. 하나의 인스턴스에 대한 참조 먼저, 다음과 같이 Person 클래스를 만들어 보자. import UIKit class Person { let name: String init(name: String) { self.name = name print("\(name) is being initialized") } deinit { print(..
[Swift] 클로저에서의 weak self 에 대해 알아보자 클로저를 사용하면서 weak self를 사용해본 경험이 있거나, weak self를 사용하는 코드를 본 적이 있을 것이다. weak self 를 왜 사용해야 하고, 언제 사용해야 하는지에 대해 알아보자. 1. weak self를 왜 사용하는가? Weak reference(약한 참조)는 Retain Cycle(순환 참조)로 인한 메모리 릭을 벗어나기 위해 사용한다. Swift가 Automatic Reference Counting(ARC)를 사용하면서 대두분의 참조 문제를 해결해주지만, 두 가지 이상의 객체가 서로에 대한 Strong Refrence(강한 참조) 상태를 가지고 있다면 Retain Cycle이 발생하게 되며 이때, 메모리 릭이 발생한다. 메모리 릭이 발생한다면, 앱에서 Out Of Memory..
[Swift] 코코아팟(CocoaPods) 라이브러리를 만들어 보자 직접 라이브러리를 만들어 코코아팟(cocoapods)으로 배포하는 방법에 관한 포스트입니다. 1. 라이브러리 프로젝트 생성 먼저, 터미널을 열고 프로젝트를 생성하고 싶은 위치로 이동합니다. 그 후 터미널에 $ pod lib create [프로젝트명] 을 입력하여 프로젝트를 생성해줍니다. 그후 터미널에서 보여지는 몇가지 질문에 답을 해주면 됩니다. * 이 부분은 iOS, macOS중 어느 라이브러리를 만드냐에 따라 질문이 달라집니다. 먼저, iOS용 라이브러리를 만들 경우에는 다음의 질문에 자신의 상황에 맞게 답변해주시면 됩니다. - 어떤 플랫폼으로 만들꺼니? - 어떤 언어 사용할거니? - 라이브러리에 데모용 앱 넣을꺼니? - 어떤 테스팅 프레임워크 사용할꺼니? - view기반 테스팅 할꺼니? macOS용..
[Swift : 알고리즘] 선택정렬(Selection Sort) 선택정렬은 '가장 작은 원소를 앞으로 보내는' 알고리즘 방법입니다. 두 번의 For Loop를 사용하며 배열을 순회하며 min(최솟값)을 찾아서 그 값을 배열의 맨 앞으로 보내고 해당 값 이후의 인덱스부터 다시 최솟값을 찾아서 비교하며 정렬하게 됩니다. O(N^2)의 시간 복잡도를 가지는 구현이 단순하지만 비효율적인 알고리즘입니다. func selectionSort(notSortedArray: [Int]) -> [Int] { /* for swap var temp: Int */ var index: Int var array: [Int] = notSortedArray for i in 0 ..< notSortedArray.count { //External Loop var min: Int = array[i] in..
[Swift : MacOS] MAC statusbar 어플리케이션을 만들어보자 기본적으로 MAC OS 어플리케이션을 만들면 statusbar(이하 상태바)에 표시되지 않고 storyboard에 있는 화면이 새 창으로 뜨게된다. statusbar에서도 컨트롤 가능한 어플리케이션을 만드려면 몇 가지 작업을 해주어야한다. 1. Appdelegate NSStatusItem 설정 먼저, Appdelegate에서 NSStatusItem 변수를 추가한다. 그 다음 applicationDidFinishLaunching 메써드 안에 NSStatusItem 설정을 해준다. import Cocoa @NSApplicationMain class AppDelegate: NSObject, NSApplicationDelegate { private var statusItem: NSStatusItem! func ..