Kotlin/Design Patterns

    [Design Pattern] 파사드 패턴이란 무엇인가? : Facade Pattern

    파사드 패턴이란? 파사드 패턴은 일련의 저수준 인터페이스들을 하나의 고수준 인터페이스로 묶어주는 패턴이다. 클라이언트 객체가 여러 저수준 인터페이스의 동작을 제어 하려면 여러 저수준 인터페이스의 메서드들을 일일히 호출해야 하는데, 파사드 패턴을 이용하면 고수준 인터페이스의 메서드 호출 만으로 한 번에 할 수 있게 된다. *파사드 패턴에서는 고수준 인터페이스를 저수준 인터페이스를 통합했다 해서 '통합 인터페이스'라고 부른다. 저수준 인터페이스를 바꾸기 위해서 다른 인터페이스를 건드리지 않고 통합 인터페이스의 코드만 건드리면 되므로 클라이언트 객체는 여러 저수준 인터페이스에 대해 의존성이 느슨해진다. 파사드 패턴을 쓰지 않았을 때의 문제점 예를 들어 우리가 커피를 만든다고 해보자. 커피를 만들기 위해서는 원..

    [Design Pattern] 커맨드 패턴이란 무엇인가?

    커맨드 패턴 커멘드 패턴은 하나의 객체를 통해 여러 객체들에 명령(Command)을 해야 할 때 사용되는 패턴이다. 커멘드 패턴을 사용하면 요청을 캡슐화해서 커멘드 객체가 명령을 해야하는 객체들에 대한 의존성을 느슨하게 만들 수 있다. 이 말이 무슨 말일까? 커멘드 패턴을 사용하지 않으면 여러 객체들에 명령(Command)를 하기 위해서는 명령을 하는 객체(커멘드 객체)가 명령을 받는 객체들을 알아야 한다. 예를 들어 집 안의 조명을 제어하는 LightController 클래스가 있다고 해보자. LightController는 제조사가 다른 조명들(MainLight, SubLight, BedRoomLight)에 대한 제어를 한다. LightController는 조명을 제어하기 위해 각 조명을 제어하는 메서..

    팩토리 메소드 패턴과 추상 팩토리 패턴의 차이 알아보기 : Factory Method Pattern, Abstract Factory Pattern

    팩토리 패턴은 무엇인가? 팩토리 패턴은 한 종류의 객체를 만들기 위해서 해당 객체를 생성하는 팩토리 interface를 구현해서 만드는 것이다. 예를 들어 Item을 만드는 Factory 인터페이스가 있다고 해보자. interface Factory { fun createItem() : Item } 위 Factory를 PhoneFactory와 TabletFactory로 구현하면 해당 Factory에서는 Item을 팩토리 종류에 따라 다르게 생성한다. class PhoneFactory : Factory { override fun createItem(): Item { return .. } } class TabletFactory : Factory { override fun createItem(): Item { ..

    [Kotlin Factory Pattern] 팩토리 패턴이란 무엇인가?

    팩토리 패턴에 대한 오해 많은 사람들이 팩토리 패턴을 객체 생성을 위한 클래스를 사용하는 것으로 알고 있다. 실제로 많은 글들을 보면 팩토리 패턴을 공장에 input을 넣으면면 결과물이 나오는 그림으로 설명해놓는 것을 볼 수 있다. 하지만 위 패턴은 팩토리 '패턴'이 아니다. 어떻게 보면 Input에 따라 결과물을 다르게 만드는 전략 패턴의 일종으로 볼 수 있다. 보통 많은 사람들이 위와 같이 팩토리 패턴을 생각하는데, 위와 같은 팩토리를 "헤드퍼스트 디자인패턴"에서는 "심플 팩토리 관용구"라고 부르기도 한다. 그렇다면 팩토리 패턴이란 무엇일까? 팩토리 패턴이란? 팩토리 패턴은 객체를 생성하기 위해 필요한 인터페이스를 만든 후, 인터페이스를 구현하는 클래스에서 어떤 객체를 만들지 결정하는 패턴이다. 즉,..

    [Kotlin] Strategy Pattern : 전략 패턴을 사용한 유연성 증대 전략

    전략 패턴이란? 전략 패턴이란 런타임에 교체 가능한 알고리즘을 만드는데 사용되는 패턴이다. 하나의 객체가 다양하면서 변화하는 역할을 해야할 때 사용된다. 이름이 전략 패턴인 이유는, 객체의 행위를 전략(Strategy)을 통해 동적으로 바꿔주도록 해서 객체를 유연하게 만드는 패턴이기 때문이다. 전략 패턴 예시 우리가 이메일을 보낸다고 해보자. 이메일에는 시작말과 맺음말이 들어가며 사람마다 혹은 기기마다 이를 다르게 설정할 수 있어야 한다. 예를 들어 아마 한 동안 아이폰에서 메일을 보냈을 때 끝에 "Sent from IOS"라는 문구가 들어갔던 것을 기억할 것이다. 어떤 사람들은 아이폰을 사용하지 않음에도 저 문구가 멋있어 보여서 마지막에 "Send from IOS"라는 문구를 붙여서 보내기도 했다. 이..