일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
- 클린아키텍처
- IOS
- ai expo
- 애플인텔리전스
- CI/CD
- 알고리즘
- Content Compression Resistance priority
- 동시성프로그래밍
- RxSwift요약
- rxswift
- 백준
- swift
- 동작과정
- LLM
- AI
- Content Hugging priority
- apple intelligence
- 오토레이아웃
- gitlab
- 자료구조
- mvvm
- OperationQueue
- Autolayout
- gitlabci/cd
- Union-Find
- ReactiveX
- RxCocoa
- swift알고리즘
- cleanarchitecture
- CICD
- Today
- Total
목록swift (18)
JosephCha의 개발일지

목차 기본개념 Observable Subject Filtering Operator Transforming Operator Combinging Operator TimeBased Operator Error Handling RxCocoa 기본개념RxSwift 탄생 배경우리가 작성하는 코드의 대부분은 다양한 이벤트 처리와 관련됨. 예를들면, 사용자가 UI컴포넌트를 조작할때 응답할 IBAction handler, 키보드 위치 변경을 감지하기 위해 notification을 관찰해야함, urlsession이 데이터로 응답할 때 실행할 클로저, KVO를 사용해서 변수의 변경사항을 감지해야함. 이러한 각각 다른 이벤트 처리는 모두 코드를 복잡하게 만듬.또한 일반적으로 대부분의 클래스들은 비동기적으로 작..

ViewController에서의 화면전환 문제점은? 1. ViewController에서 화면 전환은 아래 코드처럼 간단히 구현할 수 있음 self.navigationController?.present(anotherViewController, animated: true) 2. 하지만 앱이 화면이 많아지고 복잡해짐에 따라, 동일한 화면으로 화면 전환하고 싶은 곳이 많아지거나 기존 같은 화면이 아닌 다른 화면으로 전환하고 싶게 된다면, 해당 코드들을 다 찾으면서 수정하는 번거로운 일이 발생함. 3. 이러한 화면 전환 코드는 작성된 ViewController가 담당하게 되고, 하드코딩되어 있어 관리하기 힘들어짐 (안그래도 많은 일을 담당하는데..) 4. View Controller간의 의존성도 생기게 됨 Coo..
SOLID 원칙이란 객체 설계에 필요한 5가지 원칙으로써 유지보수가 쉽고, 유연하고, 확장이 쉬운 소프트웨어를 만들기 위한 수단, 높은 응집력과 낮은 결합도의 코드를 만들 수 있음 SRP (Single Responsibility Principle) : 단일 책임 원칙 하나의 클래스는 하나의 책임을 가져야 함 클래스의 수정이유는 단 하나여야 함 하나의 책임이 여러개의 클래스에 나뉘어 있어서도 안됨 하나의 클래스 안에 협력관계(Collaboration)가 여러개가 있는것은 괜찮음 장점 SRP 원칙을 잘 따르면 한 책임의 변경으로부터 다른 책임의 변경으로의 연쇄작용에서 자유로울 수 있게 됨 책임을 적절히 분배함으로써 코드의 가독성 향상, 유지보수 용이 Before class Handler { func hand..
네트워크 Endpoint Endpoint : 서버와 클라이언트 간의 통신을 위한 API 요청이 가능한 주소를 나타내는 특정 URL 또는 URI BaseURL API Endpoint의 기본 URL. 모든 요청은 baseURL을 기반으로 한다. ex) "https://api.example.com/users" 에서 baseURL은 "https://api.example.com/” path baseURL 이후에 따라오는 경로를 지정 ex) "https://api.example.com/users/1” 에서 path는 /users/1 Header HTTP 본문(body) 및 Request/Response에 대한 정보를 포함함 HTTP 헤더는 클라이언트와 서버가 요청 또는 응답으로 부가적인 정보를 전송할 수 있도록 해..
백준 문제 링크: https://www.acmicpc.net/problem/1543 1543번: 문서 검색 세준이는 영어로만 이루어진 어떤 문서를 검색하는 함수를 만들려고 한다. 이 함수는 어떤 단어가 총 몇 번 등장하는지 세려고 한다. 그러나, 세준이의 함수는 중복되어 세는 것은 빼고 세야 한 www.acmicpc.net 입력 첫째 줄에 문서가 주어진다. 문서의 길이는 최대 2500이다. 둘째 줄에 검색하고 싶은 단어가 주어진다. 이 길이는 최대 50이다. 문서와 단어는 알파벳 소문자와 공백으로 이루어져 있다. 출력 첫째 줄에 중복되지 않게 최대 몇 번 등장하는지 출력한다. 예제 입력 1 복사 ababababa aba 예제 출력 1 복사 2 예제 입력 2 복사 a a a a a a a 예제 출력 2 복..
https://www.acmicpc.net/problem/4195 4195번: 친구 네트워크 첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스의 첫째 줄에는 친구 관계의 수 F가 주어지며, 이 값은 100,000을 넘지 않는다. 다음 F개의 줄에는 친구 관계가 생긴 순서대로 주어진 www.acmicpc.net Union-Find 알고리즘을 사용하여 풀어야 하는데, Union-Find 알고리즘은 원소들의 연결 여부를 확인하는 알고리즘이다. Find 함수 : 파라미터의 루트 부모를 찾음 (재귀로 찾음) Union 함수 : 오른쪽 파라미터의 루트 부모를 왼쪽의 루트 부모로 만듬 (즉 왼쪽 루트 부모가 제일 최강 루트 부모가 되는것) 친구 관계가 생길때마다 네트워크 수는 Union함수가 호출될때마다..

let firstLineInput = readLine()!.split(separator: " ").map{Int(String($0))!} let secondLineInput = readLine()!.split(separator: " ").map{Int(String($0))!} let limit: Int = firstLineInput.last! let length: Int = secondLineInput.count var result: Int = 0 for i in 0..

let input = readLine()!.split(separator: " ") if input == input.sorted() { print("ascending") } else if input == input.sorted(by: >) { print("descending") } else { print("mixed") } 설명 ascending일 경우는 즉 오름차수로 정렬된 상태 dscending일 경우는 즉 내림차수로 정렬된 상태 나머지는 mixed 참고: https://www.acmicpc.net/problem/2920
정의 줄을 서는 행위와 유사 가장 먼저 넣은 데이터를 가장 먼저 꺼낼 수 있는 구조 음식점에서 가장 먼저 줄을 선 사람이 제일 먼저 음식점에 입장하는 것과 동일 참고 Enqueue: 큐에 데이터를 넣는 기능 Dequeue: 큐에서 데이터를 꺼내는 기능 struct Queue { private var queue: [T?] = [] private var head: Int = 0 public var count: Int { return queue.count } public var isEmpty: Bool { return queue.isEmpty } public mutating func enqueue(_ element: T) { queue.append(element) } public mutating func de..
정의 스택은 LIFO(Last In, Fisrt Out) 또는 FILO(First In, Last Out) 데이터 관리 방식을 따름 LIFO: 마지막에 넣은 데이터를 가장 먼저 추출하는 데이터 관리 정책 장단점 장점 구조가 단순해서, 구현이 쉽다. 데이터 저장/읽기 속도가 빠르다. 단점 (일반적인 스택 구현시) 데이터 최대 갯수를 미리 정해야 한다. 저장 공간의 낭비가 발생할 수 있음 미리 최대 갯수만큼 저장 공간을 확보해야 함 struct Stack { private var stack: [T] = [] public var count: Int { return stack.count } public var isEmpty: Bool { return stack.isEmpty } public mutating fu..