[TIL] Go와 OOP

TL;DR

Go는 객체지향 프로그래밍에 적합한 언어가 아닐 수 있다. 불가능한 것은 아니다. 하지만 객체지향적인 개발이 목적이라면 Java나 C++처럼 더 적합한 언어가 충분히 있을 수 있다.

Go의 reflection, type, interface

  • Go의 reflection은 동적으로 객체에 대한 정보를 알 수 있는 기능을 제공한다.
  • Go에는 타입 메서드가 있다.
type Book struct {}

func (b Book) Read() error {
    // ...
}

func main() {
    b := Book{}
    b.Read()
}

Read라는 함수의 헤더 부분에 매개변수를 받고 있다. 메서드의 수신자인데 Read를 Book 타입의 타입 메서드로 만들어준다.

  • Go에도 인터페이스가 있다. 하지만 Java와는 다르게 Go의 인터페이스는 구현할 메서드의 집합이다.
  • Go는 상속이 없고 합성을 지원한다.
  • Go는 인터페이스를 통한 다형성을 지원한다.

---

OOP가 프로그래밍의 정답은 아닐 것이다. 문제를 해결하는 방법이 반드시 하나만은 아니다. Go에는 Go만의 개발 방법론이 있을 터이다.

Go에 억지로 OOP를 끼워 맞추려 하는 것보다는 Go에 가장 자연스러운 방법론을 찾는 것이 맞을 것 같다.