GO struct 와 interface

Hamji·2022년 2월 25일
0

이쁜 럭키 C언어 Go에는 C언어 에서 처럼 class와 상속이 없다.

그럼 어떻게 하냐?

구조체를 활용한 Struct Composition을 이용해 객체지향을 야매로 따라한다고 볼 수 있다.

애초에 객체지향은 설계 방법론이지 언어에 종속되는 개념은 아니니깐...

먼저 오늘은 struct와 interface 의 사용법을 보는 것이 목적이다.

객체지향으로 하는 방법은 다음에 할 예정이다.


Struct (구조체)


  • 필드들의 모음
  • 명명된 구성 요소를 필드라고 한다.

선업 방법은 간단하다.
나이와 이름을 가지는 struct를 선언한다고 생각해보자

type Person struct{
    name    string
    old     int
}

초기화도 아래와 같이 하면 된다.

var p = Person{
    name : "hamji",
    old : 1,
}

줄넘김을 해줄 땐 , 표시를 해주는게 보기도 좋다.
안하면 컴파일러에 걸릴 것이다.

기본적인 자료형 뿐만 아니라 다른 구조체 역시 필드로 사용할 수도 있다.
예를들어 Person에 자신의 생일을 저장하고 싶다고 생각해보자.

type Person struct{
    name    string
    old     int
    birth   time.Time
}

이럴 경우 초기화 할 때 다른 것과 똑같이

var p = Person{
    name : "hamji",
    old : 1,
    birth : time.Time(<날짜~~~>),
}

이런식으로 해주면 된다.

interface


interface 는 메서드의 집합채로 type이 구현해야하는 메서드의 원형을 정의하는 역할을 해준다.
인터페이스는 보통 ~er 로 이름을 끝내준다.

예를 들어 사람이니까 자기소개달리기 라는 함수가 메서드들을 모아놓은 인터페이스가 있다고 쳐보자

type Life interface{
    introduce()
    run()
}

인터페이스를 구현하기 위해서 해당 타입이 인터페이스를 구현하면 되니깐 지금은 2개의 함수만 구현하면 된다.

func (p Person) introduce() {
	fmt.Println("나는 사람 이름은 " + p.name)
}

func (p Person) run() {
	fmt.Println("나는 사람 달린다.")
}

같은 인터페이스를 구현하였다면 duck typing 역시 가능하다.
지금은 한번 토끼 Bunny라는 구조체를 이용해 만들어 보겟다.
덕타이핑이 뭔지 궁금하다면 구글에...

Bunny 구조체

type Bunny struct {
	speed int64
}

func (b Bunny) introduce() {
	fmt.Println("안녕하세요 토끼입니다 저는 시속" + strconv.FormatInt(b.speed, 10) + "km로 달립니다.")
}

func (b Bunny) run() {
	fmt.Println("달립니다")
}

인터페이스를 파라미터로 받음

func SaySomething(l Life) {
	l.introduce()
	l.run()
}
 ~/dev/GO/struct  go run main.go
나는 사람 이름은 hamji
나는 사람 달린다.
안녕하세요 토끼입니다 저는 시속10km로 달립니다.
달립니다
 ~/dev/GO/struct  



빈 인터페이스


가끔 빈 인터페이스들이 있는데 이는 어떠한 타입도 담을 수 있는 컨테이너 역할을 한다고 생각하자

아무거나 다 담긴다.

func main() {
	var i interface{}

	i = 1
	i = "asdasd"

	fmt.Println(i)
}
 ~/dev/GO/struct  go run main.go
asdasd
 ~/dev/GO/struct  

보면 이랫다 저랬다 된다.

profile
얕고 작은 내 지식 옹달샘

0개의 댓글