수신기를 쉽게 인식
처음에는 조금 당황했습니다.
수업이 없으면 OOP가 안되는데..??
지금까지 배웠기 때문에(MVC, Nest using DI Container 등)
이는 클래스를 사용하여 메서드를 호출하는 방식으로 코드가 작성되었기 때문입니다.
다행히 GO에는 그 역할을 하는 리시버가 있어서 간단하게 포스팅해보려고 합니다.
유형 계정 구조체 {
소유자 문자열
잔액 정수
}
은행 계좌의 계좌 구조를 예로 들어 보았습니다.
func NewAccount(소유자 문자열) *계정 {
계정 := 계정{소유자: 소유자, 잔액: 0}
반품 및 계정
}
이것은 새로운 계정을 생성하는 기능입니다. 금액을 늘리는 Deposit이라는 추가 기능을 만들어 보겠습니다.
func (a *계정) 입금(금액 int) {
a.잔액 += 금액
}
리시버라고 하는 함수 앞에 (*계정)이 있고,
다른 언어에서는 메서드를 의미하는 부분입니다.
정말 리시버를 연결하고 싶다면 구조체(오브젝트)를 연결하는 매개체로 이해하시면 됩니다.
다음을 사용하여 계정 구조에 액세스할 수 있습니다.
하지만 갑자기 *가 붙은 것을 원합니다 …
이것이 ‘가치’와 ‘참조’의 차이점입니다. (SQL 등에서는 all로 쓰지만 여기서는 다르다)
*를 추가하면 값이 참조가 되어 구조체의 원본이 변경됩니다.
그렇지 않으면 값이 복사됩니다.
위의 예시를 보면 *를 붙이지 않고 리시버를 사용하면 아무리 많은 돈을 입금해도
잔액은 0이 됩니다.
이 글을 쓰면서 느낀점
신기하지만 공부에는 끝이 없는 것이 분명합니다.
하지만 먼저 JS의 관점에서 이렇게 비교할 수 있는 것들을 보면
역시 놀랍습니다.
바둑은 아직 본격적인 수준이라기보다는 ‘경험’ 수준이다.
시간 나는대로 포스팅 하겠습니다.