본문 바로가기

design pattern12

golang design pattern #4 Singleton Singleton 패턴은 특정 객체가 프로그램 실행중에 딱 한번만 생성되고 모두 같은 객체를 사용할 때 쓰입니다. 대표적으로 데이터베이스 관련 객체를 Singleton으로 많이 만듭니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 type singletonDB struct { info map[string]int } var once sync.Once var db *singletonDB func GetDB() *singletonDB { once.Do(func() { // db 초기화 작업 }) return db } cs sync.Once를 활용하면 한번만 실행되는 코드를 만들 수 있습니다. 즉, GetDB함수를 호출하면 최초 호출시에만 once.Do 함수의 인자로 들어간 함수가 실행이 될테고 이 .. 2021. 11. 11.
golang design pattern #3 Prototype Prototype 패턴은 매번 객체를 새로 생성하기보다는 original 객체를 복사해서 필요한 부분만 수정해서 사용하는 패턴입니다. 1 2 3 4 5 6 7 8 9 type Address struct { City string Postcode string } type Person struct { Name string Address *Address } cs 위 같이 구조체가 정의되어 있다고 가정해봅시다. 1 2 3 4 5 6 7 alex := Person{ "alex", &Address{"Seoul", "14321"}, } sarah := alex sarah.Address.City = "Busan" cs 위처럼 코드를 작성하게 되면 Address가 포인터 타입이기 때문에 alex의 주소도 Busan으로 바.. 2021. 11. 11.
golang design pattern #2 Factory Factory 패턴은 기존 class가 있는 언어들의 constructor와 유사합니다. 1 2 3 4 5 6 7 8 9 10 11 type Person struct { name string age int } func New(name string, age int) *Person { return &Person{ name: name, age: age, } } Colored by Color Scripter cs 보다시피 constructor와 거의 비슷하며 해당 함수에 여러 조건을 추가할 수도 있습니다. 참고로 보통 이러한 함수를 만들 때 NewPerson보다는 New라는 이름의 함수로 많이 사용합니다. 왜냐하면 보통 이런 경우 package 이름이 person일테고 그럼 해당 함수를 사용할 때 p := pe.. 2021. 11. 10.
golang design pattern #1 Builder Builder 패턴을 알아보기전에 아래 링크를 참고하여 golang의 type embedding 문법을 보고 오시길 바랍니다. https://up-to-date-items.tistory.com/114 golang의 is a 관계 이번 글에서는 golang의 is a 관계에 대해 알아보겠습니다. 예시 보는게 이해가 빠르므로 바로 예시로 넘어가겠습니다. 위 코드를 보다시피 일반 Player에는 bonus가 없고 Pro에게만 bonus가 있습니다. up-to-date-items.tistory.com 이제 Builder 패턴을 알아보겠습니다. 1 2 3 4 5 6 7 8 9 type Person struct { // 주소 관련 Address string PostCode string // 직업 관련 JobType.. 2021. 11. 10.