swift 42

[Swift] 싱글톤 패턴 (Singleton Pattern)

[Swift] 싱글톤 패턴 (Singleton Pattern) 싱글톤 패턴이란, 특정 용도로 객체를 하나만 생성하여 공용으로 사용하고 싶을 때 사용하는 디자인 패턴입니다. 클래스가 여러차례 호출되더라도, 인스턴스는 딱 한번만 생성되게 하는 것입니다. 이렇게 되면 전역변수처럼 코드의 어느 곳에서 접근하던 간에 같은 메모리에 접근이 가능해집니다. 예제 사용자의 정보를 저장하는 UserInfo 라는 클래스를 만들고 A, B, C 라는 3개의 ViewController 가 있다고 가정해보겠습니다. A 에서는 사용자의 이름을, B 에서는 사용자의 전화번호를, C 에서는 사용자의 주소를 추가하기 위해 각각 UserInfo 인스턴스를 생성하여 값을 넣어주었습니다. 하지만 이렇게 된다면 A, B, C 에서 각각 인스턴..

iOS 개발/Swift 2022.05.20

[백준] 1976.여행 가자 (Swift, Java)

[백준] 1976.여행 가자 (Swift, Java) https://www.acmicpc.net/problem/1976 1976번: 여행 가자 동혁이는 친구들과 함께 여행을 가려고 한다. 한국에는 도시가 N개 있고 임의의 두 도시 사이에 길이 있을 수도, 없을 수도 있다. 동혁이의 여행 일정이 주어졌을 때, 이 여행 경로가 가능한 것인 www.acmicpc.net 풀이 1. BFS 입력은 인접행렬로 표현된 그래프가 주어지고, 마지막 줄에는 방문할 노드들이 순서대로 주어집니다. 처음에는 단순히 방문한 노드들을 차례대로 2개씩 뽑아서 BFS 를 진행할 생각이었습니다. 최단 경로가 존재한다면 true 를 리턴하고, 존재하지 않는다면 false 를 리턴하는 방식으로 접근하면 된다고 생각했습니다. 하지만 m 번만..

[Swift] 타입 캐스팅 (Type Casting)

[Swift] 타입 캐스팅 (Type Casting) 타입 캐스팅은 인스턴스의 타입을 확인하거나 어떠한 클래스 인스턴스를 해당 클래스 계층 구조의 슈퍼 클래스나 서브 클래스로 캐스팅하는 방법입니다. Swift 에서 타입 캐스팅은 is 와 as 연산자로 구현됩니다. 이 두 연산자는 값의 타입을 확인하거나 값을 다른 타입으로 캐스팅하는 간단한 방법을 제공합니다. 타입 캐스팅을 이용하여 타입이 프로토콜을 준수하는지 확인할 수도 있습니다. 타입 캐스팅을 위한 클래스 계층 정의 클래스 및 서브 클래스들의 계층 구조와 타입 캐스팅을 이용한다면 특정 클래스 인스턴스의 타입을 확인하고 해당 인스턴스를 동일한 계층 구조 내의 다른 클래스로 캐스팅할 수 있습니다. 위의 코드에는 MediaItem 이라는 클래스와, 이를 상..

iOS 개발/Swift 2022.05.19

[프로그래머스] 네트워크 (Swift)

[프로그래머스] 네트워크 (Swift) https://programmers.co.kr/learn/courses/30/lessons/43162 코딩테스트 연습 - 네트워크 네트워크란 컴퓨터 상호 간에 정보를 교환할 수 있도록 연결된 형태를 의미합니다. 예를 들어, 컴퓨터 A와 컴퓨터 B가 직접적으로 연결되어있고, 컴퓨터 B와 컴퓨터 C가 직접적으로 연결되어 있 programmers.co.kr 풀이 이차원 배열로 주어진 그래프 정보에서 총 그래프의 개수를 구하는 문제입니다. 해당 문제를 풀기 위해서는 한 그래프를 모두 탐색한 다음 그 횟수를 구하면 된다고 생각했습니다. DFS 나 BFS 모두 한번 실행할 시 그래프 전체를 탐색하지만 이번에는 DFS 를 활용해봤습니다. 그래프 탐색 여부를 저장하기 위해 먼저 ..

[백준] 16197.두 동전 (Swift)

[백준] 16197.두 동전 (Swift) https://www.acmicpc.net/problem/16197 16197번: 두 동전 N×M 크기의 보드와 4개의 버튼으로 이루어진 게임이 있다. 보드는 1×1크기의 정사각형 칸으로 나누어져 있고, 각각의 칸은 비어있거나, 벽이다. 두 개의 빈 칸에는 동전이 하나씩 놓여져 있고, www.acmicpc.net 풀이 주어진 2차원 배열 위에서 최단 거리를 찾아야 하니 BFS 로 해결할 수 있는 문제입니다. 다만 일반적인 BFS 문제와 조금 다른 점은 2개의 포인트가 동시에 같은 방향으로 움직인다는 것입니다. 움직이는 동전 2개 중 오직 1개만 보드 밖으로 나가게 되거나 움직이는 횟수가 10 보다 커지면 BFS 는 종료되어야 합니다. 동전이 보드를 탈출하지 못하..

[Swift] 프로토콜 (Protocols)

[Swift] 프로토콜 (Protocols) 프로토콜은 메소드, 프로퍼티, 요구사항의 청사진을 정의합니다. 프로토콜은 클래스, 구조체, 열거형에 의해 채택될 수 있으며 이 때 프로토콜이 요구하는 사항을 모두 충족하면 해당 프로토콜을 준수한다고 합니다. 준수해야 하는 타입의 요구사항을 정의하는 것 외에도 요구사항의 일부를 구현하거나, 준수하는 타입에 추가 기능을 구현하기 위해 프로토콜을 확장할 수 있습니다. 프로토콜 구문 프로토콜은 클래스, 구조체, 열거형과 비슷한 방법으로 선언할 수 있습니다. 프로퍼티, 메소드 요구사항 프로퍼티 프로퍼티는 타입과 이름만 지정 연산 프로퍼티인지, 저장 프로퍼티인지는 지정하지 않음 타입 프로퍼티는 항상 static 키워드 사용 gettable / settable 여부 작성 ..

iOS 개발/Swift 2022.05.13

[Swift] 확장 (Extensions)

[Swift] 확장 (Extensions) Extensions 는 이미 선언된 클래스, 구조체, 열거형 혹은 프로토콜 타입에 새로운 기능을 추가할 수 있다는 것을 의미합니다. Extensions 를 이용하면 다음과 같은 일을 수행할 수 있습니다. Computed Property 추가 메소드 정의 새로운 initializer Subscript 정의 Nested Type 정의 기존 타입이 Protocol 을 채택하도록 함 Extension 구문 extensions 키워드를 이용하여 선언할 수 있습니다. Extension 은 하나 이상의 Protocol 을 채택하여 기존 타입을 확장할 수 있습니다. 연산 프로퍼티 (Computed Properties) 확장을 이용하여 기존 타입에 연산 프로퍼티를 추가할 수 있..

iOS 개발/Swift 2022.05.13

[프로그래머스] 파괴되지 않은 건물 (Swift)

[프로그래머스] 파괴되지 않은 건물 (Swift) https://programmers.co.kr/learn/courses/30/lessons/92344 코딩테스트 연습 - 파괴되지 않은 건물 [[5,5,5,5,5],[5,5,5,5,5],[5,5,5,5,5],[5,5,5,5,5]] [[1,0,0,3,4,4],[1,2,0,2,3,2],[2,1,0,3,1,2],[1,0,1,3,3,1]] 10 [[1,2,3],[4,5,6],[7,8,9]] [[1,1,1,2,2,4],[1,0,0,1,1,2],[2,2,0,2,0,100]] 6 programmers.co.kr 이해 처음 문제를 읽었을때는 생각보다 쉽네? 라는 마음이었습니다. 카카오 문제라서 그렇게 쉽진 않겠지... 라는 생각에 다른 방법을 생각해보려고 노력했지만 완..

[Swift] ARC (2/2)

[Swift] ARC (2/2) [Swift] ARC (1/2) 보러가기 [Swift] ARC (1/2) [Swift] ARC (Automatic Reference Counting) 앱의 메모리 사용량을 추적하고 관리 어떠한 클래스 인스턴스가 더 이상 필요하지 않을 때 인스턴스에 할당된 메모리 자동해제 Reference Type 인 클래스 인스턴스 trumanfromkorea.tistory.com 클로저에 대한 강한 참조 사이클 (순환 참조) 순환 참조는 클래스 인스턴스의 프로퍼티에 클로저를 할당하고 해당 클로저의 바디에 인스턴스를 캡처하는 경우에도 발생할 수 있습니다. 클로저의 바디에서 self.someProperty 와 같이 인스턴스의 프로퍼티에 접근하거나 self.someMethod() 와 같이 인..

iOS 개발/Swift 2022.04.29

[Swift] ARC (1/2)

[Swift] ARC (Automatic Reference Counting) 앱의 메모리 사용량을 추적하고 관리 어떠한 클래스 인스턴스가 더 이상 필요하지 않을 때 인스턴스에 할당된 메모리 자동해제 Reference Type 인 클래스 인스턴스에만 적용. Value Type 에는 해당되지 않음 동작 방식 클래스가 새 인스턴스를 생성할때마다 ARC 는 메모리 할당 인스턴스의 메모리가 해제되면 더 이상 해당 인스턴스에 접근 불가능 그래서 ARC 는 인스턴스가 언제까지 필요한지 알기 위해 인스턴스를 참조하는 프로퍼티, 상수, 변수의 수를 추적함 클래스 인스턴스를 할당하기 위해 변수를 3개 선언하고, 나중에 nil 을 할당하여 해제해주기 위해 Optional 로 선언합니다. reference1 변수에 클래스 인..

iOS 개발/Swift 2022.04.29