ksundev 님의 블로그

[예제] Bank Project - 2 (Method) 본문

[개발] Go/초급 프로젝트

[예제] Bank Project - 2 (Method)

ksundev 2025. 6. 10. 20:54

# 정리

지금까지 우리는 계좌와 계좌생성 기능을 만들었었다. 이제 입금을 해보자.

그 전에 잠깐 이전 코드를 다시 살펴보자.

// 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