viper go 예제
개요
VIPER는 애플리케이션 아키텍처 중 하나로, 모듈화와 분리가 강조된 구조를 제공합니다. Go 언어로 VIPER 아키텍처를 구현하는 예제를 소개하겠습니다.
구성 요소
VIPER 아키텍처는 다음과 같은 구성 요소로 이루어져 있습니다:
- View (V): 사용자 인터페이스의 표시를 담당합니다.
- Interactor (I): 비즈니스 로직 수행을 담당합니다.
- Presenter (P): View에서 넘어온 이벤트를 처리하고 Interactor와 View 사이에서 데이터 흐름을 관리합니다.
- Entity (E): 애플리케이션에서 사용되는 데이터를 나타냅니다.
- Router (R): 모듈 간의 연결과 탐색을 관리합니다.
예제 코드
main.go
package main
import (
"fmt"
"github.com/viper/demoapp/router"
)
func main() {
r := router.NewRouter()
userData := "John Doe"
result := r.HandleUserData(userData)
fmt.Println(result)
}
router.go
package router
import (
"github.com/viper/demoapp/entity"
"github.com/viper/demoapp/interactor"
"github.com/viper/demoapp/presenter"
"github.com/viper/demoapp/view"
)
func NewRouter() *Router {
return &Router{}
}
type Router struct{}
func (r *Router) HandleUserData(userData string) string {
view := view.NewView()
entity := entity.NewEntity(userData)
interactor := interactor.NewInteractor()
presenter := presenter.NewPresenter(view, entity, interactor)
result := presenter.ProcessUserData()
return result
}
view.go
package view
import "fmt"
type View struct{}
func NewView() *View {
return &View{}
}
func (v *View) ShowResult(result string) {
fmt.Println("Result:", result)
}
entity.go
package entity
type Entity struct {
Data string
}
func NewEntity(data string) *Entity {
return &Entity{Data: data}
}
presenter.go
package presenter
import (
"github.com/viper/demoapp/entity"
"github.com/viper/demoapp/interactor"
"github.com/viper/demoapp/view"
)
type Presenter struct {
View *view.View
Entity *entity.Entity
Interactor *interactor.Interactor
}
func NewPresenter(view *view.View, entity *entity.Entity, interactor *interactor.Interactor) *Presenter {
return &Presenter{
View: view,
Entity: entity,
Interactor: interactor,
}
}
func (p *Presenter) ProcessUserData() string {
// 비즈니스 로직 처리
processedData := p.Interactor.ProcessData(p.Entity.Data)
// 처리된 결과를 View에 전달하여 표시
p.View.ShowResult(processedData)
return processedData
}
interactor.go
package interactor
import "strings"
type Interactor struct{}
func NewInteractor() *Interactor {
return &Interactor{}
}
func (i *Interactor) ProcessData(data string) string {
// 데이터 처리 로직
processedData := strings.ToUpper(data)
return processedData
}
위의 예제는 VIPER 아키텍처를 구현한 간단한 Go 프로그램입니다. 각각의 구성 요소가 역할을 수행하고, 데이터를 주고받으면서 애플리케이션을 실행합니다.
#viper #go