Doodly IT
[Go 묘공단 스터디] 인터페이스 본문
1) 인터페이스 선언
인터페이스는 메서드 구현을 포함한 구체화된 객체가 아닌 추상화된 객체로 상호작용을 할 수 있다.
인터페이스는 type 키워드와 interface키워드 사이에 인터페이스 명을 쓴 채로 정의한다.
인터페이스도 구조체이기 때문에 type키워드를 쓰게 된다.
type DuckInterface interface{
Fly()
Walk(distance int) int
}
2) 인터페이스 사용
package main
import (
"fmt"
)
type Stringer interface {
String() string
}
type Student struct {
Name string
Age int
}
func (s Student) String() string {
return fmt.Sprintf("안녕! 나는 %d 살 %s 라고 해!", s.Age, s.Name)
}
func main() {
student := Student{"철수", 12}
var stringer Stringer
stringer = student
fmt.Println("%s\n", stringer.String())
}
위에 Stringer 인터페이스안에 String()이란 메서드가 존재한다. String 메서드는 Student 타입의 인자를 입력받는다.
이때 Main 함수는 String()함수를 사용하지 않고 Interface에 정의되어있는것 만으로도 String 메서드를 이용할 수 있다. 즉 main의 student는 interface안에 있는 String 메서드를 사용하고 String 메서드는 전달받은 student 구조체 s에 따라 문장을 출력하게 된다.
3) 덕 파이핑
Go는 다른언어와 달리 인터페이스 구현 여부를 명시적으로 선언하는 것이 아닌 인터페이스에서 정의한 메서드 포함 여부로 판단한다.
4) 인터페이스의 기능
1. 인터페이스를 포함하는 인터페이스
type Reader interface{
Read() ( n int , err error)
Close() error
}
type Writer interface{
Write()(n int, err error)
Close() error
}
type ReadWriter interface{
Reader
Writer
}
ReadWriter 인터페이스는 Reader와 Writer 인터페이스를 포함한다. Reader와 Writer는 각각 Close() 메서드를 가진다.
ReadWriter 인터페이스는 이때 중복되지않고 하나의 Close() 메서드를 가지게 된다.
2. 빈 인터페이스
메서드를 가지고 있지 않는 인터페이스는 모든 값을 인자로 받을 수 있다.
3. 인터페이스의 기본값은 nil이다.
인터페이스가 정의되지 않는 메소드에 접근할 때 인터페이스의 기본값은 nil이다.
'프로그래밍 > Go' 카테고리의 다른 글
[Go 묘공단 스터디] 22. 자료구조 (1) | 2023.12.06 |
---|---|
[Go 묘공단 스터디] 21. 함수 고급편 (0) | 2023.12.06 |
[Go 묘공단 스터디] 메서드 (0) | 2023.11.29 |
[Go 묘공단 스터디] 슬라이스 (0) | 2023.11.29 |
[Go 묘공단 스터디] 패키지 <작성중> (0) | 2023.11.22 |