일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Reference Cycle
- til
- TableView Section
- 테이블뷰 나누기
- CoreData
- firebase
- 면접을 위한 CS전공 지식 노트
- 면접을 위한 CS 전공 지식 노트 Tree
- ReferceCycle
- Value Type Reference Type
- Carousel CollectionView
- coremotion
- 강한 참조 순환
- TableView
- wil
- @escaping
- tableview section별 다른 cell적용
- 롤케이크 자르기
- CarouselCollectionview
- UserDefaults
- 자료구조
- NavigationSearchBar
- SWIFT
- Input Output
- 프로그래머스
- class struct
- Array vs Linked List
- 양궁대회
- retain cycle
- UIKit
- Today
- Total
목록전체 글 (63)
개발하는 동글 :]

사이드 프로젝트를 진행하며 하나의 TableView에 Section마다 사용하는 Cell이 달라 관리하기 어렵다는 점과 유지 보수 및 확장 및 수정이 편리한 코드를 만들고 싶어 시도한 코드이다.! 1. CellInputable, CellOutputable, Cellable- 우선 해당 프로젝트는 Input Output 패턴을 사용중이라 기존의 프로토콜을 활용하여 Cellable protocol을 개발하고, Cell들은 이 프로토콜을 채택하였다. 2. TableViewSectionable- 위에서 개발한 Cellable을 활용한 TableViewSectionable을 개발하였다. 이러한 TableViewSectionable은 Cell에 주입 될 input, output을 관리할 수 있고, Header와 F..

CoreMotion?가속도계, 자이로스코프 등 하드웨어에서 동작 관련 이벤트를 처리하는 프래임워크이다.iOS 4.0 부터 사용이 가능하다.CMMotionManager?모션 서비스를 시작하고 관리하기 위한 객체장치의 온보드 센서에 의해 감지된 움직임을 보고하는 서비스를 제공이 객체를 사용하여 네 가지 유형의 모션 데이터를 수신한다.유형Accelerometer data: 3차원 공간에서 장치의 순간 가속도를 나타내는 가속도계 데이터Gyroscope data: 자이로스코프 데이터 - 기기의 기본 축 3개를 중심으로 한 순간 회전을 나타냅니다.Magnetometer data: 지구 자기장을 기준으로 기기의 방향을 나타내는 자력계 데이터Device-motion data:기기의 사용자 시작 가속도, 자세, 회전 속..
RESTful APIRESTful API는 두 컴퓨터 시스템이 인터넷을 통해 정보를 안전하게 교환하기 위해 사용하는 인터페이스API애플리에이션 프로그래밍 인터페이스(API)는 다른 소프트웨어 시스텀과 통신하기 위해 따라야 하는 규칙을 정의API는 클라이언트와 리소스 사이의 게이트웨이클라이언트정보에 엑세스하려는 사용자.클라이언트는 API를 사용하는 사람이거나 소프트웨어 시스템리소스다양한 애플리케이션이 클라이언트에게 제공하는 정보 RESTRepresentational State Transfer(REST)는 API 작동 방식에 대한 조건을 부과하는 소프트웨어 아키텍처API 개발자는 여러 아키텍처를 사용하여 API를 설계할 수 있습니다. REST 아키텍처 스타일을 ..

1. 메모리의 주소를 확인할 수 있는 메서드 생성 2. 간단한 Class와 Struct 생성 3. Struct를 프로퍼티로 가진 Class와 Class를 프로퍼티로 가진 Struct 생성 4. Class(Struct)? - 클래스를 생성한 인스턴스와 그것을 복사한 인스턴스의 메모리 주소는 다른 것을 확인 할 수 있었다. 이것은 내가 알고 있었던 사실과는 조금 달랐다 나는 막연히 클래스 자체를 인스턴스화 하여도 참조 타입이기에 동일한 메모리 주소를 가지는 줄 알았지만 클래스 내부의 프로퍼티들이 동일한 메모리 주소를 가지는 것을 알 수 있었다. - Class 인스턴스 자체는 stack에 올라가 복사한 Class와 서로 다른 메모리 주소를 가지고 있고 내부의 프로퍼티는 클래스의 특징인 참조형식이기에 동일한 주..

지금 까지 MVVM을 사용하면서 Data Binding을 Observable Pattern을 이용해 왔었다 그리고 최근 공부를 시작한 RxSwift를 적용하며 이 RxSwift를 이용한 Data Binding의 방법 중 하나인 Input Output구조를 적용해 보자! 1. Input Output 구조를 사용할 뷰 모델의 protocol 만들기 Input과 Output구조를 거의 모든 Viewmodel에서 사용해 줄 것이니 이 구조를 프로토콜로 만들어 준다 이 구조를 통해 컨트롤러에서 transform 메서드를 이용하여 Output을 이용해 바인딩을 하자! 2. ViewModel에서 Input과 Output의 요소를 만들고 어떻게 Input을 변환하여 Output으로 전달할 것인지를 정의 ViewMode..

용어정리 MAC 주소 : 네트워크 인터페이스에 할당된 물리적 고유 식별 주소이다. 네트워크 통신을 계층화 하여 설명하는 OSI 모델에서 데이터 링크 계층의 일부에 해당한다. OSI 7 계층이란? OSI 7 계층은 네트워크 통신이 일어나는 과정을 7단계로 나눈 국제 표준화 기구 ISO에서 정의한 네트워크 표준 모델이다. 각 계층을 지날 때마다 각 계층에서 Header가 붙게되고 수신측은 역순으로 헤더를 분석하게 된다. OSI 7 계층 1계층 : 물리계층 [Physical Layer] 주로 전기적, 기계적, 기능적인 특성을 이용해서 통신 케이블로 데이터를 전송하는 물리적인 장비 단지 데이터를 전기적인 신호(0,1)로 변환해서 주고받는 기능만 함 단위 : 비트[Bit] 장비 : 통신 케이블, 리피터, 허브 등..

해시 함수 임의의 길이를 갖는 메시지를 입력받아서 고정된 길이의 해시값을 출력하는 함수 함수를 수행하기 전의 원래의 데이터를 키 [key], 해시 함수를 수행한 결과값을 해시 값 [hash value]라고 합니다. 키를 해시 값으로 매핑하는 전체적인 과정을 해싱 [Hashing]이라고 합니다. 만약 다른 키에 대해 해시값이 중복된다면, 이를 해시 충돌[Collision]이라고 합니다. 해시 테이블 해시 테이블이란 해시함수를 사용하여 변환한 값을 색인(index)으로 삼아 키(key)와 데이터(value)를 저장하는 자료구조를 말한다. 기본연산으로는 탐색(Search), 삽입(Insert), 삭제(Delete)가 있고 시간복잡도는 평균적으로 O(1)이다. 충돌 해결 방법 1. Open Addressing[..

그래프 용어 정리 정점(Vertex) 노드(node) 라고도 하며 정점에는 데이터가 저장된다. (0, 1, 2, 3) 간선(Edge) 정점(노드)를 연결하는 선으로 link, branch 라고도 부른다. 인접 정점(adjacent Vertex) 간선에 의해 직접 연결된 정점(0과 2은 인접정점) 단순 경로(simple path) 경로 중에서 반복되는 정점이 없는 경우. 한붓그리기와 같이 같은 간선을 지나가지 않는 경로 ( 0->3->2->1 은 단순경로 ) 차수(degree) 무방향 그래프에서 하나의 정점에 인접한 정점의 수 (0의 차수는 3) 진출 차수(in-degree) 방향 그래프에서 외부로 향하는 간선의 수 진입 차수(out-degree) 방향 그래프에서 외부에서 들어오는 간선의 수 경로 길이(p..

힙 완전 이진 트리 기반의 자료 구조이며, 최소힙과 최대힙 두 가지가 있고 해당 힙에 따라 특정한 특징을 지킨 트리 어떠한 값이 들어와도 특정 힙의 규칙을 지키게 만들어져 있다. 최대힙과 최소힙 최대힙 : 투트 노드에 있는 키는 모든 자식에 있는 키 중에서 가장 커야 합니다. 또한, 각 노드의 자식 노드와의 관계도 이와 같은 특징이 재귀적으로 이루어져야 한다. 최소힙 : 루트 노드에 있는 키는 모든 자식에 있는 키 중에서 최솟값이어야 합니다. 또한, 각 노드의 자식 노드와의 관계도 이와 같은 특징이 재귀적으로 이루어져야 한다. 최대힙의 삽입 힙에 새로운 요소가 들어오면, 일단 새로운 노드를 힙의 마지막 노드에 이어서 삽입 이 새로운 노드를 부모 노드들과 크기를 비교하며 교환해서 힙의 성질을 만족시킨다. ..

트리 트리는 그래프 중 하나로 그래프의 특징처럼 정점과 간선으로 이루어져 있고, 트리 구조로 배열된 일종의 계층적 데이터의 집합입니다. 루트 노드, 리프 노드 등으로 구성 트리로 이루어진 집합을 숲이라고 합니다. 트리의 특징 부모, 자식 계층 구조 V - 1 = E라는 특징이 있습니다. 간선 수는 노드 수 - 1 임의의 두 노드 사이의 경로는 유일무이 하게 존재 한다. 즉 트리 내의 어떤 노드와 어떤 노드까지의 경로는 반드시 존재 트리의 구성 정점(Vertex): 자료를 보관하는 단위, 노드(Node)라고 부름 간선(Edge): 정점에서 다른 정점으로 가는 경로, 링크(Link, 다른 노드의 위치 정보) 혹은 가지(Branch)로 부름 루트 노드 : 가장 위에 있는 노드 내부 노드 : 루트 노드와 내부 ..

Stack [스택] Stack은 가장 마지막으로 들어간 데이터가 가장 첫 번째로 나오는 성질 LIFO, Last In First Out 을 가진 자료 구조 스택 접근 탐색 삽입 삭제 평균 O(n) O(n) O(1) O(1) 재귀적인 함수, 알고리즘에 사용되며 웹 브라우저 방문 기록 등에 사용 삽입 : Push 삭제 : Pop Queue [큐] Queue는 먼저 집어넣은 데이터가 먼저 나오는 성질 FIFO, First In First Out을 지닌 자료 구조 큐 접근 탐색 삽입 삭제 평균 O(n) O(n) O(1) O(1) 삽입 : Enqueue 삭제 : Dequeue Swift로 Stack과 Queue를 구현해 보기 struct Stack { private var elements: [T] = [] mut..

Array [배열] Array는 중복을 허용하는 같은 타입의 변수로 이루어져 있으며 크기가 정해져 있고 인접한 메모리 위치에 있는 데이터를 모아놓은 순서가 있는 집합 배열 접근 탐색 삽입 삭제 평균 O(1) O(n) O(n) O(n) Index 기준으로 탐색하는 접근의 시간 복잡도가 O(1)이 되어 랜덤 접근이 가능 배열은 인덱스에 해당하는 원소를 빠르게 접근해야 하거나 간단하게 데이터를 쌓고 싶을 때 사용 Linked List [연결 리스트] Linked List는 데이터를 감싼 노드를 포인터로 연결해서 공간적인 효율성을 극대화시킨 자료 구조 연결리스트 접근 탐색 삽입 삭제 평균 O(n) O(n) O(1) O(1) 싱글 연결 리스트: next 포인터만 보유 이중 연결 리스트: next 포인터와 prev..

1. 앱 실행시 발생되는 일 main 함수가 실행 main 함수는 UIApplicationMain함수를 호출 UIApplicationMain함수는 앱의 본체에 해당하는 객체인 UIApplication 객체를 생성한다. nib파일을 사용하는 경우나, Info.plist 파일을 읽어들여 파일에 기록된 정보를 참고하여 그외에 필요한 데이터를 로드한다. 앱 델리게이트 객체를 만들고 앱 객체와 연결하고 런루프를 만드는 등 실행에 필요한 준비를 한다. 실행 완료를 앞두고 앱 객체가 앱 델리게이트에게 application:didFinishLaunchingWithOptions: 메시지를 보낸다. 2. 앱의 상태 변화 Not Running : 실행되지 않았거나, 시스템에 의해 종료된 상태 Inactive : 실행 중이지..
1. 구조체(Struct)에 대해서 설명해 주세요. 어떤 경우 사용하나요? 구조체란 프로퍼티를 저장하거나 메서드를 제공하고 이를 캡슐화할 수 있는 스위프트가 제공하는 타입입니다. 구조체의 특징은 값타입이며 상속이 불가능하고 타입캐스팅이 되지 않습니다. 이러한 구조체를 사용하는 경우로는 연관된 간단한 값의 집합을 캡슐화 하는 것만이 목적일 때 캡슐화된 값이 참조되는 것보다 복사되는 것이 합당할 때 구조체에 저장된 프로퍼티가 값 타입이며 참조되는 것보다 복사되는 것이 합당할 때 다른 타입으로부터 상속받거나 자신이 상속될 필요가 없을 때입니다. 지금 진행 중인 FinalTodo 프로젝트의 예시로는 간단한 UserData 및 FolderData 등 간단한 커스텀 타입을 정의할 때 이니셜라이저가 자동으로 생성되어..

1. 문제 상황 더보기 위의 이미지처럼 다양한 다양한 화면에서 비슷한 화면이 자주 사용된다. 그렇기에 반복되는 작업을 줄이고자 하였다. 2. 시도한 방법 2.1 LockScreenView 구현 더보기 // // LockScreenView.swift // FinalTodo // // Created by SeoJunYoung on 10/23/23. // import UIKit class LockScreenView: UIView { let titleLabel: UILabel = { let label = UILabel() label.font = .preferredFont(forTextStyle: .title1) return label }() lazy var passwordCollectionView: UIColl..

1. 앱 잠금기능을 어떻게 구현할까? 앱 잠금기능을 db에 연동하여 사용할까라는 고민을 해보았다. 그래서 비밀번호를 찾는 기능까지 구현을 할까라는 생각을 하였다. 그렇게 참고할 앱들을 찾아보며 팀원들과 회의를 하던 중 팀원분이 다른 앱의 화면잠금 기능을 편리하게 구성하는 방법을 제시해 주셨다. 바로 아래와 같이 앱의 잠금을 암호를 분실했을 경우 앱을 삭제하고 재설치하는 방법이다. 이러한 방법으로 구현을 어떻게 할까 생각해 보았는데 그냥 유저의 비밀번호를 userDefault에 저장하여 관리하면 될 것 같다는 생각이 든다. 2. 이런 방식으로? 그럼 다음으로 어떠한 시점에 앱의 잠금 화면을 보여줘야 할까에 대한 고민이다. 보편적인 상황을 생각해 본다면 앱을 시작하는 순간, 다른 앱을 사용 하다가 다시 앱으..

1. 왜 dismiss후 present 가 필요 할까? 지금 구현한 LockScreen ViewController는 비밀번호가 일치 할 때 TargetViewController를 띄워주는 기능을 하고 있다. 이렇게 작동하게 될 때 NavigationController에 쌓이는 컨트롤러는 아래와 같다 여기서 문제가 발생하였다. LockScreen ViewController는 메모리에 올라와있어 불필요한 메모리와 이 후 뷰에서 접근이 가능한 상태가 되는 문제가 발생한다 그렇기에 비밀번호가 일치해서 다음 화면으로 넘어갈 때 LockScreenViewController를 dismiss한 후 targetViewController를 present하는 방법이 필요하다. 2. 어떠한 방법으로 해결할 수 있을까? 2.1..
1. 오늘의 회고 오늘 팀회의로 이슈 관리를 어떻게 할 것인가, 코드리뷰를 어떠한 방식으로 진행할 것인가,에 대한 방안을 회의하였다. 다양한 의견들이 있었고 나의 의견은 이슈관리는 깃허브의 이슈를 사용하는 것과 코드리뷰는 단순히 매일 밤 회의에서 화면 공유를 하는 방식으로 하자고 제안하였다. 그 후 회의의 결과로는 이슈관리는 깃허브 이슈관리를 사용, 코드리뷰는 매일 5시까지 pr을 올린 후 회의시간 전까지 각자 질문 및 코드를 설명하는 것으로 결정하였다. 이 회의를 통해 느끼게 된 것은 어떻게 협업을 할 것인가를 이유 없이 선정하게 된다면 팀원 모두가 힘든 시간을 가지게 된다. 만약 코드리뷰를 매일 밤 회의에서 진행하였다면 회의가 길어지고 팀원들 모두가 지치고 부담을 가지고 작업을 할 것 같다. 이렇듯 ..
1. 함수명으로 정확히 기능을 구별하여 구현하기 먼저 로그인 및 회원가입에 대한 정보를 전달해 주는 LoginResult 구조체를 만들어 주자. struct LoginResult { var isSuccess: Bool let email: String var errorMessage: String? } 그 후 Firebase에서 제공하는 메서드를 통해 각각 로그인과 회원가입에 대한 메서드를 만들어 준다. import Foundation import FirebaseCore import FirebaseAuth struct LoginManager { func trySignUp(email:String, password: String, completion: @escaping (LoginResult) -> Void) ..

1. FireBase 연결하기 1.1 Firebase 프로젝트 생성하기 1.2 iOS 버튼을 눌러서 App 등록하기 1.3 app등록하기 1.4 SPM에서 FireBase 패키지 추가 1.5 GoogleService - Info 파일 추가 1.6 초기화 코드 추가 import UIKit import FirebaseCore @main class AppDelegate: UIResponder, UIApplicationDelegate { func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { FirebaseApp.c..