수빈이의 개발일기 74

[Design Pattern] Composite Pattern (컴포지트패턴) with Swift

Composite Pattern 개요 Object의 Hierarchies를 표현하고 각각의 Object를 독립적으로 동일한 인터페이스를 통해 처리할 수 있게 한다. 컴포지트 패턴은 클라이언트가 복합 객체(group of object) 나 단일 객체를 동일하게 취급하는 것을 목적으로 한다. 여기서 컴포지트의 의도는 트리 구조로 작성하여, 전체-부분(whole-part) 관계를 표현하는 것이다. 실제 상황에서 생각해보기 언제 사용하는가? 복합 객체와 단일 객체의 처리 방법이 다르지 않을 경우, 전체-부분 관계로 정의할 수 있다. 전체-부분 관계의 대표적인 예는 Directory-File이 존재한다. 이러한 전체-부분 관계를 효율적으로 정의할 때 유용하다. 코드로 확인해보기 import XCTest proto..

💌 Design Pattern 2022.02.24

[Design Pattern] Strategy Pattern (스트레티지패턴) with Swift

Strategy Pattern 개요 Strategy는 어떤 동작을 하는 로직을 정의하고 이것들을 하나로 묶어 (캡슐화) 관리하는 패턴 새로운 로직을 추가하거나 변경할 때 한번에 효율적으로 변경이 가능하다. 실제 상황에서 생각해보기 스트레티지 패턴은 다양한 방식으로 특정 작업을 수행하는 클래스를 선택하고 이런 모든 알고리즘을 Strategy 라는 별도의 클래스로 추출할 것을 제안한다. 예를 들어, 여행자를 위한 네비게이션 앱을 만든다고 가정해보자. 앱의 첫번째 기능은 도로 위의 경로만 보여주는 기능이었다. 그러나 다음 업데이트에 도보 경로 옵션을 추가해야 하는 상황이 되었다면? 그리고 다음 업데이트에 대중교통 경로까지 추가해야하는 상황이라면? 게다가 또 자전거 도로까지 추가해야 한다면?!! (으악 복잡해!..

💌 Design Pattern 2022.02.23

[Design Pattern] Observer Pattern (옵저버패턴) with Swift

안녕하세요! 조이임다! 저희 회사는 코로나로 인해서 원래도 상시 재택을 했지만 더 많이 재택근무를 하게 되었어요ㅠ_ㅠ 3차 접종까지 마쳤음에도 혹시나 걸릴까봐 저도 이번주는 오늘 빼고는 다 재택이랍니당 (TMI 방출) 이 글을 보시는 모든 분들 항상 건강하시길 바랍니다!! Observer Pattern 개요 옵저버는 관찰하는 개체에 발생하는 모든 이벤트에 대해 여러 개체에 알리는 구독 메커니즘을 정의할 수 있는 동작 디자인 패턴 관찰자 패턴은 구독자 인터페이스를 구현하는 모든 개체에 대해 이러한 이벤트를 구독하거나 구독을 취소할 수 있는 방법을 제공한다. 실제 상황에서 생각해보기 서로의 정보를 주고받는 과정에서 정보의 단위가 클수록, 객체들의 규모가 클수록 복잡성이 증가하게 된다. 이때 가이드라인을 제시..

💌 Design Pattern 2022.02.22

[Design Pattern] Factory Method Pattern (팩토리메소드패턴) with Swift

안녕하세요! 조이임다^^7 오늘도 까먹지 않고 포스팅을 해봅니다..1!!!!! 오늘 정말 피곤하네요..흑흑 암튼 각설하고 바로 시작해볼게요! Factory Method Pattern 개요 슈퍼클래스에서 객체를 생성하기 위한 인터페이스를 제공하지만 서브클래스가 생성될 객체의 유형을 변경할 수 있도록 하는 생성 디자인 패턴이다. 즉, 객체를 만드는 부분을 Subclass에 맡기는 패턴이다. 실제 상황에서 생각해보기 우리가 물류 응용 프로그램을 만들고 있다고 생각해보자. 첫번째 앱 버전은 트럭 운송만 처리할 수 있으므로 Truck 클래스에 대부분의 코드를 작성해두었다. 이후 사업 확장으로 해상 물류를 처리하는 기능이 추가되어야 한다. 그러나 우리는 대부분 Truck 이라는 클래스에 로직을 작성해두었다. Shi..

💌 Design Pattern 2022.02.18

[Design Pattern] Template Method Pattern (템플릿 메소드 패턴) with Swift

안뇽하세요!@ 조이에요!@ 어제도 포스팅을 하려고 했는데 말이죠.. 제 맥북이... 몬터레이 업데이트를 하다가 어젯 밤에 벽돌이 되었지 뭐에요..? (털썩) 그래서 어제 밤새 눈물의 밤을 보내고.. 오늘 회사에서 점심시간에 복구해왔습니다.. 다들 업데이트는....신중하게 합시다....흑흑 아무튼! 오늘의 템플릿 메소드 패턴 시작해볼게요~! TemplateMethod Pattern 개요 템플릿 메서드는 기본 클래스에서 알고리즘의 골격을 정의하고 전체 알고리즘의 구조를 변경하지 않고 하위 클래스가 단계를 재정의하도록 하는 동작 디자인 패턴이다. 실제 상황에서 생각해보기 로직을 단계별로 나누어야 하는 상황에서 적용한다. 단계별로 나눈 로직들이 앞으로 수정될 가능성이 있을 경우 더 효율적이다. 부모 클래스에서 ..

💌 Design Pattern 2022.02.16

[Design Pattern] Singleton Pattern (싱글톤패턴) with Swift

안녕하세요 조이입니다~! 오늘은 게으름피우지 않고 디자인패턴 포스팅을 해보려고 해요! 오늘도 군말없이 바로 시작하겠습니다! Singleton Pattern 개요 "하나의 인스턴스만 생성하여 사용하는 디자인 패턴" 즉, 인스턴스가 필요할 때 똑같은 인스턴스를 만들지 않고 기존의 인스턴스를 활용하는 것이다. 실제 상황에서 생각해보기 하나의 나라를 생각해보자. 한 나라는 하나의 공식 정부를 가질 수 있다. 당연하게도! 정부를 구성하는 개인의 신원과는 상관없이 "대한민국 정부" 라는 제목은 담당자의 그룹을 식별할 수 있는 글로벌 엑세스 포인트라고 볼 수 있다. 대충 무슨 말인지는 알겠음. 그러면 우리가 코드로 적용할 때에는 언제 사용하지? 공통된 객체를 여러개 생성해서 사용해야하는 상황에서 사용한다. 인스턴스가..

💌 Design Pattern 2022.02.14

[Design Pattern] Adapter Pattern (어댑터패턴) with Swift

안녕하세요! Joy 입니다. 내친김에 어댑터 패턴까지 한번 알아보려고 합니당 군말없이 바로 시작하겠습니다! Adapter Pattern 개요 어댑터패턴은 구조패턴의 일종으로 서로 호환되지 않는 객체들이 협업할 수 있도록 하는 패턴 실제 상황에서 생각해보기 문제 상황 만약 주식 시장에서 모니터링 앱을 만든다고 가정하자. 이 앱은 XML 형식의 소스에서 주식 데이터를 가져와서 차트와 다이어그램을 표시한다. 어느날 타사의 분석 라이브러리를 통합하여 앱을 개선하려고 한다. 그런데, 해당 라이브러리는 JSON 형태의 데이터에서만 작동한다. XML과 함께 작동하도록 라이브러리를 변경할 수는 있지만 라이브러리에 의존하는 기존 코드를 손상시킬 수 있다. 처음부터 라이브러리 소스 코드에 액세스할 수 없어 이 접근 방식이..

💌 Design Pattern 2022.02.13

[Design Pattern] SOLID

안녕하세요! Joy 입니다. 오늘은 SOLID 원칙에 대해서 복습할 겸 간단히 정리해보려고 합니다. 요새 몸이 좀 안좋아서 HIG도 알고리즘도 포스팅도 못하고 매일 혼자 공부해서 Github 업로드만 하고 있었어요...흑흑 알고리즘 정리하면서 디자인패턴도 함께 복습하고 있었기 때문에.. 오늘은 디자인패턴 글 쓸거에요.. (사실 알고리즘이 포스팅하는데 더 많은 시간이 걸려요..) 아무튼~ 시작해보겠습니다리 디자인 패턴 디자인 패턴은 "아이디어" 이다. 어떠한 구현을 말하는 것은 아님 프로젝트에 반드시 적용해야 하는 사항은 아니지만, 추후 재사용성이나 유지보수시 발생할 문제를 예방하기 위해 만들어진 것 SOLID (객체지향 설계 원칙) SRP : Single Responsibility Principle 하나..

💌 Design Pattern 2022.02.13

[Algorithm] 퀵정렬 (Quick Sort) by Swift

안녕하세요! Joy 입니다. 오늘 늦잠을 잤더니 아주 좋은데 사실 아직 잠이 덜깼어요... 오늘은 오타가 있어도... 나는 몰라요! (무책임) 아무튼 그래서 오늘 공부할 알고리즘은 퀵정렬 입니다! 퀵정렬은 사실 개념 자체는 그리 어렵지 않은데 알고리즘 구현시에 재귀를 활용하다 보니까 (저는) 많이 헷갈리더라구요.. 아직 알고리즘을 통달하려면 멀었나 봅니다.. 그럼 시작해볼게요! 개념 분할 정복 방법을 통해 주어진 배열을 정렬한다. [분할 정복 방법] 문제를 작은 두개의 문제로 분리하고 각각 해결한 다음, 결과를 모아서 문제를 해결하는 전략 Quick Sort는 불안정 정렬에 속하며, 다른 원소와의 비교만으로 정렬을 수행하는 비교 정렬에 속한다. 또한 merge sort와 달리 quick sort는 배열을..

🔡 Algorithm 2022.01.16

[Algorithm] Insertion Sort (삽입정렬) by Swift

안녕하세요! Joy 입니다. 저는 어저께 3차 백신 (부스터샷) 을 맞아서 회사도 연차내고 아주 푹 쉬느라고 포스팅을 못했어요 저와의 약속을 지키려고 매일 1일 1포스팅을 하려고 했는데.. 흐흑 그래도 생각보다 많이 아프진 않더라고요! 하루 푹 자고 나니까 말끔히 나아버렸습니다 히히 그럼 오늘은 세번째 알고리즘인 삽입 정렬을 공부해보려고 해요! 시~~작~~합니다~~~~ 개념 손 안의 카드를 정렬하는 방법과 유사하다. Insertion Sort는 Selection Sort와 유사하지만 조금 더 효율적인 정렬 알고리즘이다. 두번재 원소부터 시작하여 그 앞 (왼쪽)의 원소들과 비교하여 삽입할 위치를 지정한 후, 원소를 뒤로 옮기고 지정된 자리에 자료를 삽입하여 정렬하는 알고리즘이다. 최선의 경우 O(N)이라는..

🔡 Algorithm 2022.01.15
반응형