안녕하세요 Pingu입니다.🐧 지난 글에서는 Factory Method Pattern에 대해 알아봤는데요, 이번 글에서는 또 다른 Creational Pattern 중 하나인 Prototype Pattern(프로토타입)에 대해 알아보도록 하겠습니다. 프로토타입 패턴이란? 프로토타입 패턴의 정의는 코드를 클래스에 종속시키지 않고 기존에 존재하던 객체를 복사할 수 있는 디자인 패턴입니다. 어떤 객체가 존재하고 해당 객체와 정확하게 똑같은 객체를 만들고 싶을 때 프로토타입 패턴을 사용할 수 있습니다. 어떻게 하면 특정 객체와 동일한 객체를 만들 수 있을까요? 일단 클래스와 같은 참조 타입을 복사하는 방법에는 얕은 복사(shallow copy)와 깊은 복사 (deep copy)가 있습니다. 얕은 복사는 그냥 새..
안녕하세요 Pingu입니다.🐧 지난 글에서는 Builder Pattern에 대해 알아봤는데요, 이번 글에서는 또 다른 Creational Pattern 중 하나인 Factory Method Pattern(팩토리 메서드)에 대해 알아보도록 하겠습니다. 팩토리 메서드 패턴이란? 객체를 만들기 위한 인터페이스를 정의하지만, 어떤 클래스의 인스턴스를 생성할지에 대한 결정은 하위 클래스가 정하도록 하는 방법입니다. 간단하게 말해서 객체 생성을 서브 클래스가 하도록 처리하는 패턴입니다. 즉 객체 생성을 캡슐화할 수 있으며 이로 인해 부모 클래스는 자식 클래스가 어떤 객체를 생성하는지 몰라도 됩니다. 팩토리 메서드 패턴은 위와 같은 구조를 갖습니다. Product Creator와 하위 클래스가 생성할 수 있는 모든 ..
안녕하세요 Pingu입니다.🐧 지난 글에서는 Abstract Factory 패턴에 대해 알아봤었는데요, 이번 글에서는 또 다른 Creational Pattern인 Builder Pattern에 대해 알아보려고 합니다. 빌더 패턴이란? 복잡하게 생성되어야 할 객체를 구현할 때 구성을 분리하여 다른 표현으로 만들 수 있게 하는 패턴입니다. 여기서 표현이라고 하니 좀 와 닿지 않는데요, 간단하게 동일한 역할을 하는 다른 코드로 만들 수 있다고 볼 수 있습니다. 즉 어떤 객체를 생성자로 만들 때 한 번에 모두 만들 수도 있지만 객체가 가지는 요소가 많다면 여러 단계로 나누어 객체를 만들 수 있게 하는 패턴입니다. 빌더 패턴은 위의 그림과 같이 3가지 요소로 나눌 수 있어요. Director input을 받고 b..
안녕하세요 Pingu입니다.🐧 지난 글에서는 생성 패턴이 뭔지 알아봤었는데요, 이번 글에서는 생성 패턴 중에서 Abstract Factory Pattern(추상 팩토리 패턴)에 대해 공부해보려고 합니다. 추상 팩토리 패턴은 Kit 패턴이라고도 알려져 있다고 해요. 추상 팩토리 패턴의 목적 추상 팩토리 패턴의 목적은 구체적인 클래스를 지정하지 않고 관련된 객체들을 모으기 위한 인터페이스를 제공하는 것입니다. 또한 코드를 변경하지 않고도 조건에 따른 적절한 객체를 사용할 수 있게 해줍니다. 등장 배경 UI를 만들 때 스크롤 바, 버튼과 같은 뷰를 사용해서 만들게 되는데, 이들은 모두 다른 모양과 동작을 합니다. 이들은 모양과 동작은 다르지만 모두들 관련이 되어있다고 할 수 있습니다. 이러한 객체들을 프로그램..
안녕하세요 Pingu입니다.🐧 지난 글에 이어 이번 글에서도 디자인 패턴에 대해 공부해보도록 하겠습니다~! 지난 글에서 디자인 패턴에는 크게 Creational, Structural, Behavioral 패턴이 있다고 했는데요, Creational Pattern(생성 패턴)에 속하는 여러 가지 패턴들을 알아보기 전에 생성 패턴이 뭔지부터 살펴보려고 합니다. Creational Pattern (생성 패턴) 이란? 생성 패턴은 객체가 인스턴스화 되는 과정을 추상화합니다. 객체가 구성, 생성되고 표현되는 방식에 관계없이 시스템을 독립적으로 만드는데 도움이 됩니다. 생성 패턴에는 크게 두 종류가 있습니다. 클래스 생성 패턴 인스턴스로 만들 클래스를 다양하게 만들기 위한 용도로 상속을 사용 객체 생성 패턴 인스턴..
안녕하세요 Pingu입니다.🐧 오늘부터 객체 지향 소프트웨어를 개발을 할 때 발생하는 문제의 해결방법을 생각할 때 다양한 방법을 떠올릴 수 있도록 디자인 패턴을 공부하려고 합니다. 공부에 참고할 책은 1994년에 쓰인 Design Patterns: Elements of Reusable Object-Oriented Software 라는 책과 Raywenderlich 사이트의 Design Patterns by Tutorials라는 책입니다. 전자는 거의 30년 전에 나온 책인데, 책에 있는 디자인 패턴들이 아직까지도 쓰인다니 정말 대단한 거 같아요. 공부 방법은 책으로 개념을 공부한 뒤, 다양한 디자인 패턴을 Swift예제로 구현해 볼 계획입니다! 그럼 이번 글에서는 디자인 패턴이 뭔지, 어떠한 디자인 패턴..
안녕하세요 Pingu입니다🐧 백준에서 알고리즘 문제들을 Swift 언어로 풀다 보면 가끔 Int(String(Substring))은 시간 초과가 안 나는데 Int(Substring)은 시간 초과가 나는 것을 겪었었는데요, 예를 들면 아래 문제가 있습니다. icksw.tistory.com/93 [백준] 1753번 최단 경로 [Swift] 문제 방향그래프가 주어지면 주어진 시작점에서 다른 모든 정점으로의 최단 경로를 구하는 프로그램을 작성하시오. 단, 모든 간선의 가중치는 10 이하의 자연수이다. 입력 첫째 줄에 정점의 개 icksw.tistory.com 이거 때문에 날린 시간이 너무 억울해서 도대체 왜 이런가에 대해 한 번 알아봤습니다.😂 참고 자료는 실제 Swift의 구현 코드 입니다. https://g..
안녕하세요 Pingu 입니다!🐧 Swift에는 Heap이 따로 없어서 직접 만들어야 합니다. ㅠ.ㅠ 매번 만드는게 귀찮아서 이렇게 따로 글을 남기려고 합니다. 간단하게 배열로 힙을 만들었고 최대힙, 최소힙을 모두 만들 수 있는 힙입니다. 힙의 가장 기본적인 기능들만 구현했습니다. 혹시나 힙정렬이 궁금하시다면 여기를 참고해주세요. // Made By Pingu class Heap { var heapArray: [T] var root: T? { if isMaxHeap { maxHeapify() } else { minHeapify() } return heapArray.first } var count: Int { return heapArray.count } var isEmpty: Bool { return hea..
- Total
- Today
- Yesterday
- Swift
- Apple
- 앱개발
- DP
- 아이폰
- mac
- 알고리즘
- 동시성
- OS
- 백준
- System
- 스위프트
- Xcode
- OSTEP
- 문법
- 테이블뷰
- pattern
- 자료구조
- Publisher
- 코딩테스트
- operator
- 코테
- dfs
- Combine
- BFS
- document
- IOS
- design
- operating
- 프로그래밍
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |