[go] Go 언어에서 함수와 메소드의 차이점

Go 언어는 간결하고 효율적인 프로그래밍을 위해 설계된 언어입니다. 이 언어에서는 함수와 메소드라는 두 가지 개념이 있습니다. 함수와 메소드는 비슷한 역할을 하지만 약간의 차이점이 있습니다.

함수(Function)

함수는 특정 작업을 수행하는 코드 블록입니다. Go 언어에서 함수는 이름을 가지고 있으며, 필요한 매개변수를 받아들일 수 있고 결과를 반환할 수도 있습니다. 함수는 전역적으로 정의되거나 패키지 내에서 정의될 수 있습니다.

func add(a, b int) int {
    return a + b
}

위의 예제에서 add 함수는 ab라는 두 개의 정수 매개변수를 받아들이고, int 타입의 결과를 반환합니다.

Go 언어에서는 함수 호출을 위해 함수명(인자) 형태를 사용합니다.

result := add(3, 5) // 함수 호출

메소드(Method)

메소드는 특정 타입에 속한 함수입니다. Go 언어에서는 구조체(struct)를 사용하여 사용자 정의 타입을 만들 수 있습니다. 이러한 사용자 정의 타입에는 메소드를 연결할 수 있습니다. 메소드는 메소드 리시버(Method Receiver)라는 특별한 매개변수를 가지고 있는 형태로 정의됩니다.

type Rectangle struct {
    width  int
    height int
}

func (r Rectangle) area() int {
    return r.width * r.height
}

위의 예제에서 Rectangle 타입에 속한 area 메소드는 해당 타입의 인자와 함께 호출됩니다. 메소드에서 인자를 받기 위해 r Rectangle 표현을 사용합니다.

메소드 호출은 인스턴스.메소드명(인자) 형태로 이루어집니다.

r := Rectangle{width: 3, height: 5} // 구조체 인스턴스 생성
result := r.area() // 메소드 호출

함수와 메소드의 차이점

  1. 정의 방식: 함수는 전역적으로 또는 패키지 내에서 정의되지만 메소드는 특정 타입에 속한 함수로 정의됩니다. 메소드는 해당 타입과 연결되어 동작하므로, 해당 타입의 인스턴스에만 호출할 수 있습니다.

  2. 인자 전달: 함수는 인자를 받아들일 수 있지만, 메소드는 메소드 리시버를 통해 인자를 받아들이는데, 이는 해당 타입의 인스턴스를 의미합니다.

  3. 호출 방식: 함수 호출은 함수명(인자) 형태로 이루어지며, 메소드 호출은 인스턴스.메소드명(인자) 형태로 이루어집니다.

함수와 메소드는 Go 언어에서 다양한 상황에 맞게 사용될 수 있으며, 어떤 것을 사용할지는 개발자의 필요에 따라 결정됩니다.

참고 자료