본문 바로가기
반응형

분류 전체보기109

[iOS] App Bundle iOS 앱 번들에 관한 내용을 기록합니다. Bundle 실행가능한 코드와 관련 리소스(앱 아이콘, 이미지 등)를 한 공간에 묶는 디렉토리 모음 Application Bundles 개발자들에 의해 생성되는 가장 흔한 번들 앱이 정상적으로 작동하기 위해 필요한 모든 것들 플랫폼에 따라 상세한 구조는 다르지만 번들을 사용하는 방법은 동일하다. Application Bundle에 포함되어 있는 파일들 Info.plist file: 앱에 대한 구성(configuration) 정보(bundle ID, version number 등)를 포함한 파일 Excutable: 모든 앱은 실행 가능 파일이 있어야 하고 앱의 메인 진입점과 정적으로 앱 타겟에 연결된 코드가 포함한다. Resources files: 앱의 실행가능한.. 2021. 5. 14.
[Algorithm] Queue 구현 Swift Swift로 Queue 구현에 관한 두 가지 방법을 기록합니다. 큐를 구현하는 이유는 다음과 같다. 1. Swift에서는 Queue를 지원해주지 않는다. 2. 배열 하나만을 이용해서 큐를 구현할 수 있지만 효율성이 떨어져 다음과 같은 방법을 사용한다. -> why? append()를 이용해서 enqueue하고 removeFirst()로 dequeue하는데 removeFirst()의 복잡도가 O(n)이다. 1. 인덱스를 이용한 큐 구현 struct Queue1 { var q = [T]() var index = 0 var count: Int { q.count - index } var isEmpty: Bool { q.count == index } var first: T? { index < q.count ? q.. 2021. 5. 13.
[Swift] ARC (1) ARC에 관한 내용을 정리한 것을 기록합니다. ARC(Automatic Reference Counting) 참조 타입은 하나의 인스턴스가 참조를 통해 여러 곳에서 접근하기 때문에 언제 메모리에서 해제되는지가 중요하다. why ? 인스턴스가 적절한 시점에 해제되지 않으면 한정적인 메모리 자원을 낭비하게 되고 성능 저하로 이어지게 된다. → 그래서 스위프트는 프로그램의 메모리 사용을 관리하기 위해 메모리 사용을 추적하고 관리하는 ARC를 사용한다. 참조 횟수 계산은 클래스 타입에만 적용된다. 컴파일 시 인스턴스를 메모리에서 해제되는 시점을 예측할 수 있다.→ 인스턴스를 메모리에 유지시키려면 명분이 필요하다. → 인스턴스가 더 이상 필요없다고 판단하면 자동으로 인스턴스의 메모리를 해제한다. 그리고 인스턴스에 .. 2021. 5. 12.
[Algorithm/BOJ] 18258 - 큐2 Swift Python 문제 풀이: 스위프트에서 큐를 지원해주지 않아 직접 구현해야 합니다. 하지만 배열 하나로 구현했을 때 시간상 효율이 좋지 않아 두개의 배열(스택)을 이용해서 큐를 구현했습니다. 그래도 시간초과가 나므로 라이노님의 빠른 입력 클래스를 사용했습니다. 또한, push, pop, empty, size, front, back에 해당하는 아스키 코드를 미리 구해 넣어 시간을 줄였습니다. 파이썬은 collections의 deque를 사용해서 쉽게 풀 수 있었습니다. 코드: Swift import Foundation // 라이노님 빠른 입력 FileIO final class FileIO { private var buffer:[UInt8] private var index: Int init(fileHandle: FileH.. 2021. 5. 12.
[Swift] popLast() vs removeLast() 배열의 마지막 요소를 제거하는 2가지 방법에 관한 내용을 기록합니다. 배열의 마지막 요소를 제거하고 값을 리턴하는 popLast()와 removeLast()가 있습니다. Swift를 사용하여 PS를 하다가 popLast()와 removeLast()의 차이점이 궁금해서 찾아봤습니다. removeLast()는 배열의 마지막 요소를 제거히고 리턴합니다. popLast() 또한 배열의 마지막 요소를 제거하고 리턴합니다. 하지만 popLast()의 리턴 값이 아래의 그림처럼 옵셔널인 것을 확인할 수 있었습니다. 코드를 통해 직접 실행하여 비교한 결과, 빈 배열에 removeLast()를 실행하면 컴파일 에러가 발생합니다. 반면에, 빈 배열에 popLast()를 실행하면 nil이 리턴됩니다. var nums = [.. 2021. 5. 11.
[Algorithm/BOJ] 1406 - 에디터 Swift Python 문제 풀이: 이 문제의 핵심은 2개의 스택을 사용하는 것이다. L: 왼쪽 스택에서 pop하고 그 값을 오른쪽 스택에 추가한다. D: 오른쪽 스택에서 pop하고 그 값을 왼쪽 스택에 추가한다. B: 왼쪽 스택에서 pop한다. P: 왼쪽 스택에 값을 추가한다. 오른쪽 스택은 문자열이 거꾸로 추가되었으므로 마지막에 오른쪽 스택을 reversed해줘야 한다. 처음에 배열로 접근해서 풀었을 때 스위프트는 시간초과가 나고 파이썬은 같은 풀이로 푼 문제가 맞았다. 원인은 스위프트에서 readLine()!.split(separator: " ").map { Int(String($0))! } 를 통해 Int형 배열로 입력을 받는 과정에서 시간이 더 소모된 것이 영향이 있는 것 같다. 그래서 스위프트는 배열로 입력을 받지 .. 2021. 5. 11.
[RxSwift] Filtering Operators (Skipping) Filtering Operators 중 Skipping Operators에 관해 정리한 내용을 기록하겠습니다. Skipping Operators 1. Skip 첫 번째 요소부터 n개의 요소를 스킵한다. let bag = DisposeBag() Observable.of(1, 2, 3, 4, 5, 6) .skip(3) .subscribe(onNext: { num in print(num) }) .disposed(by: bag) // 첫 이벤트부터 3개를 스킵하므로 1, 2, 3이 출력되지 않고 4, 5, 6이 출력된다. 2. SkipWhile 특정 조건에 만족하지 않는 요소가 나올 때까지 스킵하고 특정 요소에 만족하는 요소가 나오면 스킵을 종료하는 연산자이다. let bag = DisposeBag() Obse.. 2021. 5. 11.
[RxSwift] Filtering Operators (Ignoring) Filtering Operators 중 Ignoring Operators에 관해 정리한 내용을 기록하겠습니다. Ignoring Operators 1. IgnoreElements 어떠한 이벤트도 방출하지 않는다. -> .next를 무시한다. .completed 또는 .error 와 같은 이벤트는 허용한다. let data = PublishSubject() let bag = DisposeBag() data .ignoreElements() .subscribe({ _ in print("Event is Emitted.") }) .disposed(by: bag) // onNext 이벤트들 무시됨 data.onNext(1) data.onNext(2) data.onNext(3) // Completed 호출되고 Even.. 2021. 5. 11.
[Algorithm/BOJ] 1302 - 베스트셀러 Swift Python 문제 풀이: Python은 Counter 클래스를 사용하면 쉽게 풀 수 있는 문제이다. 하지만, Swift는 따로 지원해주지 않기 때문에 딕셔너리를 카운터로 사용해야 한다. 이 방법은 이 문제가 아니더라도 쓸 일이 있어서 알아두면 좋다. 마지막에 정렬은 팔린 횟수가 많은 순으로 정렬하고 같다면 사전순으로 정렬한다. 코드: Swift let n = Int(readLine()!)! var soldCounter = [String:Int]() for _ in 0 ..< n { let book = readLine()! soldCounter[book, default: 0] += 1 } print(soldCounter) let result = soldCounter.sorted { $0.value == $1.value.. 2021. 5. 9.
[Swift] Instance, Static, Class Method 스위프트의 메서드에 관해 기록하겠습니다. 스위프트의 메서드로는 Instance, Static, Class가 있습니다. instance 메서드 우선, instance 메서드는 클래스를 만들고 해당 클래스의 인스턴스 생성을 통해 호출할 수 있습니다. class ExClass { func instanceMethod() { print("Instance") } } let ex = ExClass() ex.instanceMethod() // Instance 위 코드처럼 ExClass의 ex 인스턴스를 생성하고 ex를 통해 instacneMethod()를 호출할 수 있습니다. static 메서드와 class 메서드의 공통점 static 메서드와 class 메서드는 타입 메서드라고 합니다. 또한, static 메서드와 .. 2021. 5. 8.
반응형