목록분류 전체보기 (14)
DailyCode
FlexLayout + PinLayout 개요: Yoga(Facebook) 기반의 Flexbox 구현에 Swift 인터페이스를 추가. UIStackView에 비해 8 ~ 12배 빠른 속도 두 프레임워크는 유사한 방식과 메서드명을 공유한다. PinLayout은 CSS의 절대적인 포지셔닝에서 영감을 얻었으며, 일반적인 제어 및 애니메이션에 매우 유용하다. 한 번에 하나의 보기를 레이아웃으로 전체 제어를 제공한다.(코딩 및 결함이 간단함.) 🎯 핵심 Pinlayout은 세밀화한 작업에, Flexlayout은 큼지막한 작업에 적합하다. 📜 규칙 layoutSubview에서 레이아웃 위치를 잡아줘야 한다. 📏 FlexLayout의 Grow와 Shrink FlexLayout은 Flexbox 개념에서 grow와 sh..
ReactiveX (Rx)는 Observer 패턴, Iterator 패턴, 그리고 함수형 프로그래밍의 개념을 결합한 프로그래밍 패러다임으로, Swift 언어로 구현된 버전이 RxSwift이다. 이를 통해 개발자는 "어떻게"가 아닌 "무엇을" 하는지에 집중할 수 있게 되고, 결과적으로 코드가 간결하고 이해하기 쉬워지는 특징이 있다. RxSwift는 Observable 시퀀스를 구독하는 Observer를 통해 동작을 정의하며, 비동기 동작을 추상화하여 쉽게 컴포즈 가능한 연산으로 만든다. ⏰ Observable Observable은 시간에 따라 변하는 데이터의 시퀀스를 나타낸다. 이 시퀀스는 세 가지 타입의 이벤트를 방출할 수 있다. Next 이벤트: Observable이 새로운 데이터를 생성하였음을 알리는..
깊이 우선 방식으로 정점을 방문하여 그래프를 탐색하는 그래프 탐색 알고리즘이다. 방문한 각 노드의 부모 노드를 추적하여 소스 노드와 그래프의 다른 노드 사이의 경로를 구성한다. 🚀 알고리즘 논리 DFS는 스택을 사용하여 방문한 노드를 추적한다. 소스 노드에서 시작하여 각 이웃 노드를 탐색하는 방식으로 작동한다. 🏁 알고리즘 동작 과정 시작점을 스택에 추가 스택이 비어있지 않다면, 스택에서 정점을 빼서 이웃 정점을 방문 이웃을 방문한 적이 없는 경우, 방문한 것으로 표시하고 스택에 추가한 후 2단계를 반복 이웃을 방문한 경우, 건너뛰고 2단계를 계속 진행 모든 정점을 방문했다는 것을 나타내는 스택이 비워질 때까지 2~4단계를 반복 (재귀적) ⏲ 시간 복잡도 O(V+E) (V: 노드의 수, E: 그래프의 가..
너비 우선 탐색(BFS) 다른 레벨로 이동하기 전에 같은 뎁스에 있는 모든 노드를 탐색하는 그래프 탐색 알고리즘 소스 노드에서 시작하여 그래프를 뎁스로 탑색하며, 다음 뎁스로 내려가기 전에 인접한 모든 노드를 방문한다. 개요 가중치가 없는 그래프에서 최단 경로를 찾거나, 특정 최적화에서 최적의 솔루션을 찾는데 널리 사용된다. 동작 과정 BFS 알고리즘은 큐(Queue) 자료구조를 이용하여 구현. 시작노드 선택 큐를 생성하고 시작노드를 큐에 대기 시작노드를 방문한 노드로 표기 큐가 비워질 때 까지 5,6 반복 큐에서 첫번째 노드를 큐에서 해제하고 방문한 노드로 표기 큐에 대기중인 노드 중 아직 방문하지 않은 인접 노드 모드 탐색, 그 후 이 노드들을 방문한것으로 표기하고 큐에 대기열 추가 모든 노드 방문시..
의존관계 역전 법칙(Dependency Inversion Principle, ISP)은 객체 지향 프로그래밍에서 SOLID 원칙 중 하나입니다. 이 원칙은 상위 모듈과 하위 모듈 간의 의존성을 최소화하고, 추상화를 통해 서로간의 결합도를 낮추는 것을 목표로 합니다. 이를 통해 시스템의 확장성, 재사용성, 테스트 용이성 등이 향상되며, 유지보수가 용이해집니다. 이를 구현하기 위해 의존성 주입(Dependency Injection)과 같은 기법이 사용되곤 합니다. 의존성 주입은 별도의 게시글로 소개 하겠습니다. 정의 시스템은 추상화에 의존하고, 구체화에 의존하면 안 된다 상위 모듈은 하위 모듈의 구현에 의존하면 안 된다. 하위 모듈(Class)이 상위 모듈에 정의한 추상 타입(Protocol)에 의존해야 ..
인터페이스 분리 법칙(Interface Segregation Principle, ISP)은 객체 지향 프로그래밍에서 SOLID 원칙 중 하나로, 인터페이스의 설계와 관련된 원칙입니다. 이 법칙은 큰 범용 인터페이스를 작은, 특정 목적에 맞는 여러 인터페이스로 분리하는 것을 권장하는 법칙입니다. 이를 통해 코드의 결합도를 낮추고, 유지 보수와 확장성을 향상시킬 수 있습니다. 정의 • 특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다. 이 원칙은 각각의 클라이언트에게 필요한 기능만을 제공하는 인터페이스를 여러 개 작성하는 것이, 모든 기능을 포함하는 하나의 거대한 인터페이스를 작성하는 것보다 훨씬 효과적이라는 것을 강조합니다. • 기능 구현 및 상속 시 불필요한 메서드가 구현될 필요..
정의 객체 지향 프로그래밍과 소프트웨어 설계에서 사용되는 원칙 중 하나로, 바바라 리스코프(Barbara Liskov)에 의해 소개되었습니다. 이 원칙은 "서브타입은 그들의 기반 타입을 대체할 수 있어야 한다"라는 원리를 제시합니다. LSP는 상속과 다형성의 올바른 사용을 강조하며, SOLID 설계 원칙 중 하나입니다. 특징 서브타입과 기반 타입: LSP는 서브 타입(subtype)이 기반 타입(basetype)을 대체할 수 있어야 함을 주장합니다. 이 말은 기반 타입의 객체가 사용되는 모든 위치에서 서브타입의 객체로 대체되어도 프로그램의 동작이 올바르게 유지되어야 함을 의미합니다. 메서드 시그니처: 서브타입은 기반 타입에서 상속받은 메서드를 오버라이딩할 때, 메서드 시그니처를 유지해야 합니다. 이는 매..
정의 소프트웨어 개체(클래스, 모듈, 함수 등)는 확장에는 열려 있어야 하지만 변경에는 닫혀 있어야 한다는 개념입니다. 이는 기존의 코드를 변경하지 않고도 새로운 기능을 추가할 수 있도록 하는 것을 목표로 합니다. 이를 위해서는 클래스와 인터페이스를 확장 가능하도록 설계해야 합니다. 장점 기능 추가에 용이 OCP를 따르는 코드는 기능 추가 시 기존 코드를 변경하지 않아도 되므로 유연성이 높습니다. 클래스를 분리 테스트 할 수 있어 개별 부분에 대한 테스트가 용이 OCP를 따르는 코드는 기능 추가 시 기존 코드를 변경하지 않아도 되므로 유연성이 높습니다. 예제 도형의 너비를 구하는 클래스를 예로 들어보겠습니다. 이 클래스는 도형의 종류에 따라 너비를 구하는 메소드를 제공합니다. 만약 새로운 도형이 추가되면..