go와 ts에서의 인터페이스

Jane Yeonju Kim·2022년 5월 11일
0

Golang

목록 보기
1/4
post-thumbnail

😇 Interface?

인터페이스(interface)는 서로 다른 두 개의 시스템, 장치 사이에서 정보나 신호를 주고받는 경우의 접점이나 경계면이다. 즉, 사용자가 기기를 쉽게 동작시키는데 도움을 주는 시스템을 의미한다. 컴퓨팅에서 "컴퓨터 시스템끼리 정보를 교환하는 공유 경계"이다.

"서로 다른" => Adapter와 다르게 구체적인 데이터 타입이 명시되지 않아도 된다는 특징이 있습니다.


Go 언어

행동만 정의하고 구체적인 데이터 타입까지는 정하지 않는 경우에 인터페이스를 사용합니다!

"인터페이스 유형의 값은 해당 메소드를 구현하는 모든 값을 보유 할 수 있습니다."
Go를 향한 여행
=> 들어오는 값의 데이터 타입을 모르지만 받고 싶을 때 사용합니다.

package main

import (
	"fmt"
	"math"
)

type I interface {
	M()
}

// P 구조체 선언
type P struct {
	S string
    // TMI : 구조체 안에 인터페이스 데이터 타입을 넣을 수도 있습니다!
}

// P 데이터 타입을 입력 받았을 때의 M 함수
func (t *P) M() {
	fmt.Println(t.S)
}

// F 커스텀 타입 선언
type F float64

// F 데이터 타입을 입력 받았을 때의 M 함수
// 같은 이름의 M 함수가 있어도 입력받는 데이터 타입이 다르기 때문에 선언할 수 있습니다!
func (f F) M() {
	fmt.Println(f)
}


func main() {
	// 인터페이스 I의 데이터 타입으로 변수 i를 선언합니다 
	var i I

	// P의 데이터 타입(구조체)으로 "Hello" 데이터를 i 변수에 담습니다 
	i = &P{"Hello"}
	describe(i)				//  (&{Hello}, *main.P)
    // M 함수를 실행합니다
	i.M()					//  Hello

	// 변수 i는 데이터 타입이 인터페이스 I이기 때문에 
    // F의 데이터 타입으로 math.Pi 데이터를 i 변수에 담아도 오류가 나지 않습니다!
	i = F(math.Pi)
	describe(i)             //  (3.141592653589793, main.F)
	i.M()                   //  3.141592653589793
	
    // a 변수에 숫자 33을 담고-> b 변수에 문자열로 데이터 타입을 변환시켜서-> 출력
	a := 33
	b := string(a)
	fmt.Println(b)          // ! 출력 (아스키 코드: 33)
}

func describe(i I) {
	fmt.Printf("(%v, %T)\n", i, i)
}



TypeScript

extends로 확장이 가능한 구조체와 비슷한 개념으로
인터페이스 객체 안에는 함수를 넣을 수 없습니다!
하지만 함수형 인터페이스를 만들 수는 있습니다.

// 인터페이스 선언
interface I<t> {
  p1: string;
  p2: number;
  p3?: t;
}

const test: I = {
  p1: "value",
  p2: 0,
}

// T : 확장된 I 인터페이스
interface T extends I<string> {
  p4: boolean;
}

const test2: T = {
  p1: "value",
  p2: 0,
  p4: true,
}

// 인터페이스 내부에서도 확장 가능합니다!
interface G <g extends string | number> {
  P1 : U;
  p2 : U extends string ? number : string ;
  p3? : null | undifined;
}

함수형 인터페이스

📌 아래 코드 출처: https://poiemaweb.com/typescript-interface

// 함수 인터페이스의 정의
interface SquareFunc {
  (num: number): number;
}

// 함수 인테페이스를 구현하는 함수는 인터페이스를 준수하여야 한다.
const squareFunc: SquareFunc = function (num: number) {
  return num * num;
}

console.log(squareFunc(10)); // 100
profile
안녕하세요! 김개발자입니다 👩‍💻 🐈

2개의 댓글

comment-user-thumbnail
2022년 5월 15일

저도 나중에 기회되면 GO랑 TypeScript 배워보고싶네요👏

1개의 답글