본문 바로가기

모바일앱199

기본적인 자료구조(4) - 큐 (Queue) 큐(Queue)는 선입선출(FIFO: First In, First Out)의 원칙을 따르는 자료구조다.가장 먼저 들어온 데이터가 가장 먼저 나가며, 주로 대기열이나 리소스 관리 등에서 사용된다.  큐의 주요 특징선입선출(FIFO): 가장 먼저 들어온 요소가 가장 먼저 나감.동적 크기: 필요에 따라 요소를 추가하거나 삭제할 수 있음.제한적인 접근: 큐는 맨 앞과 맨 뒤에서만 요소를 추가하거나 제거할 수 있음. 주요 연산:enqueue: 큐의 끝에 요소를 추가.dequeue: 큐의 앞에서 요소를 제거하고 반환.peek: 큐의 맨 앞에 있는 요소를 제거하지 않고 확인.isEmpty: 큐가 비어있는지 확인. 시간 복잡도enqueue: O(1) – 큐의 끝에 요소를 추가.dequeue: O(1) – 큐의 앞에서 .. 2024. 10. 1.
기본적인 자료구조(3) - 스택(Stack) 스택(Stack)은 후입선출(LIFO: Last In, First Out) 원칙을 따르는 선형 자료구조다.스택은 데이터의 순서를 처리할 때 유용하며, 주로 재귀 호출, 백트래킹 등의 알고리즘에서 많이 사용된다. 스택의 주요 특징후입선출(LIFO): 마지막에 삽입된 요소가 가장 먼저 제거된다.동적 크기: 필요에 따라 요소를 추가하거나 삭제할 수 있다.제한적인 접근: 스택은 맨 위(top) 요소만 접근할 수 있다. 주요 연산:push: 요소를 스택의 맨 위에 추가.pop: 스택의 맨 위에 있는 요소를 제거하고 반환.peek: 스택의 맨 위에 있는 요소를 제거하지 않고 반환.isEmpty: 스택이 비어있는지 확인. 스택의 시간 복잡도push, pop, peek: 모두 O(1) 시간 복잡도를 가진다.스택의 맨 .. 2024. 10. 1.
기본적인 자료구조(2) - 연결 리스트(Linked List) 연결 리스트(Linked List)는 노드(Node)라는 개체들이 연결된 구조로 데이터를 저장하는 자료구조. 각 노드는 데이터와 다음 노드를 가리키는 참조(포인터)로 이루어져 있다. 배열과 달리, 연결 리스트는 동적 크기를 가지며, 요소 삽입/삭제 시 메모리 재할당이 필요 없다는 장점이 있다.연결 리스트의 주요 특징동적 크기: 배열과 달리 연결 리스트는 크기가 가변적으로, 필요에 따라 노드를 추가하거나 삭제할 수 있다.노드 기반 연결: 각 노드는 데이터와 다음 노드를 가리키는 포인터로 구성돼. 노드를 통해 연속된 데이터를 저장할 수 있다.순차 접근: 인덱스를 통해 바로 접근하는 배열과 달리, 연결 리스트는 순차적으로 노드를 탐색해야 한다. 시간 복잡도삽입/삭제: 특정 위치에 노드를 삽입하거나 삭제할 때는.. 2024. 10. 1.
기본적인 자료구조(1) - 배열(Array) 기본적인 자료구조 - 배열배열(Array)배열은 같은 데이터 타입의 값들을 순차적으로 저장하는 선형 자료구조다. 배열의 각 값은 인덱스를 통해 접근하며, 인덱스는 0부터 시작한다. 배열은 연속된 메모리 공간에 저장되므로, 빠른 접근 속도를 제공한다. 배열의 주요 특징인덱스 기반 접근: 배열은 인덱스를 사용해 각 요소에 O(1)의 시간 복잡도로 빠르게 접근한다.예: array[0]은 배열의 첫 번째 요소에 접근한다.고정된 크기: 배열은 선언 시 크기가 고정되며, 배열의 크기를 변경하려면 새로운 배열을 생성해야 한다. Swift에서는 동적 크기의 배열을 지원하지만, 일반적인 배열은 고정 크기다. 삽입/삭제의 시간 복잡도삽입/삭제: 배열의 중간에 요소를 삽입하거나 삭제할 경우, O(n)의 시간이 걸린다. 이는.. 2024. 9. 29.
동기와 비동기에 대한 개념 동기와 비동기에 대해 들어가기 전에 스레드에 대해 먼저 이야기해보자.스레드PC 사양 중에 4코어 8스레드, 8코어 16스레드 라는 식의 말을 들어본 적이 있을 것이다.스레드란 일을 하는 존재라고 생각해보자. 8스레드라면 일을 할 수 있는 존재가 8개, 16스레드라면 일을 할 수 있는 존재가 16개 라는 것이다.아이폰 11 Pro기준 6코어라면 일을 할 수 있는 스레드가 6개가 있다는 것이다.설명Thread1이 존재한다. 아래와 같은 작업이 Thread1에 순서대로 존재한다고 생각해보자.Task걸리는 시간Task14Task23Task32Task41 하나 하나의 작업을 보면 걸리는 시간이 다르다.근데 통상적으로 일은 Thread1에서 처리하게 된다. 그러면 과부하가 생긴다.이걸 분산시켜서 처리를 하는 것이 .. 2024. 8. 12.
Swift - Enumerated() 사용하기 Enumerated()라는 메서드를 본적이 있을까?애플문서배열을 열거형으로 만들면서 배열의 index와 element를 파라미터로 리턴하는 메서드이다. 마찬가지로 문자열 자체를 열거형으로 변환하여도 동일하게 적용이 가능하다. let strArr = ["S", "w", "i", "f", "t"]for (n, c) in strArr.enumerated() { print("\(n): '\(c)'")}// Prints "0: 'S'"// Prints "1: 'w'"// Prints "2: 'i'"// Prints "3: 'f'"// Prints "4: 't'"for (n, c) in "Swift".enumerated() { print("\(n): '\(c)'")}// Prints "0: 'S'"/.. 2024. 8. 9.
Swift - 배열의 특정 두 요소를 교환하기 배열의 요소를 서로 교환하기배열에서 특정 요소 두개를 서로 교환하는 경우가 있다.이때, 교환할 요소가 i번째와 j번째라고 했을 때, 아래와 같이 3가지 방법이 있다.  1. 직접 교환임시 배열을 생성하여 교환할 값들을 저장하여, 원본 arr에 접근하여 변경let tempArr = [originArr[i], originArr[j]]arr[j] = tempArr[0]arr[i] = tempArr[1]  2. 튜플을 이용한 교환튜플을 사용하면 임시로 저장하는 공간없이 두 요소를 교환 가능하다.(resultArr[i], resultArr[j]) = (resultArr[j], resultArr[i])  3. swapAt(_: _:)메서드를 이용한 교환swapAt메서드의 파라미터는 원본 배열의 index가 들어간다.. 2024. 7. 31.
Swift - 참조(Strong, weak, unowned) 아주 간단한 예로 설명하자면.. 엄마와 나를 예로 들어보자.Strong엄마와 아이가 손을 꼭 잡고 있다고 가정해보자.엄마가 어디로 가든지 아이도 따라가야한다.엄마가 아이 손을 잡고 있으면, 아이는 어디에도 가지 않고 엄마와 함께 있는 것이다.Weak엉마와 아이가 손을 잡고 있다고 가정해보자.아이가 다른 곳에 가고 싶어하면 손을 놔줄 수 있다고 한다.아이가 어딘가 가고 싶다고 결정하면, 아이는 자유롭게 이동할 수 있고, 엄마와 아이가 잡은 손은 자연스럽게 분리된다.아이가 손을 놓고 이동하면, 엄마와 아이는 연결되어있지 않게 된다.Unowned엄마와 아이는 항상 같이 다닌다.엄마 없이는 절대 집을 나서지 않는다.만약 엄마가 여행을 가서 집을 비우면, 아이도 함께 가야한다.엄마가 없으면, 아이도 어디에도 갈 .. 2024. 6. 8.
swift signum() 메서드 이용하기 빠르게 양수와 음수 여부를 체크하는 경우,x > 0 처럼 체크하는 경우도 있지만x.signum() 으로 체크하는 방법 도 있다.signum() 메서드는 주어진 숫자의 부호를 나타내는 메서드다. 이 메서드는 수학적으로 숫자의 부호를 판별하여 그 결과를 반환한다.대부분의 프로그래밍 언어에서 사용할 수 있으며, 특히 수치 연산이 중요한 경우 유용하게 사용할 수 있다.signum() 메서드의 작동 방식:숫자가 양수일 경우, 1을 반환.숫자가 음수일 경우, -1을 반환.숫자가 0일 경우, 0을 반환.이 메서드는 숫자의 절대값을 확인하지 않고 오직 부호만을 고려하기 때문에, 부호에 따라 분기 처리를 해야 할 때 특히 유용하게 사용된다. 2024. 5. 30.
ios 개인정보 보호 매니페스트 PrivacyInfo.xcprivacy 만들기 애플에서 공지한 게시글 (23.12.7)App Store 앱 제출을 위한 개인정보 보호 관련 업데이트와 (24.2.29)App Store 앱 제출을 위한 개인정보 보호 관련 업데이트 를 살펴보면 아래와 같은 부분이 있다. 2024년 봄부터 App Store Connect에 새로운 앱 또는 앱 업데이트를 업로드하려면 앱의 개인정보 보호 매니페스트에 앱이 API를 사용하는 방식을 정확하게 반영하는 허용된 사유를 포함하고 있어야 한다 이 글에서 서드파티 SDK는 앱에 탁월한 기능을 제공하지만 개발자 / 사용자도 모르는 사이에 사용자 개인 정보 보안을 취약하게 만든다고 한다. 여기서 말하는 Third-party SDK privacy manifest and signatures 가 뭘까? 이 내용에 앞서 애플에서 .. 2024. 3. 8.