[Go] 구조체와 메서드
이놈은 구조체의 선언법도 참 기묘하다.
아래의 구조를 가진다.
type타입명struct {
...
}
그리고 이걸 생성하는데는 약 3가지의 방법이 있다.
코드로 보자. 좌표상의 점을 표현하는 간단한 구조체 Point를 구현한 것이다.


근데 이것만 있다면 C와 다를게 없다.
당연히 go에서는 메서드를 지원하는데, 여타 언어들과 다르게 구조체와 메서드가 완전히 분리된다.
선언법은 크게 복잡하지 않다. 기존 함수 선언에서 func와 함수명 사이에 소괄호 치고 객체를 접근할 이름과 해당 클래스를 써주면 된다.
func**(self명 클래스명) 메서드명(인자...) 반환타입 {**
** ...**
}
아래는 Point 구조체에 자신의 정보를 다 출력하는 메서드 print를 정의한것이다.


근데 이것만으론 좀 부족하다. 저기다 x와 y값을 1 증가시키는 메서드 inc를 정의해봤다.

?? inc를 호출했는데 p의 값이 바뀌지 않았다.
왜그럴까?
(this Point)는 값으로 객체를 받기 때문이다... 이것을 피하려면 *를 붙여야한다.

이제 잘 된다.
!! 접근제어자는 따로 없다. 패키지로 접근을 제어하기 때문이다.