반응형

Computer Science/디자인 패턴 5

빌더 패턴(Builder Pattern)

빌더 패턴(Builder Pattern)이란? 빌더 패턴은 생성 패턴(ConcretePattern)중 하나로, 객체를 생성하기 위한 방법 중 하나라고 할 수 있다. 이외의 생성 패턴으로는 생성자 패턴, 정적 메서드 패턴, 수정자 패턴 등이 있다. 그럼 먼저 빌더 패턴을 사용하는 이유에 대해서 알아보도록 하자. 기존의 생성자만을 사용한 객체 생성의 경우 생성자를 overload 함으로써 불필요한 생성자가 늘어난다거나 생성자에 들어갈 인자가 많아질 경우 이들의 순서를 일일이 맞춰 주어야 하고, 각 값이 어떤 값으로 들어가는지 헷갈릴 여지가 있다는 불편함이 존재한다. 예를 들어 Persoon이라는 클래스에 인적사항을 인자로 주어 객체를 생성한다고 생각해보자. fun main(){ var gildong = Pe..

옵저버 패턴(Observer Pattern)

옵저버 패턴 Observe, 영어로 관찰하다 라는 뜻을 가지고 있다. 위 사진은 스타크래프트 게임에 나오는 Observer라는 관측 유닛이다. 플레이어는 위 유닛으로 상대방을 감시하여 정보를 얻어낼 수 있을 것이다. Observer를 보여주는 이유는 옵저버 패턴도 마찬가지이기 때문이다. 옵저버 패턴은 어떤 객체의 상태 변화를 '관측'하여 연관된 객체들에게 알림을 보내는 디자인 패턴이라고 할 수 있다. 예시 예를 들어서 설명해보도록 하자. 한 유튜버가 있고, 해당 유튜버를 구독한 사람들에게 동영상이 업로드될 때마다 구독자들에게 영상 제목을 알려주도록 해보자. interface Youtuber{ fun subscribe(subscriber: Subscriber) fun unsubscribe(subscribe..

스테이트 패턴(State Pattern)

스테이트 패턴 스테이트 패턴은 객체가 어떠한 동작을 수행할 때 객체의 '상태(state)'에 따라 다른 동작을 수행하도록 하는 상황에서, 객체의 상태를 직접 체크하는 것이 아닌 상태 자체를 객체화하여 상태 객체가 동작을 수행하도록 위임하는 패턴이다. 예시 게임 캐릭터를 가지고 예시를 한 번 들어보도록 하자. const val SEATING = "seating" const val STANDING = "standing" fun main(){ var player = Player() player.rightClick() player.setState(SEATING) player.rightClick() } class Player(){ private var state = STANDING fun setState(stat..

스트래티지 패턴(Stratagy Pattern)

스트래티지 패턴 스트래티지 패턴은 행위(Behavior)들을 캡슐화하여 동적으로 자유롭게 바꿀 수 있게 하여 전략(Stratagy)을 쉽게 바꿀수 있게 해주는 패턴이다. 코드에서 달라지는 부분을 찾아내어 분리시킨 뒤, 이를 캡슐화한다. 상속보다는 구성을 활용하며, 구현이 아닌 인터페이스에 맞춰서 프로그래밍 한다. 예시 어떤 게임에 셋의 캐릭터가 존재한다고 생각해보자. abstract class Player{ fun attack(){ println("공격합니다.") } fun walk(){ println("걷습니다.") } abstract fun display() } class Warrior: Player(){ override fun display(){ println("전사입니다.") } } class F..

싱글톤 패턴(SingleTon Pattern)

싱글톤 패턴 싱글톤 패턴은 특정 클래스의 인스턴스를 최초 한 번만 생성하여 이후에 다른곳에서 해당 클래스의 생성자를 호출하더라도 새롭게 객체를 생성하는것이 아닌 최초로 생성된 객체를 반환하여 프로그램 전역에서 동일한 하나의 객체에 접근하도록 하는 디자인 형태이다. 장점 ▶ 고정된 메모리 영역을 한 번만 할당하여 사용하여 하나의 객체만 생성하기 때문에 메모리 낭비를 줄일 수 있다. ▶ 싱글톤 패턴으로 만들어진 클래스의 인스턴스는 전역 인스턴스이기 때문에 데이터 공유가 용이하다. ▶ 최초 생성 이후에는 호출시 메모리에 이미 생성된 객체를 가져오기 때문에 객체 로딩 시간이 줄어든다. ▶ 인스턴스가 하나만 생성되는것을 보장한다. 안드로이드 같은 경우 SharedPreference를 사용할 때 이러한 싱글톤 패턴..

반응형