분류 전체보기(223)
-
[iOS] Concurrency Programming (동시성 프로그래밍) 2 : GCD, DispatchGroup, DispatchWorkItem
👉 이전 글 [iOS] Concurrency Programming (동시성 프로그래밍) 1 : Sync (동기), Async (비동기) 👉 시작 프로그래밍을 하면서 가장 어려웠던 부분이 비동기 처리였던 거 같다. 예전에 비동기라는 개념을 몰랐던 학생시절에 프로젝트를 만들면서 엄청난 고생을 했던 적이 떠오른다 ,, ㅎㅎ nlestory.tistory.com 👉 시작 위의 글에서는 동시성 프로그래밍과 비슷한 개념에 대해서 공부했다. 동시성 프로그래밍을 하기 위해서 iOS에서 제공하는 기술인 GCD와 Operation가 있다 이번에는 GCD에 대해서 공부해보았다. 👉 GCD (Grand Central Dispatch) = Dispatch 시스템에서 관리하는 디스패치 큐에 작업을 제출하여 멀티코어 하드웨어에서 ..
2023.03.15 -
[iOS] Concurrency Programming (동시성 프로그래밍) 1 : Sync (동기), Async (비동기)
👉 시작 프로그래밍을 하면서 가장 어려웠던 부분이 비동기 처리였던 거 같다. 예전에 비동기라는 개념을 몰랐던 학생시절에 프로젝트를 만들면서 엄청난 고생을 했던 적이 떠오른다 ,, ㅎㅎ 서버와 통신하면서 반드시 필요한 비동기처리,, iOS에서 비동기를 처리할 때 GCD를 사용하여 구현한다. 디스패치큐와 컴플리션 블럭을 활용하여 처리한다. 그렇다면 비동기와 비슷하게 생긴 동시성은 무엇인가? 이번에는 동기와 비동기, 직렬과 동시에 대해서 알아보았다. 👉 Sync (동기) / Async (비동기) ✔️ Sync (동기) 프로그램의 흐름과 이벤트의 발생 및 처리를 종속적으로 수행하는 방법이다. 작업이 끝나는 것을 기다린 후 다음 작업을 처리한다. import UIKit class ViewController: ..
2023.03.15 -
[iOS] UIView의 Life Cycle (생명주기)
👉 시작 이제 스토리보드가 아닌 코드베이스 UI로 구현하는 것이 편해지고 익숙해졌다. MVC패턴을 구현하면서 View 와 ViewController 를 분리하게 되면서 UIView 를 많이 다루게 되었다. UIView를 UIViewController에 연결하면서 호출순서가 헷갈리기 시작했다. UIView의 메서드들을 공부하면서 서로의 호출순서를 비교해보기로 했다. 또한 코드베이스 UI를 만들면 init(frame: ) 을 사용하는 데 required init(coder: )를 생성해야 에러가 사라지는 것을 볼 수 있다. xcode에서 바로 에러를 잡아주어서 단순히 넘어갔지만 공부를 해보기로 했다. 먼저 공부를 하고 나서 사용했어야 했는데 순서가 잘못되었지만 그래도 지금이라도 궁금해져서 다행이다 ㅎㅎ 제대..
2023.03.09 -
[iOS] super.viewDidLoad() 호출하는 이유
👉 시작 override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. } 프로젝트를 처음 생성하면 ViewController 에 ViewDidLoad()는 기본으로 구현되어 있는 메소드이다. 생명주기 메소드를 작성하다가 호출할 때마다 superClass를 작성하는 것이 자연스럽게 호출하게 되었다. 당연히 슈퍼클래스의 내용을 상속받아 재정의하는 의미라고는 알고 있었지만 까먹고 작성하지 않았을 때가 있었는 데 호출을 하지 않아도 에러가 나지 않았다. 이 부분에서 super.viewDidLoad() 메소드를 호출하는 이유가 궁금해져서 찾아보았다. 👉 SuperClass (슈퍼클래스) 를 호출..
2023.03.07 -
[iOS/Swift] RxSwift 기본 개념
👉 RxSwift 란? ‘RxSwift is a library for composing asynchronous and event-based code by using observable sequences and functional style operators, allowing for parameterized execution via schedulers. By Marin Todorov. ‘RxSwift — Reactive Programming with Swift.’ 관찰 가능한 시퀀스와 함수 스타일 연산자를 사용하여 비동기 및 이벤트 기반 코드를 구성하는 라이브러리이다. 새로운 데이터에 반응하며 순차적으로 처리하게 함으로써 비동기 프로그램을 쉽게 하도록 도와준다. ✔️ RxSwift 사용하는 이유 ? 비동기..
2023.03.05 -
[UIKit] 웹이미지 다운받기(비동기 처리) -Closure, RxSwift
🧸 시작 이미지뷰와 버튼을 통해서 웹 이미지를 다운받아 보는 방법이다. 간단하게 버튼을 누르면 이미지가 나타나는 기능을 구현할 것이다. 이번에는 코드베이스가 아닌 스토리보드로 진행할 것이다. 🧸 스토리보드에 ImageView(이미지뷰)와 Button(버튼)을 추가한다. import UIKit class ViewController: UIViewController { @IBOutlet weak var imageView: UIImageView! @IBOutlet weak var loadImageBtn: UIButton! override func viewDidLoad() { super.viewDidLoad() } @IBAction func didTabLoadImageBtn(_ sender: Any) { } } ..
2023.03.05 -
[알고리즘] Swift -백준 #10026(적록색약) -DFS
문제링크 https://www.acmicpc.net/problem/10026 10026번: 적록색약 적록색약은 빨간색과 초록색의 차이를 거의 느끼지 못한다. 따라서, 적록색약인 사람이 보는 그림은 아닌 사람이 보는 그림과는 좀 다를 수 있다. 크기가 N×N인 그리드의 각 칸에 R(빨강), G(초록) www.acmicpc.net 문제 적록색약은 빨간색과 초록색의 차이를 거의 느끼지 못한다. 따라서, 적록색약인 사람이 보는 그림은 아닌 사람이 보는 그림과는 좀 다를 수 있다. 크기가 N×N인 그리드의 각 칸에 R(빨강), G(초록), B(파랑) 중 하나를 색칠한 그림이 있다. 그림은 몇 개의 구역으로 나뉘어져 있는데, 구역은 같은 색으로 이루어져 있다. 또, 같은 색상이 상하좌우로 인접해 있는 경우에 두 글..
2023.03.03 -
[알고리즘] Swift -백준 #1189(컴백홈) -DFS, 백트래킹
문제링크 https://www.acmicpc.net/problem/1189 1189번: 컴백홈 첫 줄에 정수 R(1 ≤ R ≤ 5), C(1 ≤ C ≤ 5), K(1 ≤ K ≤ R×C)가 공백으로 구분되어 주어진다. 두 번째부터 R+1번째 줄까지는 R×C 맵의 정보를 나타내는 '.'과 'T'로 구성된 길이가 C인 문자열이 주어진다 www.acmicpc.net 문제 한수는 캠프를 마치고 집에 돌아가려 한다. 한수는 현재 왼쪽 아래점에 있고 집은 오른쪽 위에 있다. 그리고 한수는 집에 돌아가는 방법이 다양하다. 단, 한수는 똑똑하여 한번 지나친 곳을 다시 방문하지는 않는다. cdef ...f ..ef ..gh cdeh cdej ...f bT.. .T.e .Td. .Tfe bTfg bTfi .Tde a... ..
2023.03.03 -
[UIKit] No StroyBoard -TableViewCell (테이블뷰셀) 내부의 버튼이 클릭되지 않을 때
🧸 시작 테이블뷰셀에 버튼을 만들어서 클릭 이벤트를 주었지만 작동하지 않았다. 테이블뷰셀을 클릭하는 것은 작동되었으나 내부에 있는 버튼은 클릭이 되지 않았다. 🧸 문제 해결하기 처음에는 생명주기나 호출의 문제로 생각했지만 뷰의 계층적인 문제였다. 계층을 보게되면 파란색 네모박스는 버튼이고 버튼 앞에 contentView 라는 것이 존재했다. 그러니 아무리 클릭을 해도 버튼을 클릭하는 것이 아니라 뷰를 클릭하게 된 것이다. 코드베이스로 뷰를 작성하면서 테이블뷰셀의 컴포넌트들을 추가하는 뷰가 잘못되었다. func setAddSubViews() { self.addSubview(loadIV) self.addSubview(loadPV) self.addSubview(loadBtn) } 기존에는 self.addSub..
2023.03.01 -
[UIKit] No StroyBoard -Navigation Controller (네비게이션 컨트롤러)와 TabBar Controller (탭바컨트롤러) 만들기
🧸 네이베이션 컨트롤러 ✔️ 네비게이션 컨트롤러 생성하기 func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { //윈도우 씬을 가져온다 guard let windowScene = (scene as? UIWindowScene) else { return } //윈도우 크기 설정 window = UIWindow(frame: UIScreen.main.bounds) //뷰컨트롤러 인스턴스 생성 let vc = ViewController() //네비게이션 컨트롤러 설정 let navVC = UINavigationController(rootViewCo..
2023.03.01 -
[UIKit] No StroyBoard -ViewController에서 View와 Controller 분리하기
🧸 시작 MVC 패턴을 하려고하면 view와 controller가 분리되어있는데 스토리보드를 이용하면 view로 볼 수 있지만 코드베이스로 구성하게 되면 이제 ViewController에 작성하게 되면서 코드가 엄청 길어진다. view를 그리는 부분과 관리하는 부분으로 나눠서 작성하면 보기에도 빠르고 편해진다. 🧸 View 파일 생성하기 [New file...] -> [Cocoa Touch Class] -> UIView 파일 생성 🧸 View 파일 작성하기 import UIKit import SnapKit class View: UIView { lazy var redBtn: UIButton = { let btn = UIButton() btn.backgroundColor = .systemRed btn.set..
2023.03.01 -
[UIKit] Snapkit (스냅킷) 사용해보기
🧸 시작 코드베이스를 도와주는 snapkit 라이브러리를 사용해서 화면을 생성해보자~ 🧸 스냅킷 설치 2023.02.28 - [PROJECT/iOS] - [iOS/Swift] pod 설치방법 [iOS/Swift] pod 설치방법 2022.08.14 - [PROJECT/iOS] - [iOS/Swift] 스토리보드 없는 프로젝트 세팅 [iOS/Swift] 스토리보드 없는 프로젝트 세팅 프로젝트 생성 Main Interface 부분 삭제 Main 스토리보드 삭제 Info.plist 파일에서 스토리보드 nlestory.tistory.com 이제 준비는 끝 viewController 에서 화면을 만들어준다. 🧸 화면에 보여줄 버튼을 생성하고 뷰에 추가한다. import UIKit class ViewControl..
2023.02.28 -
[iOS/Swift] pod 설치방법
🧸 시작 스냅킷은 코드베이스이기 때문에 스토리보드가 필요없다. 스토리보드 없는 프로젝트 세팅을 먼저 해주고 시작한다. 2022.08.14 - [PROJECT/iOS] - [iOS/Swift] 스토리보드 없는 프로젝트 세팅 [iOS/Swift] 스토리보드 없는 프로젝트 세팅 프로젝트 생성 Main Interface 부분 삭제 version 14.2 Main 스토리보드 삭제 Info.plist 파일에서 스토리보드 삭제 메인 VC 설정 SceneDelegate 파일에 가서 설정한다 func scene(_ scene: UIScene, willConnectTo session: UISce nlestory.tistory.com 🧸 터미널을 열고 자신의 프로젝트가 있는 폴더로 이동한다. cd 원하는_경로 cd 명령어..
2023.02.28 -
[알고리즘] Swift -백준 #7562(나이트의 이동) -BFS
문제링크 https://www.acmicpc.net/problem/7562 7562번: 나이트의 이동 체스판 위에 한 나이트가 놓여져 있다. 나이트가 한 번에 이동할 수 있는 칸은 아래 그림에 나와있다. 나이트가 이동하려고 하는 칸이 주어진다. 나이트는 몇 번 움직이면 이 칸으로 이동할 수 www.acmicpc.net 문제 체스판 위에 한 나이트가 놓여져 있다. 나이트가 한 번에 이동할 수 있는 칸은 아래 그림에 나와있다. 나이트가 이동하려고 하는 칸이 주어진다. 나이트는 몇 번 움직이면 이 칸으로 이동할 수 있을까? 입력 입력의 첫째 줄에는 테스트 케이스의 개수가 주어진다. 각 테스트 케이스는 세 줄로 이루어져 있다. 첫째 줄에는 체스판의 한 변의 길이 l(4 ≤ l ≤ 300)이 주어진다. 체스판의 ..
2023.02.27 -
[알고리즘] Swift -백준 #14888(연산자 끼워넣기) -DFS
문제링크 https://www.acmicpc.net/problem/14888 14888번: 연산자 끼워넣기 첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1인 4개의 정수가 주어지는데, 차례대로 덧셈(+)의 개수, 뺄셈(-)의 개수, www.acmicpc.net 문제 N개의 수로 이루어진 수열 A1, A2, ..., AN이 주어진다. 또, 수와 수 사이에 끼워넣을 수 있는 N-1개의 연산자가 주어진다. 연산자는 덧셈(+), 뺄셈(-), 곱셈(×), 나눗셈(÷)으로만 이루어져 있다. 우리는 수와 수 사이에 연산자를 하나씩 넣어서, 수식을 하나 만들 수 있다. 이때, 주어진 수의 순서를 바꾸면 ..
2023.02.25 -
[iOS] AppDelegate와 SceneDelegate, App의 Life Cycle(생명주기)
👉 Life Cycle (생명주기) 생명주기란 앱의 최초 실행과 종료 사이에 발생하는 이벤트로 구성된다. 생명주기에는 App 생명주기와 ViewController 생명주기가 있다. 2023.02.24 - [iOS/iOS] - [iOS] ViewController의 생명주기(Life Cycle) 👉 AppDelegate와 SceneDelegate iOS 12 이전 iOS 13 이후 iOS 12 까지는 대부분 하나의 앱에 하나의 window였지만 iOS 13부터는 window의 개념이 scene으로 대체되고 하나의 앱에서 여러개의 scene을 가질 수 있다. 기존에는 한 번에 하나의 화면만 보여주었지만 이제는 동일한 앱을 스플릿뷰로 나눠서 실행할 수 있게 되었다. 이런 경우 사용자가 실제로 사용하는 앱은 하..
2023.02.24 -
[iOS] ViewController의 Life Cycle(생명주기)
👉 ViewController 뷰컨트롤러란 사용자 인터페이스를 관리하고 화면에 내용을 표시하는 데 사용되는 객체이다. 앱의 로직과 데이터를 조정하고 화면에 표시되는 내용을 관리한다. 뷰컨트롤러는 생명주기를 따르며 화면의상태변화에 따라 적절한 메소드를 호출하여 초기화, 데이터로딩, 화면전환, 리소스 해제 등을 관리한다. 뷰컨트롤러는 iOS앱의 핵심 구성요소 중 하나이며, 사용자 인터페이스와 앱의 동작을 관리하는 중요한 역할을 수행한다. ✔️ 역할 수행 화면 관리 : 앱의 각 화면을 담당하며 해당 화면의 뷰 계층 구조를 관리한다. 뷰컨트롤러는 화면의 모양과 동작을 결정하고 사용자 인터페이스 요소들을 관리하며 데이터와 뷰를 연결한다. 상태 관리 : 뷰컨트롤러는 화면 전환과 같은 상태변화에 대응하여 적절한 동작..
2023.02.24 -
[알고리즘] Swift -백준 #1697(숨바꼭질) -BFS
문제링크 https://www.acmicpc.net/problem/1697 1697번: 숨바꼭질 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 www.acmicpc.net 문제 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 때 걷는다면 1초 후에 X-1 또는 X+1로 이동하게 된다. 순간이동을 하는 경우에는 1초 후에 2*X의 위치로 이동하게 된다. 수빈이..
2023.02.24 -
[알고리즘] Swift -백준 #2468(안전 영역) -DFS
문제링크 https://www.acmicpc.net/problem/2468 2468번: 안전 영역 재난방재청에서는 많은 비가 내리는 장마철에 대비해서 다음과 같은 일을 계획하고 있다. 먼저 어떤 지역의 높이 정보를 파악한다. 그 다음에 그 지역에 많은 비가 내렸을 때 물에 잠기지 않는 www.acmicpc.net 문제 재난방재청에서는 많은 비가 내리는 장마철에 대비해서 다음과 같은 일을 계획하고 있다. 먼저 어떤 지역의 높이 정보를 파악한다. 그 다음에 그 지역에 많은 비가 내렸을 때 물에 잠기지 않는 안전한 영역이 최대로 몇 개가 만들어 지는 지를 조사하려고 한다. 이때, 문제를 간단하게 하기 위하여, 장마철에 내리는 비의 양에 따라 일정한 높이 이하의 모든 지점은 물에 잠긴다고 가정한다. 어떤 지역의..
2023.02.24 -
[알고리즘] Swift -백준 #10451(순열 사이클) -DFS
문제링크 https://www.acmicpc.net/problem/10451 10451번: 순열 사이클 1부터 N까지 정수 N개로 이루어진 순열을 나타내는 방법은 여러 가지가 있다. 예를 들어, 8개의 수로 이루어진 순열 (3, 2, 7, 8, 1, 4, 5, 6)을 배열을 이용해 표현하면 \(\begin{pmatrix} 1 & 2 &3&4&5&6&7&8 \\ 3 www.acmicpc.net 문제 1부터 N까지 정수 N개로 이루어진 순열을 나타내는 방법은 여러 가지가 있다. 예를 들어, 8개의 수로 이루어진 순열 (3, 2, 7, 8, 1, 4, 5, 6)을 배열을 이용해 표현하면 와 같다. 또는, Figure 1과 같이 방향 그래프로 나타낼 수도 있다. 순열을 배열을 이용해 로 나타냈다면, i에서 πi..
2023.02.20