일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 티스토리챌린지
- 정보처리기사실기 기출문제
- go
- kotlin querydsl
- Linux
- golang
- docker
- AI
- minikube
- 코틀린 코루틴의 정석
- CKA 기출문제
- 기록으로 실력을 쌓자
- Elasticsearch
- 공부
- Spring
- Pinpoint
- Java
- kotlin coroutine
- tucker의 go 언어 프로그래밍
- APM
- aws
- 정보처리기사 실기 기출문제
- 오블완
- PETERICA
- CKA
- CloudWatch
- kotlin
- Kubernetes
- AWS EKS
- mysql 튜닝
- Today
- Total
피터의 개발이야기
[GO] Tucker의 GO 언어 프로그래밍 - 18장 인터페이스 본문

ㅁ 들어가며

ㅇ Tucker의 GO 언어 프로그래밍 책을 보고 정리한 글입니다.
ㅇ [GO] Tucker의 GO 언어 프로그래밍 - 목차
ㅇ Go 언어의 인터페이스는 강력하면서도 유연한 추상화 도구이다.
ㅁ 인터페이스
type Speaker interface {
Speak() string
}
ㅇ 인터페이스는 메서드의 집합을 정의하는 타입이다.
ㅇ 이 인터페이스는 Speak()
메서드를 가진 모든 타입이 구현할 수 있다.
type Person struct {
Name string
}
func (p Person) Speak() string {
return "Hello, my name is " + p.Name
}
ㅇ 예를 들어 Person
타입은 Speaker
인터페이스를 만족한다.
ㅁ 인터페이스 왜 쓰나?
ㅇ 인터페이스의 주요 목적은 코드의 유연성과 재사용성을 높이는 것이다.(p369)
ㅇ 인터페이스를 사용하면,
- 다형성을 구현할 수 있다.
- 코드 간의 결합도를 낮출 수 있다.
- 테스트하기 쉬운 코드를 작성할 수 있다.
func MakeSpeakerSpeak(s Speaker) {
fmt.Println(s.Speak())
}
ㅇ 예를 들어, 다양한 타입의 객체를 동일한 방식으로 처리할 수 있다.
ㅇ 이 함수는 Speaker
인터페이스를 구현한 어떤 타입의 객체든 받아들일 수 있다.
ㅁ 덕 타이핑(p376)
Go의 인터페이스는 "덕 타이핑" 원칙을 따른다. 이는 "오리처럼 걷고 오리처럼 꽥꽥거리면, 그것은 오리다"라는 개념에서 유래했다.
Go에서는 타입이 인터페이스의 모든 메서드를 구현하면, 그 타입은 자동으로 해당 인터페이스를 만족한다. 명시적인 선언이 필요 없다.
이러한 접근 방식은 코드의 유연성을 크게 높여준다. 서비스 제공자가 인터페이스를 정의할 필요 없이 구체화된 객체만 제공하고 서비스 이용자가 필요에 따라 그때그때 인터페이스를 정희해서 사용할 수 있다.
ㅁ 인터페이스 기능 더 알기
인터페이스의 몇 가지 추가 기능을 살펴보겠습니다:
- 빈 인터페이스:
interface{}
타입은 모든 타입을 받아들일 수 있다. - 인터페이스 임베딩: 인터페이스 안에 다른 인터페이스를 포함할 수 있다.
- 인터페이스 기본값: 인터페이스 변수는 구체적인 값과 타입 정보를 모두 가진다.
type ReadWriter interface {
Reader
Writer
}
ㅇ 이 ReadWriter
인터페이스는 Reader
와 Writer
인터페이스의 모든 메서드를 포함한다.
ㅁ 인터페이스 변환하기
Go에서는 타입 단언(Type Assertion)과 타입 스위치(Type Switch)를 사용하여 인터페이스 값을 구체적인 타입으로 변환할 수 있습니다.
ㅇ타입 단언
value, ok := interfaceValue.(concreteType)
ㅇ 타입 스위치
switch v := interfaceValue.(type) {
case int:
fmt.Println("Integer:", v)
case string:
fmt.Println("String:", v)
default:
fmt.Println("Unknown type")
}
ㅇ 이러한 기능을 통해 인터페이스 값의 실제 타입을 안전하게 확인하고 처리할 수 있다.
ㅁ 함께 보면 좋은 사이트
ㅇ Go 인터페이스
'Programming > GO' 카테고리의 다른 글
[GO] Tucker의 GO 언어 프로그래밍 - 목차 (0) | 2025.03.31 |
---|---|
[GO] 인터페이스와 제네릭의 차이점은? (0) | 2025.03.28 |
[GO] Tucker의 GO 언어 프로그래밍 - 24장 제네릭 프로그래밍 (0) | 2025.03.27 |
[GO] Tucker의 GO 언어 프로그래밍 - 23장 채널과 컨텍스트 (1) | 2025.03.26 |
[GO] Tucker의 GO 언어 프로그래밍 - 22장 고루틴과 동시성 프로그래밍 (0) | 2025.03.25 |