목록Study (34)
조앤의 기술블로그
해당 대학은 아니지만, 대학원 입학 면접의 질문은 대체로 그 결이 비슷한 것 같아서 다른 대학의 기출문제를 참고하여 면접을 준비했다. (카이스트, 포항공대 ...) 비슷한 질문은 묶어서 공부했다. Q) 프로세스와 스레드의 차이점 Q) 프로세스와 스레드간의 통신에 대해 비교. Q) 프로세스와 스레드가 메모리에 접근할 때 차이(프로세스와 스레드가 메모리에 store하는데 다른 프로세스와 스레드가 load하면 어떻게 되는지) Q) Thread 끼리 context-switching 할 때 [프로세스] * 프로세스 프로세스(Process)는 일반적으로 프로세서(처리기, CPU)에 의해 처리되는 사용자 프로그램이나, 시스템 프로그램을 의미하는 것. 프로세스는 필요한 각종 자원을 요구한다. * 프로세스의 여러가지 정..
#1 iOS 개발에서 가장 중요한 패턴이다. 하나의 객체는 다른 객체를 자신의 대리자로 지정한다. 그리고 자신이 제공하는 일부 기능을 대리자가 대신 수행하도록 일부 위임한다. 즉, 기능을 처리할 객체를 델리게이트로 설정하고, 특정 이벤트가 발생할 때 이를 델리게이트에 의해 위임된 본래의 객체로 전달해주는 역할을 한다. delegate pattern의 대표적인 예는 테이블 뷰, TextField. 테이블뷰 항목을 선택했을 때, 실행해야 하는 기능은 천차만별. 테이블 뷰는 항목을 선택했을 때, 어떤 기능을 실행해야 하는지 모른다. -> 이 부분을 대리자가 대신 처리하도록 위임한다. delegate pattern에서는 두 개의 객체가 존재한다. 기능을 위임하는 Table View / 테이블 뷰의 일부 기능을 ..
guard let url = URL(string: picUrlStr) else { fatalError("Invalid URL") } do { let data = try Data(contentsOf: url) imageView.image = UIImage(data: data) } catch { print(error) } 네트워크 코드는 이런 식으로 구현하지 않는다. 메인스레드에서 실행. 메인스레드가 다른 기능을 실행하지 못한다. 모든 네트워크 코드는 백그라운드 스레드에서 실행해야 한다. 이 코드는 동기 API인데 네트워크 코드는 반드시 비동기 API로 해야한다. 밑에 부분을 삭제하고, let task = URLSession.shared.dataTask(with: url) { (data, response, ..
순열 (Permutaion) Permutaion의 앞글자를 따서 P로 나타냄. nPr의 의미는 n개의 숫자에서 r개를 뽑아 정렬하는 가짓수이다. 예를 들어 {1, 2, 3}이란 수열이 있고, 여기서 두개를 뽑아 정렬하고자 할 때, n = 3, r = 2라고 하면, 가짓수는 3P2가 된다. 가짓수를 출력해보면 {1, 2}, {2, 1} {1, 3}, {3, 1} {2, 3}, {3, 2} 순서도 고려하므로 {1, 2}와 {2, 1}은 다르게 취급한다. 조합 (Combination) Combination의 앞글자를 따서 C로 나타낸다. nCr의 의미는 n개의 숫자에서 r개를 뽑는 경우의 수이다. 순서가 달라도 내용물이 같으면 같은 수열이다. 예를 들어 {1, 2, 3}이란 수열이 있고, 여기서 2개를 뽑는..
BFS(Breadth First Search, 너비 우선 탐색) 또한 그래프의 모든 정점들을 특정한 순서에 따라 방문하는 알고리즘입니다. 현재 정점과 인접한 간선들을 검사하다가 방문하지 않은 정점들을 발견하면, 그 간선을 통해 방문하지 않은 정점들을 자료구조 큐에 넣습니다. 그리고 큐의 front 정점을 방문하고 pop합니다. 또 해당 정점에서 인접한 간선을 검사해 방문하지 않은 정점들을 큐에 넣고 방문하는 과정을 반복하다가 더 이상 방문할 수 있는 정점이 없으면 종료합니다. 즉, 과정을 반복하다가 큐에 더 이상 정점이 존재하지 않을 때까지 실행하여 그래프의 모든 정점을 방문하는 알고리즘입니다. 결과적으로 이어진 것을 보면 최소 간선으로 이동할 수 있는 경로가 됩니다. (출처: 삼성 코드 그라운드) [시..
DFS(Depth First Search, 깊이 우선 탐색)는 그래프의 모든 정점들을 특정한 순서에 따라 방문하는 알고리즘 입니다.현재 정점과 인접한 간선들을 검사하다가 방문하지 않은 정점을 발견하면 그 간선을 통해 방문하지 않은 정점으로 이동합니다. 이 과정을 반복하다가 더 이상 반복할 수 있는 정점이 없으면 마지막으로 통과한 간선을 통해 뒤로 돌아가서 해당 정점에서 방문할 수 있는 정점을 탐색합니다. 이 과정을 반복하여 그래프의 모든 정점을 방문하는 알고리즘 입니다. (출처: 삼성 코드 그라운드) 즉,1) 특정한 순서대로 정점을 계속 방문하다가,2) 정점이 없으면 마지막으로 통과한 간선을 통해 뒤로 돌아가서3) 해당 정점에서 방문할 수 있는 정점을 탐색하는 방법입니다. [자료구조]필요한 자료구조로는,..
제네릭을 사용하면 함수를 작성하고, 어떠한 타입과도 동작할 수 있게 해줍니다. 코드의 중복을 피할 수 있기 때문에, 유연하고(flexible), 재사용성(reusable)이 높은 코드를 작성할 수 있습니다. 제네릭은 스위프트의 가장 큰 특징 중 하나입니다. 그리고 스위프트의 많은 standard library가 제네릭으로 작성되어 있습니다. (Array, Dictionary...) [제네릭으로 해결할 수 있는 문제점] 예를 들어 swap함수를 생각해보겠습니다. func swapTwoInts(_ a: inout Int, _ b: inout Int) { let tmp = a a = b b = tmp } 이 함수로는 Int 형의 두 수만 swap할 수 있습니다. String형, Double형의 값을 swap하..
프로토콜(Protocol)은 메소드, 속성에 대한 청사진이고, 다른 특정 기능에 대한 요구사항을 정의합니다. 프로토콜은 클래스나 구조체가 어떤 기준을 만족하거나 또는 특수한 목적을 달성하기 위해 구현해야 하는 메소드와 프로퍼티의 목록입니다. 프로토콜의 역할은 특정 기능이나 속성에 대한 설계도입니다. 프로토콜은 구체적인 내용이 없는 프로퍼티나 메소드의 단순한 선언 형태로 구성되며, 구체적인 내용은 이 프로토콜을 채용하는 객체에서 담당합니다. 프로토콜에서 중요한 것은 형식입니다. 프로토콜은 클래스, 구조체, 열거형에 채용(conform)될 수 있고, 이들이 실제 구현을 담당합니다. 프로토콜의 요구사항을 만족시키는 형식을 프로토콜을 채용(conform)한다. 라고 표현합니다. 특정 형식이 구현해야만 하는 요구..