[디자인패턴] Abstract Factory(추상 팩토리) 패턴 with Swift
·
CS/디자인패턴
서론 저번 포스팅에서는 팩토리 메서드 패턴에 대해 알아보았습니다. [디자인패턴] Factory(팩토리) 패턴 with Swift 팩토리 패턴 팩토리 패턴은 팩토리 객체를 이용해 객체 생성 관심사를 분리하는 디자인 패턴입니다. 팩토리 메서드 패턴과 추상 팩토리 패턴으로 나뉘며 Swift에서는 프로토콜로 구현할 수 있습 jeong9216.tistory.com 이번 포스팅에서는 Abstract Factory 패턴에 대해 알아보겠습니다. 연관된 내용이 많으므로 지난 포스팅을 보고 와주세요. Abstract Factory 패턴 추상 팩토리 패턴은 구체적인 클래스에 의존하지 않고 서로 연관된 객체 조합을 만드는 인터페이스를 제공하는 패턴입니다. 지난 포스팅에서 다룬 팩토리 메서드 패턴에서는 PlayerFactory..
[디자인패턴] Factory(팩토리) 패턴 with Swift
·
CS/디자인패턴
팩토리 패턴 팩토리 패턴은 팩토리 객체를 이용해 객체 생성 관심사를 분리하는 디자인 패턴입니다. 팩토리 메서드 패턴과 추상 팩토리 패턴으로 나뉘며 Swift에서는 프로토콜로 구현할 수 있습니다. 팩토리 패턴이 나오게 된 배경은 OCP(개방 폐쇄 원칙)와 연결지어 설명할 수 있습니다. OCP는 확장에는 열려 있지만 변경에는 닫혀 있어야 한다는 원칙인데요. 닫혀 있어야 한다는 것은 확장을 했을 때 다른 부분에 영향을 주지 않아야 한다는 것을 의미합니다. (예시는 여기) 객체 생성 관심사를 분리해서 객체의 속성, 함수 등이 변경될 때 수정이 발생하는 범위를 최소화할 수 있습니다. 팩토리 메서드 패턴 팩토리 메서드 패턴은 인터페이스로 객체 생성 팩토리를 제공하고, 객체 생성 결정은 하위 클래스가 정하는 패턴입니..
[디자인패턴] Repository(레파지토리) 패턴 with iOS
·
CS/디자인패턴
서론 지금까지 ViewController의 역할을 분리하는 방법은 많이 알아보았습니다. MVVM의 ViewModel은 ViewController의 비즈니스 로직을 분리하기 위함이고, 이전 포스팅에서 알아본 Coordinator 패턴도 ViewController의 Flow 로직을 분리합니다. 그렇다면 지금의 ViewModel의 역할은 가벼울까요? (무거우니 포스팅을 썼겠죠? ㅎ;) 이번 포스팅에서 이를 주제로 알아보고, ViewModel의 역할을 덜어주는 Repository 패턴에 대해 알아봅시다. Repository 패턴 Repository는 데이터 fetch 역할을 담당하는 객체입니다. 기존에는 ViewModel이 네트워크 통신도 담당을 했는데요. 네트워크 통신은 굳이 ViewModel이 몰라도 되는 ..
[디자인패턴] Coordinator(코디네이터) 패턴 with iOS
·
CS/디자인패턴
서론 iOS에서 ViewController의 역할은 비대합니다. 그래서 여러 아키텍처, 디자인 패턴이 나오며 ViewController의 역할을 가볍게 하고 있습니다. 예를 들어, MVVM은 ViewModel 개념을 이용해 ViewController에서 비즈니스 로직을 분리합니다. 이번에 알아볼 Coordinator 패턴은 ViewController의 화면 전환 역할을 분리합니다. Coordinator 패턴이 무엇인지 알아보고 간단한 화면 전환 앱 예시까지 알아보겠습니다. (+ 요즘 문장 스타일을 바꿔보려고 하고 있습니다. 읽기 쉽게 작성하는 일이 참 어렵네요.. 많은 조언 부탁드립니다.) Coordinator 패턴 필요성 Coordinator 패턴은 2015년에 https://khanlou.com/20..
[디자인패턴] MVVM with iOS
·
CS/디자인패턴
MVVM 패턴은 MVC와 마찬가지로 자주 사용되는 디자인 패턴입니다. (MVC 포스팅은 여기에서 볼 수 있습니다.) UIViewController의 View와 Controller가 분리되기 어렵다는 단점을 극복하기 위해 사용되는 디자인 패턴이기도 합니다. 또한, SwiftUI에서는 MVVM을 기반으로 동작합니다. 이렇듯 MVVM은 iOS 개발에서 자주 사용되는 디자인 패턴입니다. 오늘은 MVVM 패턴에 대해 알아보고 RxSwift, Combine을 사용하지 않는 간단한 MVVM 구현을 해보도록 하겠습니다. MVVM MVVM 패턴은 마이크로소프트 개발자에 의해 발명되었고 2005년에 발표되었다고 하네요. 최근에 나왔다고 생각했는데 저는 이걸 17년이나 지나서 공부하고 있습니다... ㅎ; 아무튼, MVVM은..
[디자인패턴] 디자인 패턴을 사용하는 이유
·
CS/디자인패턴
서론 MVVM을 포함한 다른 디자인 패턴 포스팅을 작성하기 전에, 디자인 패턴을 왜 사용하는지를 먼저 알아야겠다고 생각했습니다. 왜 쓰는지도 모르는데 종류는 뭐있고 어떤 특성이 있는지 알아봤자 뭐해요!? 오늘 디자인 패턴을 사용하는 이유에 대해 알아두고 이후에 세부적인 패턴을 공부해봅시다. 디자인 패턴이란? 소프트웨어 설계 시 특정 맥락에서 자주 발생하거나, 공통적인 문제들을 해결하기 위한 방법 중 하나입니다. 과거 개발 과정에서 발견된 설계의 노하우를 축적하고 재사용하기 좋은 형태로 정리한 일종의 설계 디자인 방법론입니다. 요즘에는 디자인 패턴과 소프트웨어 아키텍처를 통칭하여 사용하는 것 같습니다. (개인적인 의견임) 실제로는 소프트웨어 아키텍처가 디자인 패턴보다 더 큰 범위이지만 공통되는 개념으로 인..
[디자인패턴] MVC 패턴 with iOS
·
CS/디자인패턴
MVC 패턴 디자인 패턴 중 가장 기본적인 것을 말하라면 MVC 패턴이라고 할 수 있습니다. MVC 패턴은 애플에서 기본적으로 지원하는 디자인 패턴으로, Model - View - Controller 구조의 아키텍처 패턴을 말합니다. 일반적으로 사용되는 MVC 패턴과는 달리 iOS에서는 조금 다르게 사용이 되는데요. iOS는 ViewController가 사용되기 때문에 View와 Controller가 결합되었습니다. 일반적인 MVC 패턴과 애플의 MVC 패턴을 비교하고, MVC 장단점을 알아보도록 합시다. 마지막에는 직접 구현해보는 시간을 갖겠습니다. 일반적인 MVC 패턴 일반적인 MVC 패턴은 간단히 알아봅시다. Model은 앱이 가지는 데이터와 비즈니스 로직을 갖고 있습니다. View는 앱에서 유저에..
[네트워크] OSI(Open System Interconnection) 7계층
·
CS/네트워크
OSI 7 계층이란 OSI 7 계층(Open Systems Interconnection Reference Model 7 Layer)은 네트워크 프로토콜을 기능별로 7개의 계층으로 분리하여 각 계층 간 상호 작동하는 방식을 정해 놓은 것입니다. 통신이 일어나는 과정을 7단계로 구분하여 과정을 단계별로 파악할 수 있습니다. 1 계층 ~ 7 계층 순서대로 물리계층, 데이터링크 계층, 네트워크 계층, 전송 계층, 세션 계층, 표현 계층, 응용계층이라 부르고 5~7 계층을 응용 계층으로 통합하여 OSI 5계층이라고 부르기도 합니다. 각 계층은 서로 독립적이며 하위 계층의 기능만을 이용할 수 있고 상위 계층에게 기능을 제공합니다. OSI 7계층 탄생 배경 1970년대 후반, 많은 컴퓨터 회사가 특징적인 네트워크 아..
[자료구조] Binary Search Tree(이진 탐색 트리) with Swift - 구현
·
CS/자료구조
안녕하세요. 개발하는 정주입니다. 오늘은 "Binary Search Tree(이진 탐색 트리) with Swift"을 정리하였습니다. 지난 포스팅에서는 트리의 개념에 대해 배웠습니다. 이번 포스팅에서는 Swift를 이용해 직접 구현해 보았습니다. 틀린 점이 있다면 댓글로 알려주세요! Swift로 이진 탐색 트리 구현하기 Swift로 이진 탐색 트리를 구현해보겠습니다. 트리의 구조를 보면 알겠지만 연결 리스트를 응용하여 구현합니다. 코드는 맨 아래 전체 코드도 첨부하였고 깃허브에서 확인도 가능합니다. 트리 출력하기 트리를 출력하는 코드는 다른 분의 좋은 코드를 가져왔습니다. devmjun.github.io/archive/BinarySearchTree extension BinarySearchTree { fu..
[자료구조] Tree(트리) with Swift - 개념
·
CS/자료구조
안녕하세요. 개발하는 정주입니다. 오늘은 "Tree(트리) with Swift"을 정리하였습니다. 트리는 포스팅 하나에 다 쓰기에는 중요한 내용이 많더라고요. 그래서 이번 트리 포스팅에서는 통상적인 트리의 개념과 이진 트리에 대해 다루고 다음 포스팅에서 Swift를 이용해 구현해보겠습니다. B 트리와 B+ 트리는 따로 포스팅할 예정입니다. 트리란? 트리란 노드(Node)와 간선(Edge)을 이용해 사이클을 이루지 않도록 구성한 데이터 구조입니다. 비선형 자료구조로 계층적 관계를 표현하는데 자주 사용합니다. (ex. 디렉터리, 조직도) 트리에 값을 아무렇게나 삽입하면 링크드 리스트와 다른 것이 없지만 트리를 잘! 만들면 자료의 삽입, 삭제 속도가 빠르고 참조와 탐색 속도가 사용 가능할 정도입니다. 따라서 ..
유정주
'CS' 카테고리의 글 목록