본문 바로가기
프로그래밍/Golang

Golang func 와 method

by slowin 2024. 7. 22.

Go 프로그래밍 언어에서 함수와 메서드는 코드 구조화와 재사용성을 위한 핵심 요소입니다. 이 두 가지 개념은 비슷해 보이지만 중요한 차이점이 있습니다.

함수 (Functions)

함수는 특정 작업을 수행하는 독립적인 코드 블록입니다.

  • func 키워드로 정의합니다.
func String() {
	// ... some code
}
  • 이름, 매개변수 목록, 반환 타입을 가집니다.
// 이름, 매개변수 목록, 반환 타입을 가집니다.
func Add(a, b int) int {
	return a + b
}
  • 여러 값을 반환할 수 있습니다.
// 여러 값을 반환할 수 있습니다.
func Swap(a, b int) (int, int) {
	return b, a
}
  • 독립적으로 호출됩니다.

메서드 (Methods)

메서드는 특정 타입과 연관된 함수입니다.

  • 함수와 유사하지만 특정 타입(리시버)에 바인딩됩니다.
type MyInt int

func (a MyInt) Add(b MyInt) MyInt {
	return a + b
}
  • 리시버를 통해 해당 타입의 데이터에 접근할 수 있습니다.
type MyInt int

// 리시버를 통해 해당 타입의 데이터에 접근할 수 있습니다.
func (a *MyInt) AddAssign(b MyInt) {
	*a += b
}
  • 객체 지향 프로그래밍의 개념을 Go에서 구현하는 방법입니다.
type Person struct {
	Name string
	Age  int
}

// 메서드는 특정 타입에 바인딩되어 해당 타입의 데이터에 접근할 수 있습니다.
func (p Person) Greet() string {
	return "Hello, my name is " + p.Name
}

// 포인터 리시버를 사용하면 해당 데이터를 수정할 수 있습니다.
func (p *Person) GrowUp() {
	p.Age++
}

함수 vs 메서드

주요 차이점:

  1. 정의 방식: 함수는 독립적으로 정의되고, 메서드는 특정 타입에 바인딩됩니다.
  2. 호출 방식: 함수는 이름으로 직접 호출, 메서드는 타입의 인스턴스를 통해 호출합니다.
  3. 리시버: 메서드는 리시버를 가지며, 이를 통해 타입의 데이터에 접근합니다.

정리

Go에서 함수와 메서드는 각각 고유한 용도와 장점을 가지고 있습니다. 함수는 독립적인 작업에, 메서드는 특정 타입과 연관된 동작을 구현할 때 효과적입니다.