본문 바로가기

golang32

golang design pattern #13 Observer Observer 패턴은 특정 이벤트나 상태가 변경되었을 경우 알림을 받고 싶을 때 사용되는 패턴입니다. 이 패턴을 구현하기 위해서는 보통 Observable(알림을 주는 객체)와 Observer(알림을 받는 객체)를 구현하게 됩니다. 흔히 아는 pub/sub 패턴으로도 많이 사용되는 패턴입니다. 예를 들어 환자와 간호사가 있는데 1명의 간호사는 여러 명의 환자들을 관리하고 간호사들은 환자의 열과 심박수를 체크합니다. 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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 type Observable interface.. 2021. 11. 23.
golang design pattern #11 Chain of Responsibility Chain of Responsibility 패턴은 어떠한 요청을 다음 대상에게 넘겨주는 패턴으로 여러 이벤트를 체인을 거치면서 처리하게 됩니다. 예제 코드를 알아보기 전에 golang의 embedding에 관한 특성 중 하나를 알아야 할게 있습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 type Monster interface { Attack() } type Goblin struct {} func (g *Goblin) Attack() { fmt.Println("goblin attacks!") } type GoblinKing struct { Goblin } cs 위 코드에서 GoblinKing 구조체에서 Goblin을 embedding 하였습니다. 이렇게 하면 GoblinKing 객체에서 .. 2021. 11. 16.
golang design pattern #10 Proxy Proxy 패턴은 실제 동작할 object는 뒤에 숨겨놓고 client의 요청을 바로 object에 전달하는 대신, 앞단에서 필요한 처리들을 해준 후에 실제 object로 전달을 해주거나 거부하는 패턴입니다. 중요한 점은 사용자 입장에서는 proxy를 쓰고 있는지 실제 object를 쓰는지 모릅니다. 자동차 운전을 예시로 들면 자동차 운전은 운전면허가 있는 사람만 가능하게 해야합니다. 이 때, 자동차 구조체와 운전자 구조체는 서로 의존되지 않아야 합니다. 그럼 바로 코드로 구현해보겠습니다. 1 2 3 type Driven interface { Drive() } cs Car 구조체와 CarProxy 구조체를 같이 다루기 위해 interface 타입을 하나 만들어줍니다. 1 2 3 4 5 6 7 8 9 ty.. 2021. 11. 15.
golang design pattern #9 Flyweight Flyweight 패턴은 메모리 사용량을 줄이기 위한 테크닉입니다. 텍스트 에디터 프로그램을 만든다고 가정해보겠습니다. 특정 위치의 문자는 대문자, bold체, 이탈릭체 등으로 이루어질 수 있습니다. 이런 상황에서 코드를 어떻게 작성할 수 있을까요? 1 2 3 4 type TextEditor struct { plainText string isCapital []bool } cs 가장 단순하게 생각했을 때 작성할 수 있는 코드입니다. 모든 글자에 대해서 해당 문자가 대문자인지 아닌지에 대한 boolean 값을 표시를 해두는 것입니다. 그러나 이 경우는 너무 비효율적입니다. 예를 들어 글자 수가 10000개라면 10000개의 boolean array를 가져야 합니다. 또 위 코드는 대문자에 대해서만 나타낸 것.. 2021. 11. 14.