본문 바로가기

분류 전체보기

(356)
Swift의 타입들 Types 타입 Type타입이란 직역하면 어떤 부류의 형, 유형, 모양, 생김새 입니다.프로그래밍에서 타입은 값이 가질 수 있는 형태와 그 값에 대해 수행할 수 있는 연산을 정의하는 개념입니다.더 나누면 정적타입, 동적타입이 존재하지만 이 글에서는 다루지 않습니다 이 글에서는 Swift에서 존재하는 타입들을 살펴볼 것 입니다.더 자세한 내용은 Swift.org에 있습니다  Swift의 타입Swift의 타입은 두가지 종류가 있습니다.명명된 타입 (named type): 특정 이름을 부여할 수 있는 타입으로 클래스, 구조체, 열거형, 프로토콜, 배열, 딕셔너리, 옵셔널 모두 해당됩니다. 필요에따라 확장할 수 있습니다.복합 타입 (compound type): 정의된 이름이 없는 타입으로 함수와 튜플이 있습니다. 복합 타..
[프로그래머스] 가장 먼 노드 Swift 문제 설명▼더보기문제 설명n개의 노드가 있는 그래프가 있습니다. 각 노드는 1부터 n까지 번호가 적혀있습니다. 1번 노드에서 가장 멀리 떨어진 노드의 갯수를 구하려고 합니다. 가장 멀리 떨어진 노드란 최단경로로 이동했을 때 간선의 개수가 가장 많은 노드들을 의미합니다.노드의 개수 n, 간선에 대한 정보가 담긴 2차원 배열 vertex가 매개변수로 주어질 때, 1번 노드로부터 가장 멀리 떨어진 노드가 몇 개인지를 return 하도록 solution 함수를 작성해주세요.제한사항노드의 개수 n은 2 이상 20,000 이하입니다.간선은 양방향이며 총 1개 이상 50,000개 이하의 간선이 있습니다.vertex 배열 각 행 [a, b]는 a번 노드와 b번 노드 사이에 간선이 있다는 의미입니다.입출력 예nverte..
[프로그래머스] 완전 범죄 Swift 문제 설명더보기 A도둑과 B도둑이 팀을 이루어 모든 물건을 훔치려고 합니다. 단, 각 도둑이 물건을 훔칠 때 남기는 흔적이 누적되면 경찰에 붙잡히기 때문에, 두 도둑 중 누구도 경찰에 붙잡히지 않도록 흔적을 최소화해야 합니다.물건을 훔칠 때 조건은 아래와 같습니다.물건 i를 훔칠 때,A도둑이 훔치면 info[i][0]개의 A에 대한 흔적을 남깁니다.B도둑이 훔치면 info[i][1]개의 B에 대한 흔적을 남깁니다. 각 물건에 대해 A도둑과 B도둑이 남기는 흔적의 개수는 1 이상 3 이하입니다.경찰에 붙잡히는 조건은 아래와 같습니다.A도둑은 자신이 남긴 흔적의 누적 개수가 n개 이상이면 경찰에 붙잡힙니다.B도둑은 자신이 남긴 흔적의 누적 개수가 m개 이상이면 경찰에 붙잡힙니다.각 물건을 훔칠 때 생기는 흔..
ARC dive deep ARC는 Automatic Reference Counting으로 참조타입의 참조 횟수를 자동으로 카운팅 되며 참조 수가 0이 되면 메모리에서 자동으로 해제하여 메모리 사용량을 관리합니다.자동으로 참조횟수를 트래킹 하지만, 강한 참조 사이클 같은 경우에는 각 객체가 소멸해도 강한 참조가 남아있어 메모리에 계속 유지되어 버리는 메모리 누수 현상이 발생하곤 합니다.그래서 메모리 누수 방지를 위해 weak, unowned 키워드를 종종 사용하곤 했습니다.  강한 참조 사이클 예시// 서로 참조하는 클래스 두개 생성class Person { let name: String init(name: String) { self.name = name } var apartment: Apartment? de..
후행 클로저 클로저가 아직 익숙하지 않아서 함수에서 사용된 후행클로저를 좀 자세히 알고 싶어서 작성합니다. 후행 클로저함수의 마지막 인수에 클로저 표현식을 전달해야 하고 클로저 표현식이 긴 경우 후행 클로저로 작성하면 가독성이 더 좋아집니다.func someFunctionThatTakesAClosure(closure: () -> Void) { // function body goes here}// Here's how you call this function without using a trailing closure:someFunctionThatTakesAClosure(closure: { // closure's body goes here})// Here's how you call this function wi..
메모리 사용량 확인을 위한 vmmap vmmap(Virtual Memory Map)vmmap이란 Xcode, macOS에서 사용하는 가상 메모리 매핑 도구입니다.특정 프로세스의 메모리 사용량을 맥 가상 메모리로 매핑하여 메모리 사용량을 보여줍니다.터미널에서 사용하며, 실 기기의 메모리가 아니라 맥 기반 메모리를 매핑하게 됩니다.  vmmap 사용방법Xcode에서 빌드 후 특정 프로세스중에서 확인하기 위해 break point를 걸거나 Debug Memory Graph를 열면 좌측에 프로젝트명 PID 번호가 나타나게 됩니다.터미널에서 해당 PID를 이용하여 vmmap을 실행할 수 있습니다.$ vmmap PID_DATA, _TEXT:  실행코드 및 전역변수malloc: 힙 영역malloc guard page: 힙 오버플로우를 방지용 영역stac..
enum의 다른 사용방법 Enum어떠한 객체나 UI같은 하나의 상태를 타입으로 나타낼 때 열거형(enum)을 자주 사용했었습니다.enum State { case run case walk case sleep case eat case seat}// 배열로 사용한다면..?var state = ["run", "walk", "sleep", "eat", "seat"]배열로 사용하면 인덱스 범위를 넘어가거나 올바른 문자열을 받지 못하는 사이드 이펙트를 경험하기도 했습니다.이를 열거형으로 사용하면 정해진 범위의 타입으로 지정할 수 있어서 코드 가독성과 사이드이펙트를 줄일 수 있었습니다. 오늘 알아볼 것은 이런 단순하게 상태에 대한 정의를 넘어서 더 다양한 방식들을 사용해보려고 합니다. 연관값열거형의 case는 각 상..
숫자 야구게임을 프로토콜지향 프로그래밍으로 리팩토링 해보기 숫자 야구게임을 만들어 보며.. 늘 같은 구조로 설계하는 느낌이 들어서 새로운 방법을 시도해보기 위해 최근에 공부했던 protocol을 적극 사용해서 Protocol Oriented Programming 방식으로 리팩토링 해보려고 합니다. 리팩토링하기 전엔 각 기능들을 메서드로 구현하여 클래스 안에 담았습니다.코드는 아래와 같습니다!더보기class NumberBaseballGame { private var answer: [Int] = [] private var records: [(game: Int, tryCount: Int)] = [] private var currentGameIndex = 0 private var currentState: GameState = .none { ..