이번에 이라는 개인앱 프로젝트를 진행하면서 네이버맵과 네이버 Cloud API를 사용하였었다. 구현하려는 기능에 대한 정보를 많이 찾을 수 없어서 이번에 구현한 기술들과 구현을 하며 알게 된 정보를 공유해보려고 한다. 1. CocoaPod 설치하기 아래는 CocoaPod을 처음 사용하는 사람들은 위한 설치 순서이다. 무조건 순서대로 설치를 해줘야하며, 명령어를 입력하고 설치되는 데까지 시간이 좀 걸릴 수 있으니 기다려야 한다. 만일 CocoaPod이 설치되어 있지 않다면 터미널을 켜서 아래 명령어를 입력해 준다.sudo gem install cocoapods 만일 HomeBrew가 설치되어 있지 않다면 아래 명령어를 입력해서 설치해 준다./bin/bash -c "$(curl -fsSL https:..
[iOS] 메모리 구조이번 글에서는 개발자가 작성하는 코드가 메모리에서 어떤 부분에 저장되는지 알아보려고 한다. 메모리 구조프로그램이 실행되면 운영체제(OS)는 메모리(RAM)에 프로그램을 위한 공간을 할당해d0ngurrrrrrr.tistory.com 앞서 메모리 구조(코드, 데이터, 힙, 스택)에 대해서 공부를 하였는데, 이 중 힙, 스택의 장/단점을 보면서 이 둘에 대해 더 알아보겠다고 했는데, 이번 글에서는 힙, 스택과 더불어 struct, class까지 자세하게 알아보자. 힙, 스택 언제 쓰면 될까? 앞선 글에서 스택은 메모리가 한정되어 있기에너무 큰 메모리는 할당할 수 없다고 하였다. 따라서 테이터의 크기를 모르거나, 스택에 저장하기엔 큰 데이터는 힙에 할당하고 그 외엔 스택에 할당하면 된다..
· 아이디어💡 우선 BFS를 활용하여 문제를 풀 예정이다. 배열을 사용하고, 델타 탐색을 이용해서 행렬의 각 요소들을 탐색할 예정이고, 값이 1인 시작점으로부터 계속 +1을 해서 배열의 최댓값에서 -1을 하여 print 할 것이다. · 코드 😵😵💫 풀이 1. (시간초과) func boj7576() { // 배열 크기 입력 let size = readLine()!.split(separator: " ").map { Int($0)! } let col = size[0] let row = size[1] // 배열 세팅 var arr: [[Int]] = [] var queue: [(Int, Int)] = [] for _ in 0..
이번 글에서는 개발자가 작성하는 코드가 메모리에서 어떤 부분에 저장되는지 알아보려고 한다. 메모리 구조프로그램이 실행되면 운영체제(OS)는 메모리(RAM)에 프로그램을 위한 공간을 할당해 준다.공간은 총 4가지(코드, 데이터, 힙, 스택)의 공간으로 나눠져 있다. 빌드를 통해 실행파일로 만들면, OS는 정보를 파악하여 메모리 공간에 할당하고그 이후, OS는 코드를 읽고 쓰며 동작을 시작하게 된다. 그럼 하나하나 짚고 넘어가 보자! 코드(Code) 영역 우리가 작성한 소스 코드는 기계어 형태로 저장이 된다.컴파일 타임에 결정되며, 중간에 코드가 변경되지 않도록 Read-Only 형태로 저장된다. 데이터(Data) 영역 전역변수, static 변수, 상수, 타입 메타데이터 등이 저장되는 곳이다.프로그..
모든 iOS 앱은 URLSession을 사용하고 있다고 해도 과언이 아니다. 이번 글에서는 거의 모든 앱에서 사용하는 URLSession에 대해서 알아보자. URLSession?? iOS 앱에서 서버와 통신하기 위해 애플에서 제공하는 API이다. URLSession을 활용하면 iOS 앱이 실행 중이지 않을 때도 백그라운드에서 다운로드가 가능하다. 그리고 URLSession을 프로젝트에서 사용할 수 있겠지만 이를 추상화한 Alamofire나 Moya를 보통 많이 사용한다. 즉, Alamofire나 Moya 역시 URLSession을 기반으로 동작을 하는 것이기 때문에, URLSession에 대해 알아둘 필요가 있다. URLSessionConfiguration URLSessionConfigurati..
· 아이디어💡 이 문제에 접근 방법은 두 가지가 있다. 하나는 큐를 구현해서 푸는 방법과 큐를 구현하지 않고 푸는 방법이 있다. 결론적으론 두 방법 다 같은 원리로 접근해서 푸는 방법이긴 하다. 포인터 큐를 사용할 예정인데, dequeue를 하면 front라는 제일 처음 인덱스를 +1을 계속해줌으로 써 dequeue를 한 배열은 배제하고 그 이후 인덱스부터 확인하는 방법이다. 큐를 구현하지 않고 푸는 방법도 같은 원리를 사용하는 방법이다. · 코드 😵😵💫 1. 큐를 구현해서 푸는 방법 struct QueuePointer { private var elements: [T] = [] private var front = 0 var isEmpty: Bool { elements.count < front + 1 }..