func (리시버 변수명 리시버 타입) 메서드 이름(입력 파라미터) 출력값 {
// 함수 본문
}
- Go언어에서 메서드리시버는 함수가 특정 타입에 속하도록 하는 기능
- 메서드 리시버는 함수 이름 앞에 위치
- 함수가 특정 타입의 메서드임을 나타낸다
- 이를 통해 해당 타입의 인스턴스에서 메서드를 호출할 수 있다.
예)
type MySQLDAO struct {
db *sql.DB
}
func (dao *MySQLDAO) Close() error {
if err := dao.db.Close(); err != nil {
return fmt.Errorf("failed to close MySQL connection: %v", err)
}
return nil
}
func main() {
dao := &MySQLDAO{}
err := dao.Close()
if err != nil {
log.Fatalf("Error: %v", err)
}
}
dao := &MySQLDAO{}
MySQLDAO 타입의 인스턴스를 생성한다
dao.Close()
MySQLDAO 타입의 인스턴스 dao에서 Close 메서드를 호출한다.
➡️ 메서드 리시버를 사용하면 특정 타입과 관련된 함수를 정의할 수 있으며, 이를 통해 객체 지향 프로그래밍 스타일을 구현할 수 있다.
Method => 객체에 연결된 함수
- 함수이긴 한데 객체에 연결되어야 메소드라고 부른다.
- 특정 객체를 통해서 하려고하는 작업들(함수들)을 메소드라고 할 수 있다.
예)
package main
import "fmt"
type Point struct {
X,Y int
}
func (p Point) printInfo() {
fmt.Println(p)
}
func main() {
p := Point{3,4}
p.printInfo()
}
- 리시버가 장착된 함수는 더 이상 함수가 아니라 메소드가 된다.
- printInfo 메서드는 Point의 식구가 된 셈이다
- 리시버로 인해 private변수에 마음껏 접근할 수 있다
- 다른 함수에서 접근하는것은 불가능
- printInfo라는 함수는 Point 타입의 리시버를 달고 있으므로 Point타입의 메소드이다.
출력값
{3 4}
| 함수(function) - 처리의 묶음 객체(object) - 변수의 묶음 구조체(struct) - 객체를 선언하는 방법 리시버(reciever) - 객체와 함수를 연결하는 매개체 메소드(method) - 객체에 연결된 함수 value receiver - 객체를 value로 가져와서 사용하는 리시버 pointer receiver - 객체를 referene(pointer)로 가져와서 사용하는 리시버 |
refer to
반응형
'IT > Go' 카테고리의 다른 글
| log 패키지 (0) | 2025.01.30 |
|---|---|
| defer (0) | 2025.01.30 |
| Golang Live Reloading command line utility (0) | 2025.01.23 |
| Java Spring Boot 애플리케이션에서 Go REST API 호출 (0) | 2025.01.22 |
| Go 변수, 데이터타입 (0) | 2024.12.26 |