Go 언어는 OOP를 구조체와 메서드를 이용하는 방식으로 지원한다.
다른 언어들이 클래스가 내부에 데이터와 메서드를 함께 갖는 것과 달리 Go 언어에서는 구조체가 데이터만을 가지고, 메서드는 별도로 분리하여 정의한다.
Go 메서드는 특별한 형태의 함수이다. 메서드는 함수 정의에서 func 키워드와 함수명 사이에 “그 함수가 어떤 구조체를 위한 메서드인지” 표시한다.
receiver로 부르며 메서드가 속한 구조체 타입과 변수명을 지정하는데, 구조체 변수명은 함수 내에서 입력 파라미터처럼 사용된다.
|
|
area는 Rect의 메소드로 선언 되어 메서드를 입력처럼 사용할 수 있다.
(value VS 포인터) receiver
Value receiver
value receiver는 구조체의 데이터를 복사하여 전달한다. value receiver는 메서드 내의 필드값 변경되더라도 실제 데이터는 변경되지 않는다.
|
|
포인터 리시버
포인터 리시버는 구조체의 포인터를 전달한다. 메서드 내의 필드값 변경이 그대로 호출자에서 반영된다.