[go] Go 언어에서 메소드의 오버라이딩

Go 언어는 정적 타입 언어로서 객체지향 프로그래밍에서 메소드의 오버라이딩을 지원합니다. 메소드의 오버라이딩은 슈퍼클래스의 메소드를 서브클래스에서 재정의하여 사용하는 개념입니다.

메소드의 오버라이딩 구현하기

Go 언어에서 메소드의 오버라이딩을 구현하기 위해서는 다음과 같은 단계를 따라야 합니다:

  1. 슈퍼클래스 정의하기: 오버라이딩될 메소드를 가지고 있는 슈퍼클래스를 정의합니다. 예를 들어, Person 슈퍼클래스를 정의한다고 가정해 봅시다.
type Person struct {
    name string
    age int
}

func (p Person) SayHello() {
    fmt.Println("안녕하세요!")
}
  1. 서브클래스 정의하기: 슈퍼클래스를 상속받아 오버라이딩할 메소드를 재정의합니다. 예를 들어, Student 서브클래스를 정의하고 SayHello 메소드를 오버라이딩해 봅시다.
type Student struct {
    Person // Person을 Embedding하여 상속
    school string
}

func (s Student) SayHello() {
    fmt.Println("안녕하세요? 저는", s.name, "이고, ", s.school, "에 다니는 학생입니다.")
}
  1. 메소드 호출하기: 슈퍼클래스와 서브클래스의 객체를 생성한 후, 메소드를 호출해 봅시다. 이때, 오버라이딩된 서브클래스의 메소드가 호출되는 것을 확인할 수 있습니다.
func main() {
    p := Person{name: "홍길동", age: 30}
    s := Student{Person: p, school: "고등학교"}

    p.SayHello() // 슈퍼클래스의 메소드 호출
    s.SayHello() // 오버라이딩된 서브클래스의 메소드 호출
}

위의 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다:

안녕하세요!
안녕하세요? 저는 홍길동 이고, 고등학교에 다니는 학생입니다.

결론

Go 언어에서 메소드의 오버라이딩은 슈퍼클래스의 메소드를 서브클래스에서 재정의하여 사용하는 동일한 이름의 메소드를 정의하는 것입니다. 이를 통해 객체지향 프로그래밍의 다형성을 구현할 수 있으며, 코드의 재사용성과 유지보수성을 향상시킬 수 있습니다.

더 자세한 내용은 Go 언어 공식 문서를 참조하시기 바랍니다.