[Go]Account&NewAccount - 11

Hyeseong·2021년 5월 14일
0

Go Tutorial

목록 보기
11/11

계좌 구조체를 만들어 볼게요.

셋업은 이렇습니다.
banking이라는 폴더 아래에 banking.go파일을 만들고 코드를 사진1과 같이 작성합니다.
기존 main.go는 동일하게 사진1과 같이 해당 소스코드를 작성할게요.

<사진1>

모듈 오류?

go run main.go를 돌렸는데 모듈 에러가 발생하는데요.이를 해결하는 방법은 간단합니다.
go의 환경 설정을 해주면 되요.
지금은 제가 설정을 해줘서 문제가 없이 설정되었는데요.
아래 명령어를 콘솔에 실행해주세요.

go env -w GO111MODULE=auto 혹은 go env -w GO111MODULE=off

<사진2>

위의 설정을 마치고 나서 run명령어를 돌려보면 정상적으로 나와요.

문제점

사진1의 소스코드 문제점은 누구나 민감한 정보에 접근하여 변경가능하다는 점이에요.
그럼. 명시하지 않으면 되겠조. 하지만 여전히 Owner를 바꿀수 있다는 문제점이 존재해요.

<사진3>

이씨에서 김씨로 계좌주명이 바뀌게 되버릴수도 있어요. 아래와 같이 말이조.
<사진4>

솔루션

우선 banking이라는 패키지명과 모듈명을 accounts로 모두 변경 할 게요.
그리고 Account struct와 NewAccount라는 함수를 만들고 내부 소스코드를 사진5와 같이 정의하도록 할 게요.

여기서 핵심은 return 받게 될 때 &기호를 사용하고 return하게 되는 녀석의 타입이 *Account라는 점이에요.

이전에 &는 주소라고 했고, *는 해당 주소를 see through한다고 했조?
짧게 요약하자면 메모리 낭비를 하지 않기 위한 조치에요.

또한 변수명이 소문자로 시작하니 public한 부분이 아닌 private로 처리했다는 사실도 알수 있어요.

<사진5>

Method

balance의 값을 증가 시켜 볼게요.
그전에 메소드를 알아 볼게요.

Go에서 메소드 작성은 어렵지 않아요.
기존 함수 작성과 매우 비슷하다는 점이 많아요.

func (theAccount Account) Deposit(amount int) {}

func와 Deposit이라는 함수이름 사이에 괄호를 두고 첫번째는 임의의 변수명과 적용할 struct의 이름을 적어주기만 하면 되요.

관습적으로 struct의 첫 문자를 따서 소문자로 지어주는것이 관례라는 점!

본격적으로 balance를 증가시키는 소스코드를 아래와 같이 작성할게요.

main.go 모듈로 갈게요.
인자로 정수 10을 넣어줄게요.

중간 점검

func (a Account) Deposit(amount int) {}, (a Account) 이 부분이 핵심인데요. 바로 리! 시! 버!입니다. 결국 받는 녀석인데 무엇을 받냐! 구조체 struct를 받아들이는거에요.

OOP의 상속개념과 개인적으로는 유사한 점이 있어 보여요.

profile
어제보다 오늘 그리고 오늘 보다 내일...

0개의 댓글