인터페이스
인터페이스란?
인터페이스는 자바의 클래스 비슷하지만 다른 개념임.
메서드 구현도 가능하고 추상화된 객체로 사용가능함(인터페이스는 메서드의 집합체이다. )
객체지향 프로그래밍에서 가장 중요한 역할을 함.
인터페이스를 이용할 경우, 구체적인 객체가 아닌 인터페이스 만으로도 메서드를 호출할 수 있음.
따라서 프로그램 변경사항 발생시 유연하게 변경가능함.
인터페이스 사용법
// 타입 선언 키워드, 인터페이스 명, 인터페이스 선언 키워드, {} 내부에는 메서드 집합을 기입해줌
type MeInterface interface{
Eat()
Walk(distance int) int
}
인터페이스도 구조체와 같이 타입중 하나임으로 type 키워드를 써준다.
즉, 인터페이스 변수 선언 및 변수처럼 값으로 사용 가능하다.
메서드 집합 사용시 유의사항
type Tmp interface{
String() string
String(int) string // 메서드명을 중복되게 사용할 수 없음
_(y int) // 메서드는 반드시 이름 필요함
}
인터페이스 사용 예시
package main
import "fmt"
type Stringer interface {
String() string
}
type Student struct {
Name string
Age int
}
func (s Student) String() string {
// student 타입은 Stringer의 String() 메서드를 포함함 따라서,
// Student타입은 Stringer 인터페이스로 사용될 수 있음
return fmt.Sprintf("Hi My name is %s, my age is %d.", s.Name, s.Age)
// Sprintf 함수는 문자열을 만들어 String타입의 값으로 반환하는 함수
}
func main(){
student := Student{ "Minsoo", 101 }
var stringer Stringer // stringer은 Stringer인터페이스임
stringer = student
//stringer을 통해 Student타입의 student를 갖고 있음으로써 student의 메서드 String이 호출됨
fmt.Printf("%s\n", stringer.String())
}
출력값: Hi My name is Minsoo, my age is 101.
인터페이스에서 정의한 메서드 집합을 가진 모든 타입은 인터페이스로 쓰일 수 있다.
덕 타이핑이란, 인터페이스에서 정의한 메서드 포함 여부로 판단하는 것이다.
인터페이스를 통해 추상화 계층을 만들 수 있으며, 관계로 상호작용을 정의한다.
모든 타입이 비어있는 인터페이스의 변수 값으로 사용될 수 있다.
인터페이스 변환을 통해, 인터페이스 변수에 대해 구체화된 타입이나 또 다른 인터페이스로 변경 가능하다.
해당 글은 [Tucker의 Go 언어 프로그래밍] 20장~21장을 읽고 공부한 글입니다.
함수 고급
인수 타입 앞에 마침표 3개를 찍는 것을 통해 가변 인수를 표현한다.
함수 종료 전 처리해야 하는 로직 수행을 위해 defer을 사용할 수 있다.
함수를 변수 값으로 저장하기 위해 함수 타입 변수를 사용할 수 있다.
쉽게 내부 상태를 갖는 함수 정의를 통해 함수 리터럴을 사용할 수 있다.
'Golang' 카테고리의 다른 글
[묘공단] Go언어 고급 24-25장(고루틴, 동시성 프로그래밍, 채널, 컨텍스트) (0) | 2024.03.11 |
---|---|
[묘공단] Go언어 고급 22-23장(자료구조, 에러 핸들링) (0) | 2024.03.09 |
[묘공단] Go언어 고급 18-19장(슬라이스, 메서드) (0) | 2024.02.05 |
[묘공단] Go언어 기초 15-17장(문자열, 패키지) (0) | 2024.01.23 |
[묘공단] Go언어 기초 12-14장(배열, 구조체, 포인터) (0) | 2024.01.23 |