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 메서드
주요 차이점:
- 정의 방식: 함수는 독립적으로 정의되고, 메서드는 특정 타입에 바인딩됩니다.
- 호출 방식: 함수는 이름으로 직접 호출, 메서드는 타입의 인스턴스를 통해 호출합니다.
- 리시버: 메서드는 리시버를 가지며, 이를 통해 타입의 데이터에 접근합니다.
정리
Go에서 함수와 메서드는 각각 고유한 용도와 장점을 가지고 있습니다. 함수는 독립적인 작업에, 메서드는 특정 타입과 연관된 동작을 구현할 때 효과적입니다.
'프로그래밍 > Golang' 카테고리의 다른 글
Golang Interface - 포인터와 값 타입의 개념 및 활용 (0) | 2024.07.24 |
---|---|
Golang의 struct(구조체)와 receiver(리시버) 메서드: 객체 지향적 설계의 새로운 접근 (0) | 2024.07.23 |
Golang type(타입) 키워드 탐구 : Named Type과 Type Alias의 차이와 활용 (0) | 2024.07.21 |
Golang Constants(상수) (0) | 2024.07.20 |
Golang 변수와 Scope(스코프) 이해하기 (0) | 2024.07.19 |