Swift
-
NotificationCenter
Notification의 전달은, 알림을 만들어내는 Publisher, 이걸 전달하는 Dispatcher역할의 NotificationCenter, 그리고 그 알림을 관찰하는 Observer(혹은 Subscriber)의 관계를 통해 진행 Notification Dispatch Dispatch = 어떤 것을 전송하는 역할을 담고 있는 것 DispatchQueue : 스레드에 어떠한 작업을 해달라고 보낼 것들의 Queue Flux 패턴의 Dispatcher는 원하는 액션을 처리하기 위한 Reducer에게 그 액션을 보내는 역할 왜 Dispatch를 사용하는 것일까? 하나의 Dispatcher를 사용하면 데이터의 흐름을 한 점을 지나도록 만들 수 있다. DispatchQueue, NotificationCente..
-
[문법] Codable
Codable 외부 표현으로 변환하거나 외부 표현으로 변환할 수 있는 유형입니다. 출처 : https://developer.apple.com/documentation/swift/codable typealias Codable = Decodable & Encodable Codable은 Decodable과 Encodable이 합쳐진 타입이다. Decodable은 어떤 데이터를 Decoding할 수 있는 타입이고, Encodable은 어떤 객체를 Encoding할 수 있는 타입이다. Decodable let jsonFromServer = """ { "nick_name" : "개발하는 정대리", "job" : "유튜버, 개발자", "user_name" : "dev_jeongdaeri" } """ 이런 JSON 데..
-
[문법] 프로토콜
프로토콜 적합한 유형이 구현해야 하는 요구사항을 정의합니다. 프로토콜은 특정 작업이나 기능에 적합한 방법, 속성 및 기타 요구 사항의 청사진을 정의합니다. 프로토콜은 그런 다음 class, struct 또는 enum에 의해 채택되어 이러한 요구 사항의 실제 구현을 제공할 수 있습니다. 프로토콜의 요구 사항을 충족하는 모든 유형은 해당 프로토콜에 부합한다고 합니다. 적합한 유형이 구현해야 하는 요구 사항을 지정하는 것 외에도 프로토콜을 확장하여 이러한 요구 사항 중 일부를 구현하거나 적합한 유형이 활용할 수 있는 추가 기능을 구현할 수 있습니다. 출처 : https://docs.swift.org/swift-book/documentation/the-swift-programming-language/protoc..
-
[문법] Error
에러 정의 에러를 enum 타입으로 만들 수 있다. enum MismatchError: Error { case nameMismatch case numberMismatch } throw throw를 통해 에러를 밖으로 던진다. 에러를 밖으로 보낸다고 메소드 반환 부분에 throws 붙임 func guessMyName(name userInput: String) throws { // 매개변수로 받은 이름이 정대리와 일치하지 않으면 if (userInput != "정대리"){ print("틀렸다!") //이름 미스매치 에러를 던진다, 보낸다 throw MismatchError.nameMismatch } print("맞췄다!") } 에러를 처리하지 않는 방법 try? guessMyName(name: "이대리") ..
-
[문법] inout
매개 변수 name을 받는 메소드 // 매개변수 name을 받는 메소드 // _ 언더바를 넣어 메소드 호출시에 이름 안써도 됨 func sayName(_ name : String){ //받은 매개변수를 이용해 프린트로 출력 print("안녕 난 \(name)라고 해") } sayName("정대리") // 안녕 난 정대리라고 해 inout을 사용한 메소드 inout : 키워드를 사용해 값을 변경할 수 있다 func sayYourName(_ name : inout String){ name = "개발하는" + name print("안녕?! 난 \(name) 라고 해") } inout 메소드에 들어가는 값은 변경 가능해야되기 때문에 메소드에 바로 값을 넣지 못하고 변수에 한번 값을 담은 뒤에 넣을 것 var n..
-
[문법] Closure
클로저 Closure 명명된 함수를 만들지 않고 함께 실행하는 그룹 코드입니다. Closure는 코드에서 전달하고 사용할 수 있는 자체 기능 블록입니다. 스위프트의 클로저는 C 및 Objective-C의 block 및 다른 프로그래밍 언어의 lambdas와 유사합니다. Closure는 상수와 변수가 정의된 Context(코드에서의 조건, 환경)에서 reference를 캡처하고 저장할 수 있습니다. 이를 상수와 변수에 대한 closing이라고 합니다. 스위프트는 캡처의 모든 메모리 관리를 처리합니다. 출처 : https://docs.swift.org/swift-book/documentation/the-swift-programming-language/closures/ let myName : String ={..
-
[문법] Generic
제네릭(generic) 여러 유형에 대해 작동하는 코드를 작성하고 해당 유형에 대한 요구 사항을 지정합니다. Generic 코드를 사용하면 정의한 요구 사항에 따라 어떤 유형에서도 작동할 수 있는 유연하고 재사용 가능한 함수 및 유형을 작성할 수 있습니다. 중복을 피하고 의도를 명확하고 추상적인 방식으로 표현하는 코드를 작성할 수 있습니다. 제네릭은 스위프트의 가장 강력한 기능 중 하나이며, 스위프트 표준 라이브러리의 많은 부분이 제네릭 코드로 구축되어 있습니다. 사실, 당신은 그것을 깨닫지 못했더라도 언어 가이드를 통해 제네릭을 사용해 왔습니다. 예를 들어, 스위프트의 배열과 사전 유형은 모두 제네릭 컬렉션입니다. 당신은 Int 값을 보유하는 배열을 만들 수도 있고, String 값을 보유하는 배열을 ..
-
[문법] 함수의 매개변수
//함수, 메소드 정의 func myFunction(name: String) -> String{ return "안녕하세요 \(name)입니다!" } func myFunctionSecond(myName name: String) -> String{ // 호출할 때 사용하는 매개변수 이름을 변경 return "안녕하세요 \(name)입니다!" } func myFunctionThird(_ name: String) -> String{ // 매개변수 이름 쓰고 싶지 않을 때 return "안녕하세요 \(name)입니다!" } //함수, 메소드 호출 (call) print(myFunction(name: "정대리")) //안녕하세요 정대리입니다! print(myFunctionSecond(myName: "개발하는 정대리..
iOS
-
[iOS] LoginProject에 사용된 기술 정리
GitHub - Bucky5683/LoginProject: 앨런 iOS 앱 개발 강의 활용 - 3 앨런 iOS 앱 개발 강의 활용 - 3. Contribute to Bucky5683/LoginProject development by creating an account on GitHub. github.com 뷰 만들기 UIView 객체로 생성 let emailTextFieldView = UIView() 이때 view라는 이름은 사용하지 못하는데, 그 이유는 UIViewController에서 이미 view 이름을 사용하고 있기 때문이다. SubView에 포함 func makeUI(){ // 뷰 올리기 view.addSubview(emailTextFieldView) ... } 선언하는 것은 메모리에 올라갈 뿐..
-
[iOS] TextFieldApp과 관련된 사용 기술 정리
TextFieldApp 에 사용한 기술 정리 GitHub - Bucky5683/TextFieldApp: 앨런 iOS 개발 강의 활용 - 2 앨런 iOS 개발 강의 활용 - 2. Contribute to Bucky5683/TextFieldApp development by creating an account on GitHub. github.com Textfeild 뷰 컨트롤러 Delegate 설정 class ViewController: UIViewController, UITextFieldDelegate{ override func viewDidLoad(){ super.viewDidLoad() textField.delegate = self // 텍스트 필드 Delegate를 ViewContoroller로 설졍 ..
Algorithm
-
[문제 풀이] 오큰수 구하기
2023.08.04 - [알고리즘] - [Do it! 강의 정리] 자료구조에서 스택과 큐와 관련된 문제 [Do it! 강의 정리] 자료구조 배열과 리스트 자료 구조영역에서 자료를 담는데 사용하는 매우 기본적인 자료구조 파이썬에서는 리스트가 배여르이 특성도 함께 내포하고 있어 크게 구분하여 사용하지 않음 배열과 리스트의 sy5683.tistory.com 백준 온라인 저지 17298번 크기가 N인 수열 A = A1, A2, ..., AN이 있다. 수열의 각 원소 Ai에 관련된 오큰수 NGE(i)를 구하려고 한다. Ai의 오큰수는 오른쪽에 있으면서 Ai보다 큰 수 중 가장 왼쪽에 있는 수를 의미한다. 이러한 수가 없을 때 오큰수는 -1이다. 예를 들어 A = [3,5,2,7]일 때 NGE(1) = 5, NGE..
-
[Do it! 강의 정리] 자료구조
배열과 리스트 자료 구조영역에서 자료를 담는데 사용하는 매우 기본적인 자료구조 파이썬에서는 리스트가 배여르이 특성도 함께 내포하고 있어 크게 구분하여 사용하지 않음 배열과 리스트의 핵심 이론 배열 메모리의 연속 공간에 값이 채워져 있는 형태의 자료구조. 특징 배열의 값은 인덱스를 통해 참조 => 인덱스로 값에 바로 접근할 수 있음 선언한 자료형의 값만 저장할 수 있음 => 값을 삽입하거나 삭제하려면 해당 인덱스 주변에 있는 값을 이동시키는 과정이 필요함 새로운 값을 삽입하거나 특정 인덱스에 있는 값을 삭제하기 어려움 배열의 크기는 선언할 때 지정할 수 있고, 한번 선언하면 크기를 늘리거나 줄일 수 없음. 리스트 값과 포인터를 묶은 노드라는 것을 포인터로 연결한 자료구조 노드 : 컴퓨터 과학에서 값, 포인..
-
[Do it! 강의 정리] 시간복잡도
알고리즘 선택의 기준이 되는 시간 복잡도 시간복잡도 강의 시간 복잡도 표기법 시간 복잡도 : 주어진 문제를 해결하기 위한 연산 횟수 파이썬에선 2,000만 번 ~ 1억 번의 연산을 1초의 수행 시간으로 예측됨 시간 복잡도 유형 빅-오메가 Ω(g(n)) 최선일 때의 연산 횟수를 나타낸 표기법 (best case) 빅-세타 θ(g(n)) 보통일 때 연산 횟수를 나타낸 표기법 (average case) 빅-오 O(g(n)) 최악일 때 연산 횟수를 나타낸 표기법 (worst case) 코딩테스트에서는 빅-오 표기법을 기준으로 수행시간을 계산하는 것이 좋다. 시간 복잡도 그래프 데이터의 크기가 클수록 기하급수적으로 커짐 시간 복잡도 활용하기 알고리즘 선택 기준으로 활용하기 N개의 수가 주어졌을 때 이를 오름차순 ..
-
[Do it! 알고리즘 코딩테스트 with Python] 공부 이유 및 목표
이유 백준과 프로그래머스를 풀다가 정말 내가 알고리즘과 자료구조가 부족하다는 것을 느꼈다. 하필 학교에서 알고리즘을 배울때 코로나 + 프로젝트 2,3개 + 부학생회장 + 동아리 활동 등이 겹쳤다. 정말 바빴어서 깊게 알고리즘과 자료구조를 공부하지 못했고, 그것이 지금 내가 백준과 프로그래머스를 제대로 풀지 못 하는 결과를 낳았다. 후회되지만 시간을 돌릴 수는 없기 때문에 다시 공부를 시작해야되는 시기가 온 듯하다. [무료] Do it! 알고리즘 코딩테스트 with Python - 인프런 | 강의 IT기업 코딩테스트 대비를 위한 [자료구조 및 알고리즘 핵심이론 & 관련 실전 문제 풀이 강의] 입니다. - Python 편 -, [사진] 💻 코딩테스트 알고리즘의 핵심,파이썬으로 구현하는 알고리즘을 학습 www..