IT/Go

메서드 리시버

iamhyeon 2025. 1. 29. 23:51
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

https://kamang-it.tistory.com/entry/Go15%EB%A9%94%EC%86%8C%EB%93%9CMethod%EC%99%80-%EB%A6%AC%EC%8B%9C%EB%B2%84Receiver

 

반응형

'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