반응형
SMALL

Go 15

[Algorithms] 지식 표현(Knowledge Representation)

지식 표현은 단순한 데이터 집합을 지식으로 이용 가능한 형식으로 정리하는 방법이며, 대규모 데이터 처리에 유용한 기술이다. 지식과 단순한 데이터의 차이 중 하나는 각 구성 요소 사이의 관계가 이용 가능한 형식으로 표현되어 있는지 여부다. 의미 네트워크(Semantic Network)는 사물의 관계를 네트워크 형식으로 표현하는 구조다. 프레임(Frame)은 어떤 개념과 관련한 지식을 한 덩어리로 다루기 위한 지식 표현이다. 일반적으로 프레임은 클래스 프레임과 인스턴스 프레임으로 분류된다. 클래스 프레임은 어떤 개념의 집합에 공통 성질을 표현하기 위한 프레임이고, 인스턴스 프레임은 특정 개념에 속하는 구체적인 각각의 사물을 표현하기 위한 프레임이다. 각 프레임은 속성 및 다른 프레임과의 관계를 기술하는 슬롯..

Go 2022.12.06

[Algorithms] 탐색(Search)

너비 우선 탐색(Breadth-first Search)에서는 모든 경우를 망라해서 탐색 트리 전체를 작성해간다. 이런 의미에서 너비 우선 탐색에서는 탐색 대상이 되는 상태 공간 전체를 탐색할 수 있다. 하지만 탐색할 수 있다는 것일 뿐 목표 노드의 발견을 보장하지는 않는다. 애초에 목표 노드가 없다면 당연히 답을 찾을 수 없다. 또한, 단순한 너비 우선 탐색에서는 조합적 확산을 통해 금방 노드 수가 메모리에 들어가지 않을 만틈 늘어나버린다. 그럼에도 너비 우선 탐색은 탐색 기술의 기본이 되는 방법이다. ※ 조합적 확산 조합에 따라 상태 수가 방대해지는 현상 너비 우선 탐색 알고리즘 1. 오픈 리스트와 클로즈드 리스트 초기화 2. 오픈 리스트 끝에 루트 노드 삽입 아래 과정 반복 3. 오픈 리스트가 비어..

Go 2022.12.06

[Design Pattern] 미래(Future), 파이프라인(Pipeline), 워커 풀(Worker Pool) 패턴

미래(Future) 미래 디자인 패턴은 결국 동일한 고루틴 또는 다른 고루틴에 의해 실행될 알고리즘을 작성할 수 있게 해줍니다. package future type SuccessFunc func(string) type FailFunc func(error) type ExecuteStringFunc func() (string, error) type MaybeString struct { successFunc SuccessFunc failFunc FailFunc } func (s *MaybeString) Success(f SuccessFunc) *MaybeString { s.successFunc = f return s } func (s *MaybeString) Fail(f FailFunc) *MaybeStrin..

Go 2022.12.01

[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
반응형
LIST