viper go 예제

개요

VIPER는 애플리케이션 아키텍처 중 하나로, 모듈화와 분리가 강조된 구조를 제공합니다. Go 언어로 VIPER 아키텍처를 구현하는 예제를 소개하겠습니다.

구성 요소

VIPER 아키텍처는 다음과 같은 구성 요소로 이루어져 있습니다:

예제 코드

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