Sad Puppy 3 [묘공단] Go언어 고급 20-21장(인터페이스, 함수 고급) :: 개발자 아지트

인터페이스

 

인터페이스란?

인터페이스는 자바의 클래스 비슷하지만 다른 개념임. 

메서드 구현도 가능하고 추상화된 객체로 사용가능함(인터페이스는 메서드의 집합체이다. )

객체지향 프로그래밍에서 가장 중요한 역할을 함.

인터페이스를 이용할 경우, 구체적인 객체가 아닌 인터페이스 만으로도 메서드를 호출할 수 있음.
따라서 프로그램 변경사항 발생시 유연하게 변경가능함.

 

 

인터페이스 사용법

// 타입 선언 키워드, 인터페이스 명, 인터페이스 선언 키워드, {} 내부에는 메서드 집합을 기입해줌

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을 사용할 수 있다. 

 

함수를 변수 값으로 저장하기 위해 함수 타입 변수를 사용할 수 있다. 

 

쉽게 내부 상태를 갖는 함수 정의를 통해 함수 리터럴을 사용할 수 있다. 

+ Recent posts