| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
| 29 | 30 | 31 |
Tags
- Refactoring
- graceful shutdown
- CDN
- Dictionary
- golang
- goroutines
- channel
- cli
- container
- websocket
- component
- PROPS
- SFC
- App.vue
- method
- Server
- URL
- 행렬
- emit
- reactivity
- todo-list
- goroutine
- Vue.js
- Vue
- map
- TODO
- go
- localStorage
- Matrix
- toggle
Archives
- Today
- Total
ksundev 님의 블로그
[예제] Bank Project - 2 (Method) 본문
# 정리
지금까지 우리는 계좌와 계좌생성 기능을 만들었었다. 이제 입금을 해보자.
그 전에 잠깐 이전 코드를 다시 살펴보자.
// NewAccount creates a new account
func NewAccount(owner string) *Account {
return &Account{
owner: owner,
balance: 0,
}
}
// 이제 main.go에서
account := accounts.NewAccount{"ksun"}
이 경우 account의 type은 무엇일까? 질문에 답을 생각하며 다음으로 넘어가자.
# Deposit() -> method
맡길 금액을 입력받아 계좌에 충전하는 메소드를 만들어보자.
// Deposit adds amount to the balance
func (a Account) Deposit(amount int) {
a.balance += amount
}
Go에서 메소드란?
메소드는 특정 타입에 연결된 함수이다.
func (a Account) String() string {
// ↑ receiver ↑ 메소드명 ↑ 반환타입
자 이제 이 코드의 사용은

이렇게 하면 될 것이다. 결과는 어떻게 나올까?

적용이 안된 것일까? 결과가 원하는 대로 나오지 않았다.
무엇이 문제일까? (스스로 한번 생각해보자)
원인은 아까 힌트를 주었던 account의 타입에 있다.
account는 *Account 이다. 즉, Account 구조체의 포인터형식이다.
따라서 이를 사용할 때에도 타입을 맞춰주어야 한다.

짠! 타입을 맞춰주니 잘 작동한다.
# Withdraw()
이제 입금의 반대인 출금을 해보자. 단, 잔액을 초과한 출금은 불가능하게 막아보자.
// Withdraw from the balance
func (a *Account) Withdraw(amount int) error {
if a.balance < amount {
return errors.New("can't withdraw, insufficient balance")
}
a.balance -= amount
return nil
}
Go에는 try-exception 과 같은 구문이 없기 때문에 위와 같이 처리할 수 있다.
그리고 이를 사용할 때에는

이렇게 사용할 수 있다.
'[개발] Go > 초급 프로젝트' 카테고리의 다른 글
| Dictionary 예제 - Update, Delete (0) | 2025.06.26 |
|---|---|
| Dictionary 예제 - Search, Add (0) | 2025.06.25 |
| [예제] Bank Project - 3 (0) | 2025.06.14 |
| [예제] Bank Project - 1 (0) | 2025.06.10 |