[Haruhancut] 1. 하루한컷 리팩토링 - 폰트, 색상 세팅
Font 세팅 Fonts 폴더에 다운받은 폰트를 저장한다. <key>UIAppFonts</key> <array> <string>NanumMyeongjo-Regular.ttf</string> ...
Font 세팅 Fonts 폴더에 다운받은 폰트를 저장한다. <key>UIAppFonts</key> <array> <string>NanumMyeongjo-Regular.ttf</string> ...
커스텀 데이터소스 만들어보기 Model struct Todo { let id: Int let title: String let isDone: Bool } Cell import UIKit // MARK: - Cell final class RxCe...
iOS 메모리 재활용 iOS와 같은 휴대용 기기에서 메모리를 많이 사용하는 앱이 있을 경우 시스템이 앱을 종료시킬 수 있다. 이는 메모리 사용량이 배터리 소모와 직결되기 때문이다. 따라서 iOS는 화면에 보일때만 메모리에 올리고 안보일때는 메모리에서 내리자 = 즉 재활...
DiffableDataSource Diffable 다른 이라는 뜻이다. 아이템들간의 서로 다름을 알게 되는 것이다. 애니메이션 처리가 자연스럽게 되는 데이터소스이다. datasource cellProvider - 셀 만들기 가능하다. snaps...
Widget 도입 하루한컷 앱에 위젯을 추가하여 앱의 사진을 위젯으로 보여주려고 한다. 기존 번들 식별자에 App Groups 체크 및 저장 Identifiers에서 com.indextrown.Haruhancut를 찾아서 App Groups 체크박스를 추가 및 저장한다. ...
UIKit 세그먼 컨트롤 커스텀 사용법 // // CustomSegmentControlVC.swift // UIComponentTutorial // // Created by 김동현 on 6/2/25. // import UIKit final clas...
UIKit 세그먼 컨트롤 커스텀 사용법 import UIKit final class SegmentControlVC: UIViewController { // MARK: - UI Component private lazy var segm...
iOS 16부터 기본 제공되는 캘린더 기본 캘린더 import UIKit final class BasicCalendarViewController: UIViewController { // MARK: - UI Conponent private lazy ...
우분투 원격 서버 설정 kt 공유기 링크 장치설정 -> 트래픽 관리 -> 포트포워딩 추가 CUI 세팅 및 접속 sudo apt update sudo apt install openssh-server # 직접 실행 sudo systemctl start ssh...
해결법 ✅ Package.resolved 삭제 명령어 rm -f ./Package.resolved rm -f ./EUMMEYO.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved 두 파일이 둘 다 존재할...
## private func setupNavigation() { self.navigationItem.rightBarButtonItem = UIBarButtonItem( image: UIImage(systemName: "gearshape....
RX - MVVM 예시 기존 코드 - view와 viewModel 구분 없이 하나의 코드로 작성 import UIKit import FirebaseAuth import RxSwift final class SettingViewController: UIViewController {...
문제 https://github.com/dremdeveloper/codingtest_cpp/blob/main/solution/05.cpp https://school.programmers.co.kr/learn/courses/30/lessons/12949 2차원 배열 arr...
Kingfisher 기능 이미지 로드 기능(url을 넘겨주면 이미지를 로드한다) 이미지 캐시 기능 UIImageView에 편리하게 round 처리 기능 이미지 다운로드 기능 이미지 로드 기능 private func loadImage() { guar...
fastlane 에러 해결 깃 저장소에서 관련 내용 삭제 ## 각 명령에서 질문 나오면 y 눌러주기 -> 깃허브에서 제거됨 fastlane match nuke distribution fastlane match nuke development ## 인증서 & ...
문제 https://github.com/dremdeveloper/codingtest_cpp/blob/main/solution/04.cpp https://school.programmers.co.kr/learn/courses/30/lessons/42840 수포자는 수학을...
문제 https://github.com/dremdeveloper/codingtest_cpp/blob/main/solution/03.cpp 정수 배열 numbers가 주어진다. numbers에서 서로 다른 인덱스에 있는 2개의 수를 뽑아 더해 만들 수 있는 모든 수를 배열...
문제 https://github.com/dremdeveloper/codingtest_cpp/blob/main/solution/02.cpp 정수 배열 lst가 주어진다. 배열의 중복값을 제거하고 배열 데이터를 내림차순으로 정렬해서 반환하는 solution()함수를 구현하라...
문제 https://github.com/dremdeveloper/codingtest_cpp/blob/main/solution/01.cpp 정수 배열 arr을 오름차순으로 정렬해서 반환하는 solution() 함수를 완성하라. 제약조건 arr의 길이는 2 이상 10...
프로젝트에 SwiftLint적용하기 brew install swiftlint 공식 사이트 설치는 SPM, Pod 등 여러 방법으로 설치할 수 있다. 다양한 프로젝트에 계속 사용하기 위해 HomeBrew로 설치 진행. New Run Script Phase 클릭하...
SOLOD, MVVM, CleanArchitecture 클린 아키텍처를 알기 위해서는 MVVM을 알아야 하고 MVVM을 알기 위해서는 SOLID 원칙을 알아야 한다. SOLID 원칙 -> MVVM -> Interface -> Clean Archit...
iOS 푸시알림 FCM, APNS iOS에서 푸시 종류는 2가지가 있다. 로컬에서 직접 보내는 알림 서버에서 보내는 알림 서버에서 보내는 APNS(Apple Push Notification Service) FCM(F...
문제 빈도 정렬 자주 등장하는 숫자 기준으로 오름차순 정렬하되, 등장횟수가 같다면 먼저 나온 것이 앞에 있어야 한다. 풀이 정렬 관련 함수 // 배열 var numbers = [5, 2, 8, 1, 3] // 오름차순 정렬 let ascending = numbers....
문제 사과 담기 게임 스크린 위에서 사과 여러개가 떨어질 때 바구니로 사과를 담기 위한 이동거리의 최솟값을 구하라 풀이 시작지점을 left와 right를 방정식으로 나타낼 수 있다. left = 1 right = left + m - 1 /* 5 1 3 1 5 ...
문제 쿼드트리 주어진 영상이 0으로만 이루어져 있다면 결과는 0이 되고 혹은 그 반대면 결과가 1이 된다. 만약 0과 1이 섞여 있으면 전체를 한번에 나타내지 못하고 4개의 영역으로 나누어 각 영역을 압축한 결과를 차례로 괄호 안에서 묶어서 표현한다. 풀이 분할 정복...
# Dockerfile FROM ubuntu:latest # ----- 기본 패키지 설치 ----- RUN apt-get update && \ apt-get install -y \ curl sudo python3 python3-pip ...
UITextView UITextField 차이 TextField는 placeholder를 사용할 수 있으나 TextView는 안되는것을 알게 되어 두 컴포넌트의 차이에 대해 알아보고자 정리하게 되었다. UITextView 공식문서를 살펴보면 A scrollable, mu...
테이블뷰 제네릭 CustomCombineDataSource 이전 포스팅에서 tableview데이터소스를 combine과 제네릭으로 연결을 했다. 데이터소스는 데이터와 연괸되어있고, 셀의 종류를 정하고, 리스트 개수가 몇개인지 정하는 역할이다 즉 데이터와 관련이 있다. 이...
테이블뷰 제네릭 CustomCombineDataSource 제네릭 어떠한 자료형을 받을 수 있다. IndexData를 만들어서 해당 타입도 받을 수 있도록 해보자. IndexData구조체 추가 // // DummyData.swift // UITableVi...
테이블뷰 콤바인 커스텀 데이터 소스 지난 시간에 Combine을 통해 List를 보여주었는데 이번 포스트에서는 Combine에서 구독을 통해 들어오는 데이터 바로 DataSource로 연결하는 방법을 해보자. 클로저에 대한 개념을 알아야 이해하기 쉽다. CustomCom...
클로저 클로저 표현식 {(parameters) -> returnType in 실행구문 } 클로저 종류 Named Closure = 함수 Unnamed Closure 클로저는 Argument Label을 사용하지 않는다. 클로저는 둘다...
1. 프로젝트 개발 환경 자동화 배경 팀 프로젝트르를 진행하면서 *.xcconfig, *.plist와 와 같은 숨겨야 하는 파일들이 생기게 된다. 이러한 파일들은 .gitignore에 추가하여 Git에 포함하지 않도록 한다. 이러한 Git의 관리를 받지 않는 파일은 팀원간 ...
추천 시스템이란 추천 시스템이란 사용자의 과거 행동 데이터를 바탕으로 사용자에게 필요한 정보나 제품을 제시하는 시스템이다. 추천 시스템의 여러 기술 협업 필터링(Collaborative Filtering) 내용 기반 필터링(Content-Based Filterin...
Docker 이식성 - 명령어 한 줄로 어떤 컴퓨터에서든 동일한 환경설정이 가능해 에러를 피할 수 있다.
SwiftUI에 Admob 광고 적용하기 1. Admob 설정 및 테스트 광고 ID https://admob.google.com/v2/home Admob 계정 생성(필수) 애플 앱스토어 등록(선택) 어플을 앱스토어에 등록 후 Admob 작업...
문제 영역 구하기 직사각형이 그려진 도화지에서 남은 영역의 개수와 넓이를 구하는 문제이다. 풀이 넓이 구하기 + Connected Component 개념을 알아야 한다. /* m x n(m세로, n가로 <= 100) 직사각형 - k개 */ let (m,...
테이블뷰 콤바인 적용 Combine이란? iOS 13 이상부터 지원한다. 데이터를 리액티브 흐름으로 만들어서 데이터가 변경되면 이벤트 처리를 받을 수 있도록 설정할 수 있는데 보내는쪽을Publisher, 받는쪽을 Subscribe라고 한다. 기존 테이블뷰에...
8. 데이터 소스 이해, 따로써보기 테이블 뷰 만들기(List) 테이블뷰 컨트롤러로 만들기(기능이 한정적) vs 일반 뷰 컨트롤러로 만들기 우리는 일반 뷰 컨트롤러를 주로 쓰자 구성 데이터 소스 - 데이터와 연관, 셀의 종...
코드 재사용 /// 각 셀에 대한 내용을 구성하여 반환 -> 셀의 종류를 정하기 - 테이블뷰 셀을 만들어서 반환해라 /// - indexPath: 셀의 위치를 나타내는 인덱스 경로 /// - returns: 구성된 UITableViewCell 객체 func table...
Cell Configuration 알아보기 Cell Configuration은 iOS 14+부터 도입된 기능으로, 셀의 UI 구성과 데이터 설정을 보다 선언적으로 처리할 수 있도록 도와준다. 기존에는 셀마다 IBOutlet을 연결하거나, cell.textLabel.tex...
코드기반 커스텀 테이블뷰 구현하기 Storyboard 커스텀 셀 Nib 커스텀 셀 Code 커스텀 셀 CodeList.xiv파일로 와서 테이블뷰를 드래그해서 추가 후 제약조건을 상하좌우 ...
Nib으로 커스텀 테이블뷰 구현하기 Storyboard 커스텀 셀 Nib 커스텀 셀 파일만들기 -> Cocoa Toucn -> Nib파일이름, 체크박스 체크로 2개의 파일을 만든다. 그러면 Nib파일...
스토리보드로 커스텀 테이블뷰 구현하기 기존 셀 구현할 커스텀 셀 위 왼쪽 사진은 1. 테이블뷰 예제에서 구현한 방식이다. 사진처럼 셀 스타일이 기본 셀이라서 커스텀을 할 수 없다. 그래서 보통 UITableViewC...
스토리보드로 여러 화면 분기하기 필요 파일 MainViewController Main.storyboard MainStoryboard에서 Command + Shift + L을 눌러서 Storyboard를 추가하고 우측 하단의 Embeded In을 눌러서 N...
테이블 뷰 테이블뷰는 dataSource와 delegate, Cell로 이루어져있다. 구성 dataSource 데이터와 관련된 부분 셀을 어떻게 보여줄 지 데이터 크기, 종류에 따른 셀의 타입 정하기 리스트 개수가 몇개인지...
1. Delegate 조건 UIKit 클론코딩을 하다 보면 여러가지 상황에서 Delegate Protocol을 채택하고 Protocol 내부에서 제공하는 method를 사용하게 된다. UITextField, UITableView에서도 기능을 구현할 때 흔하게 사용되는 방식이다. A...
1. Observable & Observer 데이터를 연결해줄 수 있는 이벤트가 있고, 이 이벤트에 따라 변경되는 뷰, 로직이 있다. 즉 이벤트를 방출할 수 있는 Observable가 있고, 이벤트를 처리하는 Observer가 있다. Observable와 O...
1. 카카오 로그인 https://developers.kakao.com/console/app 링크 접속 애플리케이션 추가 플랫폼 iOS 등록 네이티브 앱키를 Config.config파일에 저장 2. 파이어베이스 프로젝트 생성 Authentication 생성...
SOLID 원칙이란 SOLID 원칙이란 객체지향 설계에서 지켜야 할 5개의 소프트웨어 개발 원칙을 의미한다. 특정 프로그래밍 언어 혹은 프레임워크를 위해 만든 원치이 아니다. 객체 지향 설계의 5원칙 SOLID 단일 책임 원칙 (Single Responsibility ...
Clean Architecture란? 로버트 C 마틴(Robert C. Martin), 별명으로는 엉클 밥(Uncle Bob)이 제안한 아키텍처로 소프트웨어를 다양한 계층(Layer)으로 분리해서 다음과 같은 목표를 추구한다 아키텍처는 특정 소프트웨어 라이브러리에 의존하지...
1. 오토레이아웃이란? 오토레이아웃이란 뷰 계층구조에 있는 모든 뷰의 크기와 위치를 제약조건(constraints)에 따라 동적으로 계산한다. 즉 자동으로 레이아웃을 그린다는 의미이다. 2. Constraints란? 제약조건(Constraints)란 뷰의 위치...
Queue struct DoubleStackQueue<T> { private var enqueueStack: [T] = [] private var dequeueStack: [T] = [] var size: Int { retu...
1. 인접행렬 그래프와 정점과 간선의 관계를 나타내는 bool 타입의 정사각형 행렬이다. 정사각형 행렬의 각 요소가 0 또는 1의 값을 가짐을 의미한다. 0: 두 정점 사이의 경로가 없다. 1: 두 정점 사이의 경로가 있다. import Foundat...
1. 에러 처리 에러를 던지는 비동기 함수 정의 에러를 던질 수 있는 비동기함수 실행시 try await async 다음에 throws가 와야한다. try 다음에 await이 와야한다. // 1 func...
1. GCD 비동기 vs Swift ConCurrency 비동기 GCD 비동기 다른 쓰레드로 일을 시키고, 기다리지 않는다. 해당 작업이 끝나는 시점에 콜백 함수를 통해 값을 리턴 받거나 끝난 시점을 알려준다. // 정의 func method(clos...
1. 기존의 비동기 함수 기존의 비동기 함수 정의 방법 오래 걸려서 얻는 결과값을 반드시 콜백 클로저 형태로 돌려받아야 했다. 올바르지 않은 형태 // 기존 방식에서 잘못된 함수 설계의 형태 func getImage1() -> UIImage? {...
1. Task 클로저에서 self 키워드 사용 Task {} 로 작업을 만들 수 있다. 클로저를 할당하면 클로저를 바로 실행하면서 Task를 생성한다. struct Work: Sendable {} class Worker { v...
1. Task 비동기적인 일처리를 할 수 있는 하나의 일(work)의 단위. 작업의 생성한다음 바로 비동기적인 일처리를 시작한다. Operation 파라미터에 해당하는 클로저를 전달하면서, 작업Task을 생성 및 클로저로 전달된 (비동기적인) 작업을 즉시 실...
1. 기존 동시성 프로그래밍(GCD) 대기열 / 큐를 사용하였다 대기열에 넣어서 2번 cpu에 일을 시키는 방식으로 비동기 처리 // 기존 동시성 프로그래밍(GCD) // 기본적으로 다른 쓰레드로 보내지 않았다면 1번 쓰레드(cpu)에서 실행한다 pri...
OS 메모리 구조 Swift에서 메모리는 주로 4개의 영역으로 나눌 수 있다. 1) Code 영역 실행 가능한 프로그램 코드를 기계어 형태로 저장한다. 이 영역은 읽기 전용(Read-Only) 이며, 프로그램의 실행 중에 변경되지 않는다. 2) Da...
1. for문 범위나 컬렉션에서 item을 하나씩 뽑아, 중괄호 안에서 반복 실행한다. ⚠️ 여기서 item은 반복상수 이다. 즉 for in 반복상수는 매번 새로운 스택 공간에 동일한 식별자로 선언과 동시에 초기화되된다. for item in 범위...
1. 삼항연산자(Ternary Conditional Operator) 세가지 항을 가진 연산자이다. 조건에 따라 선택이 2가지인 경우 사용한다. ? 와 : 를 사용한다. 조건에 따라 리터럴 값을 선택하여 변수에 대입할 때 사용한다. if문과 동일하게 사용가능하...
1. 튜플 원하는 연관된 데이터의 조합으로 만들 수 있는 타입이다. 변수를 선언과 동시에 해당 멤버(데이터의 종류 및 개수)가 결정되므로 추가/삭제는 불가능하다. var로 선언하면 요소 교체는 가능하다. 서로 다른 타입을 묶어서 반환하거나 전달할 때 사용...
1. 프로그래밍 기본 원리 순차 조건 반복 순차 개발자가 정한 규칙으로 실행한다. print("1") print("2") print("3") 조건(if) 조건이 참이면 {}를 실행하고 거짓이면 아무 직업도...
1. 기본 연산자
1. 변수(Variable) var 데이터를 담을 수 있는 공간 프로그래밍 동작의 첫번째 단계: 변수 선언 // 변수를 선언하면서 저장 // 3이라는 숫자를 a라는 공간에 저장한다 var a = 3 var b = 7 // 변수를 여러개 한꺼번에 선언 var ...
📝 Swift 비동기 처리방식 1. NSThread Object-C 시절부터 사용되었다 직접 스레드를 셍성하고 괸리해야 한다. 수동으로 동기화 해야하다. GCD나 OperationQueue에 비해 사용성이 떨어진다. ❌ 현재 사용 여부: 현재 거의 ...
iOS file System sandbox iOS는 보안을 위해 앱 설치시 os내부 설치 프로그램이 그 앱에 자체 독립 공간(sandbox)을 생성한다. (sandbox) 내부에는 각 역할을 가진 컨테이너 디렉터리들이 생성된다. 즉 각 iOS App은 자체 독립돈 공간 (...
깃블로그 이미지 편하게 작성하는법 Typora 다운 실행 후 좌측 상단바 Typora -> 설정 -> 이미지 -> 사용자 정의 폴더로 이미지복사 ../assets/img/${filename} 지정 ...
깊이우선탐색(Depth First Search) 그래프를 탐색할 때 쓰는 알고리즘으로 어떤 노드부터 시작해 인접한 노드들을 재귀적으로 방문하며 방문한 정점은 다시 반복하지 않고 각 분기마다 가능한 가장 멀리 있는 노드까지 탐색하는 알고리즘이다. DFS PseudoCode DFS(...
정점과 간선 정점(Vertex) 노드라고 불리며 그래프를 형성하는 기본 단위다. 분할할 수 없는 객체이자 점으로 표현되는 위치, 사람, 물건 등이 될 수 있다. 간선(Edge) 정점을 잇는 선을 의미한다. 관계 경로 등이 될 수 있다. 예시 “...
Cloud Functions Cloud Functions는 Firebase의 기능과 HTTP 요청에 의해서 Trigger 되는 이벤트에 응답하여 백엔드 코드를 자동으로 실행시켜주는 서버리스 프레임워크 ✅ 1. Firebase Cloud Functions 설정 먼저 F...
기본 TabView 사용목적: 여러 개의 화면을 탭으로 관리할 수 있다. 제약사항: TabView에는 자체적으로 배경색을 변경할 수 있는 modifier가 없다. UITabBar.appearance().backgroundColor = .white 같은 UIKit 코드를...
📌 1. 기존 문제 원인 분석 (SwiftUI List + 기본 TextField) ✅ 원인 1: SwiftUI TextField가 List와 충돌 List는 UIKit의 UITabView를 래핑한 SwiftUI 컴포넌트이다. SwiftUI의 TextField는 입력시 ...
SwiftUI에서 제공하는 애니메이션 import SwiftUI // MARK: - 애니메이션 struct AnimationView: View { @State var currentTab: Int // 현재 선택된 탭의 인덱스 // MA...
SwiftUI에서 제공하는 캘린더 SwiftUI에서 제공하는 DatePicker를 사용하여 간단한 캘린더를 구현할 수 있습니다. import SwiftUI struct ProfileView: View { @State private var selecte...
UserDBRepository
, UserService
, ViewModel
계층의 역할과 사용법
1. SwiftUI 프로젝트에서 UserDBRepository, UserService, ViewModel 계층의 역할과 사용법 목차 UserDBRepository와 UserService의 개념 및 역할 계층을 나눈 이유 데이터 모델(User vs UserObject)...
Combine이란 2019년에 Apple에서 출시한 비동기처리 이벤트를 처리하기 위한 first-party 프레임워크이다. Combine은 앱 내에서 일어나는 이벤트들의 진행 결과 등을 선언적으로 코딩할 수 있게끔 도와준다. 어떠한 이벤트를 추적할 때 Delegate패턴...
1. ReactiveX란 무엇인가? RxSwift를 알기 위해 ReactiveX에 대해 알아야 한다. ReactiveX 혹은 Reactive Extension, 혹은 Rx라고도 부른다. Rx는 마이크로소프트에서 개발한 비동기 이벤트를 핸들링해주는 오픈소스 라이브러리이다. ...