_WWDC26) What's new in Swift_에서 Copyable과 Escapable에 대한 내용이 언급되어 Copyable을 학습하기 위해 시청했습니다.CopyingAutomatic copying - structSwift에서 '값'은 고유한 값이 아닙니다. '값'은 복사가 가능하기 때문이에요.구조체는 값타입이기 때문에 값이 복사되어 player1과 player2가 서로 영향을 주지 않습니다.Automatic copying - class객체가 아니라 참조가 복사 됩니다. (얕은 복사라고 함)두 player 모두 동일한 객체를 참조하므로, 하나를 변경하면 다른 하나에 영향을 미쳐요.Deep copying여기서는 초기화 시 새로운 PlayerClass를 만들었기 때문에 player2는 다른 인스턴스를..
지난 글에서 "스토리보드를 사용하지 않는다면 window를 직접 만들어야 한다"는 이야기를 했는데요, 이번 글에서는 스토리보드를 사용하지 않을 때 window를 직접 만드는 방식에 대해 알아보겠습니다.1. Storyboard 제거Main.storyboard를 제거해주세요. 2. Info.plist에 있는 storyboard 설정 제거 3. Project target 설정target > build settings > info.plist values에서 storyboard 설정을 제거합니다. 4. SceneDelegate 코드 작성window를 직접 설정해주세요.var window: UIWindow?func scene(_ scene: UIScene, willConnectTo session: UISceneSe..
UIWindow 파헤치기스토리보드를 제거할 때 SceneDelegate에서 UIWindow 설정을 해주고 makeKeyAndVisible() 같은 메서드를 당연히 호출해왔는데요, 이번에 다시 UIWindow가 실제로 어떤 역할을 하는지 정리해봤습니다.UIWindow란?UIWindow는 이름 그대로 뷰를 담는 컨테이너로, 사용자 인터페이스에 배경을 제공하고, 이벤트 처리와 관련된 동작을 담당하는 객체입니다. window 자체는 시각적으로 그려지는 화면을 가지고 있지 않지만, 대신 인터랙션 처리, 좌표계 변환 같은 기능적인 역할을 담당합니다. 실제로 화면에 보이는 콘텐츠는 window가 호스팅하는 하나 이상의 뷰들이며, 이 뷰들은 window의 rootViewController가 관리해요. 일반적인 흐름..
XCTest와 Swift Testing의 차이를 학습하기 위해 해당 세션을 시청했습니다.이번 글에서는 Swift Testing의 구성 요소와 핵심 개념, XCTest와 Swift Testing의 차이에 대해 알아볼게요. 서비스의 품질과 안정성은 좋은 사용자 경험으로 직결됩니다.자동화된 테스트는 소프트웨어가 품질을 잘 유지하고 있는지 확인하는 수단이 되어요.2024년, 새로운 테스트 방식이 소개되었습니다. Swift TestingSwift를 사용해 테스트 가능한 오픈소스 패키지 1) Descriptive, organized tests 테스트를 설명하고 구성하는 기능2) Actionable failures 장애 발생 대응을 위한 세부 정보 제공3) Scalable 대규모 코드베이스에 맞..
이 글은 Link fast: Improve build and launch times(1)로부터 이어집니다.이번 글에서는 동적 링킹과, 동적 링크의 성능 향상을 위한 방법이 무엇인지 알아봅니다.What is dynamic linking?정적 라이브러리와 정적 링킹에 대한 다이어그램을 다시 살펴볼게요.사용할 수 있는 라이브러리가 점점 많아질 수록 최종 프로그램의 크기도 커지게 될거예요.정적 링크는 프로그램 빌드에 영향을 주기 때문에 빌드 시간도 증가하게 됩니다. 그러면 ar을 ld로 바꾸면 어떻게 될까요?ar은 .o 파일을 .a인 정적 라이브러리로 묶기만 할 뿐, OS가 바로 로드해서 실행할 수 있는 포맷이 아니예요. 하지만 링커인 ld는 실행 가능한 바이너리로 만들어줍니다. 이게 바로 동적 라이브러리의 시..
2025.06.22 기준 Gold4https://www.acmicpc.net/problem/14499알고리즘구현, 시뮬레이션문제 요약크기가 N×M인 2차원 지도 위에 주사위가 놓여 있다.주사위의 초기 위치는 (x, y)이고, 이동 명령이 순서대로 주어진다.주사위는 지도 바깥으로는 나갈 수 없으며, 나가려고 하면 그 명령은 무시된다.주사위를 굴릴 때마다 윗면에 적힌 숫자를 출력해야 한다.지도의 좌표는 (r, c)로 나타내며, r는 북쪽으로부터 떨어진 칸의 개수, c는 서쪽으로부터 떨어진 칸의 개수이다.주사위 전개도 2 4 1 3 5 6 가장 처음에 주사위에는 모든 면에는 0이 적혀져 있다. 1이 윗면, 3은 동쪽을 바라보도록 놓여있다. 지도 규칙주사위가 이동한 칸이 0이라면, 주사위 바닥..
tuist의 Firebase 의존성을 추가하는 과정에서 linking 오류가 발생했습니다. 문제 해결과정에서 linking 과정을 자세히 이해하고자 해당 세션을 시청했습니다. 이번 글에서는 링크 과정에서 발생하는 일과, 링크의 성능 향상을 위한 방법이 무엇인지 알아봅니다.linking이란 ?보통 직접 작성한 코드를 사용하지만, 라이브러리 또는 프레임워크와 같이 다른 사람이 작성한 코드를 사용하기도 합니다.직접 쓴 코드와 라이브러리를 함께 사용하려면 링커가 필요합니다.링커는 나의 코드와 외부의 코드를 합쳐 하나의 실행파일로 만드는 역할을 합니다. linking에는 두 가지 방법이 있습니다.static linking(정적 링크)앱을 빌드할 때 발생앱을 빌드하는 데 걸리는 시간과 앱의 최종 크기에 영향dy..
유니온파인드(Union-Find)란?서로소 집합(Disjoint-Set)이라고도 부르며,요소가 어떤 집합에 속하는지 찾는 파인드 연산과 두 요소를 같은 집합으로 묶는 유니온 연산으로 이루어져있습니다. 무방향 그래프에서 서로 연결된 요소를 추적할 때,서로 다른 두 요소가 같은 집합에 속하는지 확인할 때,간선을 추가했을 때 사이클이 발생하는지 확인(크루스칼 알고리즘)할 때 등 사용됩니다. 유니온파인드 이해하기parent 배열먼저 각 요소가 속하는 집합의 대표 노드를 나타내는 parent 배열이 필요합니다. parent[i]는 i번째 요소가 속한 집합의 대표 요소를 나타냅니다.5개의 요소가 존재할 때, 각 요소가 속한 집합은 자기 자신입니다. 유니온 연산두 요소 x, y가 속한 집합을 하나로 합칩니다.예시를..
벨만-포드(Bellman-Ford) 알고리즘이란?벨만-포드 알고리즘은 다이나믹 프로그래밍을 기반으로 한 최단거리 알고리즘으로, 다익스트라와 같이 한 정점에서 다른 정점으로 가는 최단거리를 구하는 알고리즘입니다.이 알고리즘은 음의 가중치를 허용하지만, 음의 사이클은 허용하지 않습니다. 대신 음의 사이클을 탐지할 수 있다는 장점이 있습니다.음의 사이클이 존재할 경우, 무한 루프에 빠질 수 있습니다.자세한 설명은 플로이드-워셜의 음의 사이클을 참고해주세요. 벨만-포드 알고리즘 이해하기벨만-포드는 다익스트라와 마찬가지로 한 정점에서 모든 정점까지의 최단 경로를 구합니다.출발 노드를 설정합니다.최단 거리 테이블을 초기화합니다 (출발 노드만 0, 나머지는 INF).(노드 개수 - 1)번 전체 간선을 순회하며 거리..
플로이드-워셜(Floyd-Warshall) 이란? 플로이드-워셜 알고리즘은 가중치가 있는 그래프에서 모든 노드 쌍의 최단 경로를 찾는 알고리즘입니다.다이나믹 프로그래밍 기법을 사용합니다.한 번의 실행으로 모든 쌍의 최단 거리를 구할 수 있습니다.음의 가중치는 허용되지만, 음의 사이클은 없어야 합니다. 음의 사이클이란?사이클: 그래프에서 한 정점에서 출발하여 다시 자신에게 돌아오는 경로음의 사이클: 사이클을 따라 이동했을 때 총 가중치의 합이 0보다 작은 경우 왜 문제가 될까?음의 사이클이 존재하면, 최단 경로가 끝없이 갱신되어 무한루프에 빠질 수 있기 때문입니다. 예를 들어 A → B → C → A로 돌아오는 총 비용이 -2인 사이클이 있다고 생각해 봅시다.사이클을 1회 돌았을 때 A → B → C → ..