1. 동기/ 비동기 개념에 대한 이해 쓰레드 연산을 수행하는 연산 장치 ( 코어 하나당 대부분 2개의 쓰레드 ) 소프트웨어적인 Thread - NSThread라고 불리는 객체임 메인쓰레드 (1번 쓰레드)는 앱의 시작과 화면을 다시 그리는 역할도 한다 (60Hz 1초에 60번) 여러 역할을 수행하므로 너무 오래 걸리는 작업 시키면 x 다른 thread로 분산처리를 해야함! 💡 작업(Task)를 대기 행렬(Queue)로 보내기만 하면, iOS가 알아서 여러 쓰레드로 나눠서 분산처리 병렬 vs 동시 병렬은 물리적인 쓰레드에서 실제 동시에 일을 하는 개념이고 동시성은 메인 쓰레드가 아닌 다른 소프트웨어적인 쓰레드에서 동시에 일을 하는 개념이다! 개발자는 동시성 부분은 신경쓰면 된다. 여러 개의 쓰레드에서 작업을..
self와 Self 비교 생성자를 다루면서 자주 사용했었던 self와 간간히 나오는 Self의 차이점을 비교해보겠다 self self는 인스턴스를 가리킨다!! self는 자기 자신의 인스턴스를 가리킨다고 한다 다양한 예시를 보며 self가 쓰이는 경우를 알아보자 생성자 내부에서 사용 클래스 or 구조체의 생성자에서 해당 저장 프로퍼티를 초기화할 경우 self.저장 프로퍼티 와 같이 self 키워드로 자기 자신의 인스턴스의 저장 프로퍼티에 접근한다 class Person { var name: String init(name: String) { self.name = name } } var p = Person(name:"sumin") 클래스 내부에서 저장 프로퍼티에 접근하는 경우 사용 class Person {..
iOS 앱 샌드박스(App SandBox) 샌드박스 란 어린아이를 보호하기 위해 모래통에서만 놀도록 하는데서 유래한 접근 보안 모델 iOS 에서는 하나의 앱마다 sandbox를 두고 공유되지 않도록 하여 접근에 대해 보호함 sandbox 내의 파일만 정보를 주고 받을 수 있도록 함 전략 앱이 시스템과 상호 작용하는 방식을 설명할 수 있습니다. 시스템에서 작업을 완료하는 데 필요한 접근권한을 앱에 "부여"하는 것이죠. 열기 및 저장, 드래그 앤 드롭 및 친숙한 사용자 상호 작용을 통해 앱에 투명하게 추가 접근 권한을 부여할 수 있습니다. 샌드박스가 없을 경우 → 앱에서 사용자의 모든 데이터에 접근 가능 & 모든 시스템 자원이 앱에 접근 가능 이러한 보안 문제로 인해 iOS 정책은 사용자 앱에 모든 리소스들..
타입 캐스팅 is 연산자(type check operator) 인스턴스의 타입을 검사함 인스턴스 is 타입 형태로 사용 (이항 연산자) 상속은 저장속성 확장 개념이기 때문에 하위 클래스가 상위 클래스의 타입일 수는 있지만, 상위 클래스가 하위 클래스 타입일 수는 없다. (메모리 관점에서 하위 클래스의 인스턴스는 상위 클래스의 속성을 가지고 있지만, 상위 클래스는 하위 클래스의 속성을 가지고 있지 않다.) Person 인스턴스 is Undergraduate(false) Undergraduate인스턴스 is Person (true) class Person { var id = 0 var name = "데이지" var email = "abc@naver.com" } // Person 클래스 상속 class Stu..
Queue Queue란, 한쪽 끝에서 삽입, 한쪽 끝에서 삭제가 이루어지는 유한 순서 리스트이다 First-in-First-out의 선입선출 방식 먼저 들어간 원소가 먼저 나가게 되는 구조 음식점 대기줄, CPU의 테스크 스케줄링등이 Queue의 방식의 예 BFS에서도 Queue를 사용하여 탐색해야 하는 노드의 리스트로 사용한다 Swift에서 Queue 구현하기 swift에서 Queue를 쉽게 구현하려면 queue를 배열로 놓고 enqueue는 append()함수로, dequeue는 removeFirst함수로 대체할 수 있다 struct Queue { private var queue: [T] = [] public var count: Int { return queue.count } public var is..
속성과 메서드 구조체와 클래스에는 속성(프로퍼티)와 메서드가 존재한다 속성은 두 타입에서 동일! 메서드에서는 약간의 차이가 있음 💡 속성 : 구조체/클래스의 변수 저장 속성 지연 속성 계산 속성 타입 속성 타입 저장 속성 타입 계산 속성 속성 감시자 등 💡 메서드 : 구조체/클래스의 함수 인스턴스 메서드 타입 메서드 서브스크립트 생성자 소멸자 1. 저장 속성(Stored Properties) 클래스/구조체에서 찍어낸 각 인스턴스가 가지는 고유의 데이터 var/let으로 선언가능 객체 초기화를 마치는 경우, 저장 속성은 반드시 값을 가져아함 (기본값 & 생성자 & 옵셔널 타입) 열거형은 따로 메모리 공간이 필요한 저장 속성은 선언 불가능 저장 속성은 각 속성 자체가 고유의 메모리 공간을 갖는다 struct..
값 타입과 참조 타입 값 타입(Value Type) 참조 타입(Reference Type) 구조체, 열거형, 튜플 클래스, 클로저 값 타입 구조체, 열거형, 튜플 타입 자체는 데이터 메모리 영역 에서 생성된다 스택 메모리 영역 에 인스턴스가 생성된다 인스턴스 복사시) 새로운 값이 할당되어 스택 메모리 영역에 쌓인다 그러므로 복사본의 내부 프로퍼티를 변경하면 그 복사본의 값이 변하고 원본 값은 변하지 않는다 인스턴스 let으로 선언시) 인스턴스의 내부 프로퍼티들이 var로 선언되었더라도 그 값을 변경할 수 없게된다 참조 타입 클래스나 클로저 타입 자체도 값 타입과 마찬가지로 데이터 메모리 영역 에서 생성된다 힙 메모리 영역 에 생성된 인스턴스의 데이터를 저장한다 스택 메모리 영역 에서는 힙 메모리 영역 에..
문제 정보 문제 출처: 백준 온라인 저지 문제 링크: 1700 멀티탭 스케줄링 제출 언어: Swift 알고리즘 분류: 그리디 알고리즘 * * * 풀이 그리디 알고리즘 `Greedy`는 '탐욕스러운'이란 뜻으로, 선택의 순간마다 당장 주어진 상황중 최선의 solution이라고 판단되는 것을 선택하는 알고리즘이다 - 가장 최선의 solution만을 계산하므로 메모리 사용량이 적다 - 빠르지만 최적의 해 solution을 보장할 수는 없다 -> 각 단계마다 선택한 최적해가 전체 최적해를 만든다는 보장은 할 수 없음 - 동작과정 - 해 선택 : 현재 상태에서 부분 문제의 최적해를 구한 뒤, 이를 부분해 집합에 추가한다 - 실행 가능성 검사 : 새로운 부분해 집합이 실행 가능한지 확인하고, 문제의 제약 조건을 위..