전체 글 (34) 썸네일형 리스트형 VO(Value Object) VO는 Entity, DTO, 도메인 주도 설계 등과 함께 언급되는 개념 중 하나임.VO(Value Object)When programming, I often find it's useful to represent things as a compound.**👉 프로그래밍할 때, 사물을 복합물로 표현하는 것이 유용한 경우가 종종 있다.**A 2D coordinate consists of an x value and y value. An amount of money consists of a number and a currency. A date range consists of start and end dates, which themselves can be compounds of year, month, and da.. Concurrency - 기초 동시성(Concurrency) 프로그래밍비동기 프로그래밍 이해1. 비동기 처리가 필요한 이유네트워크 통신과 비동기 처리네트워크 통신(서버와 통신)은 부하가 많이 걸리는 일임. 예를 들어 서버로부터 데이터를 가져와 테이블 뷰로 표현한다고 가정을 해보자. 만약 비동기 처리가 되어있지 않다면 테이블뷰를 스크롤 할 때마다 버벅이게 될 거임! 🤔왜 그럴까? 비동기 처리를 하지 않으면 UI관련 메커니즘이 제대로 동작하지 않기 때문?? 비동기 처리를 하지 않으면 메인 쓰레드에서 모든 작업을 처리함. 그러나 작업의 길이가 길어지게 되면서(네트워크 통신) 과부하가 걸리게 되는거임. 그래서 메인 쓰레드는 UI작업만 남기.. DFS&BFS (이코테 2021 강의 몰아보기) 3. DFS & BFS그래프 알고리즘, 경로를 찾는 문제 시 상황에 맞게 활용탐색(Search)란 많은 양의 데이터 중에서 원하는 데이터를 찾는 과정을 말함대표적인 그래프 탐색 알고리즘으로 DFS, BFS가 있음Stack선입후출(FILO) 구조의 자료구조입구와 출구가 동일한 형태로 스택을 시각화할 수 있음 DFS(Depth First Search)루트 노드 혹은 임의 노드에서 다음 브랜치로 넘어가기 전에, 해당 브랜치를 모두 탐색하는 방법깊이 우선 탐색이라고도 부르며, 깊은 부분을 우선적으로 탐색하는 알고리즘스택 & 재귀함수를 이용해 구현 → 모든 경로를 방문해야 할 경우에 사용그래프의 구성 요소, 사이클, 위상 정렬 등을 찾는데 유용함. 탐색 시작 노드를 스택에 삽입하.. 백트래킹, Back Tracking 백트래킹모든 경우의 수를 고려하는 알고리즘모든 경우의 수를 탐색하면서, 더 이상 진행할 필요가 없는 후보는 탐색 X, 뒤로 돌아감진행할 필요가 없는 경우는 따지지 않으므로 브루트포스에 비해 시간 절약탐색 알고리즘으로, DFS, BFS로 모두 구현 가능.재귀적으로 문제를 해결. 백트래킹 절차DFS 수행 - 재귀를 통해 DFS 수행노드 검토 - 진행이 필요한 노드인지 검토 필요( 더 이상 진행할 필요가 없을 시 백트래킹 수행)서브트리 이동 - 방문 노드위 하위로 이동(재귀를통해 DFS 수행)백트래킹 수행 - 유효하지 않은 노드일 경우 상위노드로 이동(백트래킹 수행) 백트래킹 유망성 판단백트래킹은 노드를 검토해 하위로 이동하거나, 백트래킹을 수행함.이를 유망성이라고 함.해가 될만한지 판단, 유망하다면 다음 노.. 동적 프로그래밍, Dynamic Programming(DP) DP란?기본적으로 DP란 recursion 을 활용한 최적화 방법문제를 여러 개의 부분 문제로 나누어 해결하고,이를 저장해 둠으로써 다시 계산할 필요 없이 사용할 수 있도록 하는 것! → 가장 작은 부분의 결과를 저장 후, 이를 이용해 상위 문제를 풀어가는 방식 다음과 같은 경우에서 DP를 사용할 수 있다. 반복을 시행하는 부분이 존재. 동일 한복 연산 결과가 일정해야 함. 대표적인 예로 피보나치 수열 문제가 있다!// recursion을 사용한 문제 해결// 이 경우 실행 단계에 따라 계산 횟수가 기하급수적으로 증가함.int fib(int n) { if (n 재귀함수를 사용한다면 동일한 연산을 계속 반복해야 함.DP를 사용하게 되면 연산 결과를 memoiaztion한 후, 저장 해 사용.. Type Erasure, Opaque Type Type Erasure에 대해 살펴보도록 하겠습니다.이걸 공부하는 이유는 제가 swiftUI를 공부하면서 뷰 만들 때 항상 some 키워드가 앞에 붙자나요.맨날 무의식적으로 사용하다가 어느순간 이게 근데 뭐하는건데 왜 붙지 생각이 들어서관련 내용을 정리해보도록 하겠습니다! 아래와 같이 ContentView를 그리는 View가 있을 때 View 타입 앞에 some 키워드가 붙습니다.struct ContentView: View { var body: some View { Text("Hello, world!") .padding() }} some은 computed property또는 함수의 구체적 return Type을 숨기는 것(불투명한 타입)을 제공할 수 있음(ret.. Access Control(접근제어자) 안녕하세요!! 정~말 오랜만에 글을 씁니다!!!한동안 이래저래.. 나태하게 지냈는데 다시 맘잡구 천천히 시작해보겠습니다! 오늘은 비교적 간단한 내용을 가져왔는데여.바로 접근제어자입니다. Swift 접근제어자에 대해 정리해 보겠습니다. 저는 앱을 만들때 보면 접근 제어자를 default 아니면 private 정도만 쓰게 되더라구요. 접근제어자를 사용하는 이유는 모듈, 소스파일 등 요소의 접근을 제어하기 위해서잖아요? (객체지향의 은닉화 구현.. 뭐 그런거?)뭐 접근을 제어해서 상세 구현을 숨기고, 불필요한 접근을 막아서 코드를 좀 더 좋게 만들 수 있따 그런거잖아여.이렇게 두루뭉실하게만 알고 있기도 하고, 너무 의식하지 않고 생각없이 사용해온 것 같아서 좀 더 세분화해서 접근 관리를 할 필요가 있지 않나라.. [weak self] 왜 쓸까!! 어느순간부터 개발을 할 때 [weak self] 를 거의 무조건 붙히는데여 메모리 누수와 참조 문제와 관련이 있다고 공부했었던 기억이 있는데 잘 기억도 안나고.. 그냥 무의식적으로 항상 넣고 있길래 정리를 한번 해보려고 합니다. 여기서는 메모리에 관한 부분은 다루지 않고 참조에 관한 내용만 다뤄보도록 하게씀 (ARC 이런건 따로 정리해 볼 예정) 클로저 내부에서 외부 변수를 사용하게 되면 변수를 클로저 내부적으로 저장을 하고, 이때 해당 변수의 타입(값, 참조)에 상관없이 참조타입으로 memory capture를 하게 됩니다. 참조에 대해서 코드로 설명을 더 해보겠음! var a = 5 let closure = { print(a) } print(a) // 5 a = 10 closure() // 10 위와.. SwiftUI 내부 동작 원리 SwiftUI 내부 작동 원리 When SwiftUI looks at your code, what does it see? 이번시간에는 swiftUI가 우리의 코드를 볼 때 내부 동작에 대해서 한번 학습해 보겠습니다. 이를 위해서 아래의 세가지를 살펴볼 예정입니다! Identity, Lifetime, Dependencies Identity는 SwiftUI가 앱의 다양한 업데이트 시 각 element를 동일하거나 혹은 별개로 인식하는 방법입니다. Lifetime은 시간의 흐름에 따른 뷰와 데이터의 존재를 추적하는 방법입니다. Dependency는 인터페이스를 업데이트해야하는 시기와 이유를 이해하는 방법입니다. 이 개념들을 통해 SwiftUI는 변경해야 하는 사항, 방법, 시기를 결정하여 화면에 표시되는 동적.. KVO(Key-Value Observing) KVO(Key-Value Observing) KVO는 객체의 프로퍼티 변화를 다른 객체에 알리는 Cocoa Programming Pattern 논리적으로 분리된 models과 views 사이의 변경사항을 전달하는데 유용 NSObject에서 상속받은 클래스만 사용 가능 바로 코드를 보면서 한번 살펴 보겠습니다~! class Person { var name: String init(name: String) { self.name = name } } 다음과 같은 클래스에서 KVO를 이용해 상태 변화를 감지하고 싶다고 가정해보겠습니다. KVO를 사용하기 위해서는 우선 다음과 같은 코드를 추가해줘야 합니다. NSObject 상속 변화할 프로퍼티에 @objc dynamic 추가 class Person: NSObject.. 이전 1 2 3 4 다음