Golang의 메서드

Golang 의 메서드는  함수와 비슷하지만 가장 큰 차이점이 하나 있습니다. 수신자 인수가 있어서 수신자 의 속성에 액세스할 수 있다는 것 입니다 . 수신기는 구조체형이거나 비구조체형일 수 있지만, 둘 다 같은 패키지에 있어야 합니다. int 또는 string 과 같은 내장 유형을 포함하여 다른 패키지에 정의된 유형에 대한 메서드를 만드는 것은 불가능합니다 . 그렇지 않으면 컴파일러가 오류를 보고합니다.

Golang의 메서드

예를 들어:

package main

import "fmt"

// Định nghĩa một struct
type person struct {
    name string
    age  int
}

// Định nghĩa một phương thức với struct receiver
func (p person) display() {
    fmt.Println("Name:", p.name)
    fmt.Println("Age:", p.age)
}

func main() {
    // Tạo một phiên bản của struct
    a := person{name: "a", age: 25}
    
    // Gọi phương thức
    a.display()
}

결과:

Name: a
Age: 25

통사론

func(receiver_name Type)  method_name(parameter_list) (return_type) { 
// Code
}

수신자: 이 방법을 사용하여 접근할 수 있습니다.

구조체 유형의 수신기를 사용하는 메서드

Go에서는 수신자가 struct 유형인 메서드를 정의할 수 있습니다. 수신기는 메서드 내부에서 접근 가능합니다. 이전 예제에서는 구조체 유형의 수신기를 사용하여 이러한 접근 방식을 설명했습니다.

수신기가 있는 메서드는 구조체 유형이 아닙니다.

Go에서는 수신자 유형과 메서드 정의가 같은 패키지에 있는 한 메서드가 비구조체 수신자를 가질 수도 있습니다. 다른 패키지의 수신자 유형(예: int, string)으로 메서드를 정의할 수 없습니다.

예를 들어:

package main

import "fmt"

// Tạo một kiểu tùy biến dựa trên int
type number int

// Định nghĩa một phương thức với receiver không phải struct
func (n number) square() number {
    return n * n
}

func main() {
    a := number(4)
    b := a.square()

    fmt.Println("Square of", a, "is", b)
}

결과:

Square of 4 is 16

수신 포인터를 사용한 방법

Go에서는 메서드에 포인터 수신기가 있을 수 있습니다. 이를 통해 메서드에서 변경한 내용을 호출자에 반영할 수 있는데, 이는 값 수신기에서는 불가능합니다.

통사론:

func (p *Type) method_name(...Type) Type {    // Code}

예를 들어:

package main

import "fmt"

// Defining a struct
type person struct {
    name string
}

// Phương thức với receiver pointer để chỉnh sửa dữ liệu
func (p *person) changeName(newName string) {
    p.name = newName
}

func main() {
    a := person{name: "a"}
    
    fmt.Println("Before:", a.name)
    
    // Gọi phương thức này để thay đổi tên
    a.changeName("b")
    
    fmt.Println("After:", a.name)
}

결과:

Before: a
After: b

메서드는 포인터와 값을 모두 허용합니다.

함수와 달리 Go 메서드는 값 수신자와 포인터 수신자를 모두 받을 수 있습니다. 포인터나 값을 전달하면 메서드가 그에 맞게 처리합니다.

예를 들어:

package main
import "fmt"

type person struct {
    name string
}
// Phương thức với receiver pointer
func (p *person) updateName(newName string) {
    p.name = newName
}

// Phương thức với receiver value 
func (p person) showName() {
    fmt.Println("Name:", p.name)
}

func main() {
    a := person{name: "a"}
    
    // Gọi phương thức con trỏ cùng giá trị
    a.updateName("b")
    fmt.Println("After pointer method:", a.name)
    
    // Gọi phương thức giá trị với con trỏ
    (&a).showName()
}

결과:

After pointer method: b
Name: b

메서드와 함수의 차이점

방법 턱
수신기를 포함합니다 수신기가 포함되어 있지 않습니다
이름은 같지만 유형이 다른 메서드를 정의하는 것이 가능합니다. 이름은 같지만 유형이 다른 함수는 허용되지 않습니다.
최상급으로 사용할 수 없습니다 상위 객체로 사용 가능

댓글 남기기

대구에서 TV 버리는 방법: 무료 방문수거와 대형폐기물 신고 정리

대구에서 TV 버리는 방법: 무료 방문수거와 대형폐기물 신고 정리

대구에서 TV를 버리는 방법을 정리했습니다. 폐가전 무상방문수거 신청, 구·군별 대형폐기물 신고, TV 받침대 처리와 배출 전 체크리스트를 확인하세요.

고양에서 TV 버리는 방법: 무료 수거와 대형폐기물 신고 비교

고양에서 TV 버리는 방법: 무료 수거와 대형폐기물 신고 비교

고양에서 TV를 버릴 때 1599-0903 무상방문수거, 새 제품 판매처 회수, 고양시 대형폐기물 신고를 크기·상태·비용별로 비교하고 흔한 오해와 배출 순서를 안내합니다.

울산에서 냉장고 버리는 방법: 무료 수거부터 대형폐기물 신고까지

울산에서 냉장고 버리는 방법: 무료 수거부터 대형폐기물 신고까지

울산에서 냉장고를 버릴 때 1599-0903 무료 방문수거, 새 제품 구매처 회수, 구·군 대형폐기물 신고를 비용과 조건별로 비교하고 안전한 배출 순서를 안내합니다.

전주에서 세탁기 버리는 방법: 무상수거 신청부터 배출까지

전주에서 세탁기 버리는 방법: 무상수거 신청부터 배출까지

전주에서 세탁기 버리는 방법을 정리했습니다. 일반·드럼세탁기 무상 방문수거 신청, 배출 장소, 준비사항, 제한 조건과 대형폐기물 대안을 확인하세요.

대구에서 자전거 버리는 방법: 대형폐기물 신고부터 배출까지

대구에서 자전거 버리는 방법: 대형폐기물 신고부터 배출까지

대구에서 자전거를 버릴 때 필요한 구·군 확인, 대형생활폐기물 신고, 수수료 확인, 배출번호 표시와 지정 장소 배출 방법을 가상 사례와 함께 정리합니다.

소파는 어떻게 버려야 하나?

소파는 어떻게 버려야 하나?

소파를 일반쓰레기로 버리면 안 되는 이유와 대형생활폐기물 신고, 수수료 확인, 안전한 운반 및 배출 방법을 단계별로 안내합니다.

폐형광등은 어디에 버려야 하나? 종류별 배출 장소와 깨졌을 때 처리법

폐형광등은 어디에 버려야 하나? 종류별 배출 장소와 깨졌을 때 처리법

폐형광등은 전용 수거함에 깨지지 않게 배출하는 것이 원칙입니다. 아파트·주민센터 등 수거 장소 찾기, 깨진 형광등 처리, LED와 백열전구 구분까지 실용적으로 정리했습니다.

수원에서 TV 버리는 방법: 무료 방문수거부터 대형폐기물 처리까지

수원에서 TV 버리는 방법: 무료 방문수거부터 대형폐기물 처리까지

수원에서 TV 버리는 방법을 정리했습니다. 무료 폐가전 방문수거 예약, 벽걸이 TV 철거, 준비물, 수거 불가 사례와 대형폐기물 처리 기준을 확인하세요.

부산에서 이불 버리는 방법: 구·군별 신고, 수수료, 배출 순서까지

부산에서 이불 버리는 방법: 구·군별 신고, 수수료, 배출 순서까지

부산에서 이불을 버릴 때 먼저 확인할 것은 거주 구·군의 대형폐기물 기준입니다. 연제구·해운대구·사상구 공식 기준의 차이, 신고·결제·배출 순서, 전기매트와 일반 이불의 구분, 실수하기 쉬운 점을 정리했습니다.

남양주에서 노트북 버리는 방법: 무상수거, 대형폐기물 신고, 개인정보 삭제까지

남양주에서 노트북 버리는 방법: 무상수거, 대형폐기물 신고, 개인정보 삭제까지

남양주에서 노트북 버리는 방법을 정리했습니다. 무상방문수거 조건, 대형폐기물 신고, 개인정보 삭제와 배터리 주의사항을 확인하세요.