구조체 사용하기

이재홍 http://www.pyrasis.com 2014.12.17 ~ 2015.02.07

구조체 생성자 패턴 활용하기

new 함수로 구조체의 메모리를 할당하는 동시에 값을 초기화하는 방법은 없습니다. 하지만 다음과 같은 패턴을 사용하여 다른 언어의 생성자(Constructor)를 흉내낼 수 있습니다.

func NewRectangle(width, height int) *Rectangle {
	return &Rectangle{width, height} // 구조체 인스턴스를 생성한 뒤 포인터를 리턴
}

func main() {
	rect := NewRectangle(20, 10)

	fmt.Println(rect) // &{20 10}
}

실행 결과

&{20 10}

Go 언어에서는 지역 변수 형태로 생성된 구조체나, 구조체의 포인터를 리턴할 수 있습니다. 예제에서는 함수 안에서 중괄호 블럭으로 구조체의 값을 초기화한 뒤 포인터를 리턴하는 방식으로 생성자 역할을 수행합니다.

코드를 좀 더 줄이면 다음과 같은 방식도 사실상 같습니다.

rect := &Rectangle{20, 10} // 구조체를 초기화한 뒤 메모리 주소를 대입

fmt.Println(rect) // &{20 10}

실행 결과

&{20 10}

Go 언어에서 지역 변수를 계속 참조하고 있다면 스코프({ }로 묶인 영역)를 벗어나더라도 변수가 해제되지 않습니다.


저작권 안내

이 웹사이트에 게시된 모든 글의 무단 복제 및 도용을 금지합니다.
  • 블로그, 게시판 등에 퍼가는 것을 금지합니다.
  • 비공개 포스트에 퍼가는 것을 금지합니다.
  • 글 내용, 그림을 발췌 및 요약하는 것을 금지합니다.
  • 링크 및 SNS 공유는 허용합니다.

Published

01 June 2015