반응형
SMALL

전체 글 200

[Design Pattern] 중재인(Mediator), 관찰자(Observer), 장벽(Barrier) 패턴

중재인(Mediator) 중재인 디자인 패턴은 이름에서 알 수 있듯이, 정보를 교환하기 위해 두 가지 유형 사이에 있는 패턴입니다. package main import "fmt" type One struct{} type Two struct{} type Three struct{} type Four struct{} func Sum(a, b interface{}) interface{} { switch a := a.(type) { case One: switch b := b.(type) { case One: return &Two{} case Two: return &Three{} case int: return b + 1 default: return fmt.Errorf("number not found") } case..

Go 2022.11.30

[Design Pattern] 인터프리터(Interpreter), 방문자(Visitor), 상태(State) 패턴

인터프리터(Interpreter) 인터프리터 디자인 패턴은 실제로 인터프리터 패턴은 일반적인 작업을 수행하기 위한 언어를 갖는 것이 유용한 비즈니스 사례를 해결하는 데 널리 사용됩니다. package interpreter import ( "strconv" "strings" ) const ( SUM = "sum" SUB = "sub" MUL = "mul" DIV = "div" ) type polishNotationStack []int func (p *polishNotationStack) Push(s int) { *p = append(*p, s) } func (p *polishNotationStack) Pop() int { length := len(*p) if length > 0 { temp := (*p)[..

Go 2022.11.30

[Design Pattern] 커맨드(Command), 템플릿(Template), 메멘토(Memento) 패턴

커맨드(Command) 커맨드(Command) 디자인 패턴은 전략 설계 패턴과 매우 유사하지만 주요 차이점이 있습니다. 전략 패턴에서는 알고리즘 변경에 초점을 맞추는 반면, 커맨드 패턴에서는 무언가의 호출 또는 어떤 유형의 추상화에 초점을 맞춥니다. package main import "fmt" type Command interface { Execute() } type ConsoleOutput struct { message string } func (c *ConsoleOutput) Execute() { fmt.Println(c.message) } func CreateCommand(s string) Command { fmt.Println("Creating command") return &ConsoleOut..

Go 2022.11.29

[Design Pattern] 플라이웨이트(Flyweight), 전략(Strategy), 역할 사슬(Chain of Responsibility) 패턴

플라이웨이트(Flyweight) 플라이웨이트 디자인 패턴은 특정 유형의 여러 인스턴스 간에 무거운 개체의 상태를 공유할 수 있는 패턴입니다. package flyweight import "time" const ( TEAM_A = iota TEAM_B ) type Team struct { ID uint64 Name int Shield []byte Players []Player HistoricalData []HistoricalData } type Player struct { Name string Surname string PreviousTeam uint64 Photo []byte } type HistoricalData struct { Year uint8 LeagueResults []Match } type M..

Go 2022.11.25

[Design Pattern] 프록시(Proxy), 데코레이터(Decorator), 퍼사드(Facade)

프록시(Proxy) 프록시 패턴은 일반적으로 개체의 특성을 숨기기 위해 개체를 감쌉니다. 이러한 특성은 원격 개체(원격 프록시), 매우 큰 이미지 또는 테라바이트 데이터베이스 덤프(가상 프록시)와 같은 매우 무거운 개체 또는 제한된 액세스 개체(보호 프록시)일 수 있습니다. package proxy import "fmt" type User struct { ID int32 } type UserList []User func (t *UserList) FindUser(id int32) (User, error) { for i := 0; i < len(*t); i++ { if (*t)[i].ID == id { return (*t)[i], nil } } return User{}, fmt.Errorf("user %d ..

Go 2022.11.24

[Design Pattern] 합성(Composite), 어댑터(Adapter), 브릿지(Bridge) 패턴

합성(Composite) 합성 디자인 패턴은 상속(관계)보다 구성(일반적으로 a가 관계를 갖는 것으로 정의됨)을 선호합니다. 합성 디자인 패턴에서 객체의 계층 및 트리를 작성합니다. 개체 내부에 고유한 필드와 메서드가 있는 개체가 서로 다릅니다. 이 접근 방식은 매우 강력하며 상속 및 다중 상속의 많은 문제를 해결합니다. package main import "fmt" type Athlete struct{} func (a *Athlete) Train() { fmt.Println("Training") } type Animal struct{} func (a *Animal) Eat() { fmt.Println("Eating") } type Shark struct { Animal Swim func() } type..

Go 2022.11.23

[Design Pattern] 추상 팩토리(Abstract Factory), 프로토타입(Prototype) 패턴

추상 팩토리(Abstract Factory) 추상 팩토리 디자인 패턴은 인터페이스를 통해 사용되는 더 큰(그리고 더 복잡한) 복합 객체를 달성하기 위한 새로운 그룹화 계층입니다. 패밀리에 객체를 그룹화하고 패밀리를 그룹화하는 아이디어는 서로 교환할 수 있고 더 쉽게 성장할 수 있는 대규모 공장을 갖는 것입니다. 개발 초기 단계에서는 코드를 시작하기 위해 모든 구체적인 구현이 완료될 때까지 기다리는 것보다 공장 및 추상 공장과 함께 작업하는 것이 더 쉽습니다. 또한 특정 필드에 대한 개체의 인벤토리가 매우 크고 쉽게 패밀리로 그룹화될 수 있다는 것을 알지 못하는 한 처음부터 추상 팩토리를 작성하지 않습니다. 개체 수가 너무 증가하여 개체 수를 모두 얻기 위해 고유한 점을 만드는 것이 유일한 방법일 때 관련..

Go 2022.11.23

[Design Pattern] 싱글톤(Singleton), 빌더(Builder), 팩토리 메소드(Factory Method) 패턴

싱글톤(Singleton) 싱글톤(Singleton) 패턴은 기억하기 쉬운 패턴입니다. 이름에서도 나타내듯이 한 객체 대한 중복 없이 하나의 인스턴스를 제공하는 디자인 패턴입니다. 이는 인스턴스를 사용하기 위한 첫번째 호출에서 인스턴스를 생성하고 애플리케이션 내에서 재사용되는 것을 의미합니다. 이를 돕기 위해 간단하게 count를 증가시키는 코드를 살펴보겠습니다. package singleton type Singleton interface { AddOne() int } type singleton struct { count int } var instance *singleton func GetInstance() Singleton { if instance == nil { instance = new(single..

Go 2022.11.21

State 끌어올리기, 합성, 상속

종종 동일한 데이터에 대한 변경사항을 여러 컴포넌트에 반영해야 할 필요가 있습니다. 이럴 때는 가장 가까운 공통 조상으로 state를 끌어올리는 것이 좋습니다. 이를 확인하기 위해 먼저 섭씨 입력을 받아 끓는 점인지 아닌지를 나타내는 코드를 작성하겠습니다. function BoilingVerdict(props) { if (props.celsius >= 100) { return The water would boil.; } return The water would not boil.; } class Calculator extends React.Component { constructor(props) { super(props); this.handleChange = this.handleChange.bind(this..

React 2022.11.10

리스트(List), 키(Key), 폼(Form)

JavaScript에서 map() 함수를 이용하여 numbers 배열의 값을 두배로 만든 후 map()에서 반환하는 새 배열을 doubled 변수에 할당하고 로그를 확인하는 코드는 아래와 같습니다. const numbers = [1, 2, 3, 4, 5]; const doubled = numbers.map((number) => number * 2); console.log(doubled); React에서 배열을 엘리먼트 리스트로 만드는 방식은 이와 거의 동일합니다. 엘리먼트 모음을 만둘고 중괄호 {}를 이용하여 JSX에 포함 시킬 수 있습니다. function NumberList(props) { const numbers = props.numbers; const listItems = numbers.map((..

React 2022.11.10
반응형
LIST