Go 언어는 간결하고 효율적인 프로그래밍을 위해 설계된 언어입니다. 이 언어에서는 함수와 메소드라는 두 가지 개념이 있습니다. 함수와 메소드는 비슷한 역할을 하지만 약간의 차이점이 있습니다.
함수(Function)
함수는 특정 작업을 수행하는 코드 블록입니다. Go 언어에서 함수는 이름을 가지고 있으며, 필요한 매개변수를 받아들일 수 있고 결과를 반환할 수도 있습니다. 함수는 전역적으로 정의되거나 패키지 내에서 정의될 수 있습니다.
func add(a, b int) int {
return a + b
}
위의 예제에서 add
함수는 a
와 b
라는 두 개의 정수 매개변수를 받아들이고, 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() // 메소드 호출
함수와 메소드의 차이점
-
정의 방식: 함수는 전역적으로 또는 패키지 내에서 정의되지만 메소드는 특정 타입에 속한 함수로 정의됩니다. 메소드는 해당 타입과 연결되어 동작하므로, 해당 타입의 인스턴스에만 호출할 수 있습니다.
-
인자 전달: 함수는 인자를 받아들일 수 있지만, 메소드는 메소드 리시버를 통해 인자를 받아들이는데, 이는 해당 타입의 인스턴스를 의미합니다.
-
호출 방식: 함수 호출은
함수명(인자)
형태로 이루어지며, 메소드 호출은인스턴스.메소드명(인자)
형태로 이루어집니다.
함수와 메소드는 Go 언어에서 다양한 상황에 맞게 사용될 수 있으며, 어떤 것을 사용할지는 개발자의 필요에 따라 결정됩니다.