Skip to content

Latest commit

Β 

History

History
93 lines (71 loc) Β· 2.88 KB

generic.md

File metadata and controls

93 lines (71 loc) Β· 2.88 KB

generic

go version 1.18λΆ€ν„° generic μΆ”κ°€λ˜μ–΄ κ΄€λ ¨ν•΄μ„œ κΈ°λ‘πŸ“

Generic?

  • νƒ€μž… νŒŒλΌλ―Έν„°λ₯Ό 톡해 ν•˜λ‚˜μ˜ ν•¨μˆ˜λ‚˜ νƒ€μž…μ΄ μ—¬λŸ¬ νƒ€μž…λ“€μ— λŒ€ν•΄ λ™μž‘ κ°€λŠ₯ν•˜λ„λ‘ μ½”λ“œ μž¬μ‚¬μš©μ„±μ„ λŠ˜λ¦¬λŠ” 기법

μž₯점

  • νƒ€μž… νŒŒλΌλ―Έν„°λ₯Ό 톡해 ν•˜λ‚˜μ˜ ν•¨μˆ˜/νƒ€μž…μ΄ μ—¬λŸ¬ νƒ€μž…μ„ μ§€μ›ν•΄μ•Όλ˜λŠ” ν•¨μˆ˜μ—μ„œ λ™μž‘ν•  수 μžˆλ„λ‘ ν•΄μ€Œ
  • 'νƒ€μž… μ œν•œμž'λ₯Ό μ΄μš©ν•΄ νƒ€μž… νŒŒλΌλ―Έν„°λ‘œ μ‚¬μš©λ˜λŠ” νƒ€μž… μ œν•œ κ°€λŠ₯
  • μΈν„°νŽ˜μ΄μŠ€λ„ νƒ€μž… μ œν•œμžλ‘œ μ‚¬μš© κ°€λŠ₯
  • ν•˜λ‚˜μ˜ μ½”λ“œλ‘œ μ—¬λŸ¬ νƒ€μž…μ— λŒ€ν•΄ μž¬μ‚¬μš© κ°€λŠ₯

μ‚¬μš©λ²•

  • λ‹€μŒ μ•„λž˜μ— λŒ€ν•΄ μ œλ„€λ¦­μ„ μ μš©ν•  수 있음

  • 자료ꡬ쑰(슬라이슀, 맡, 채널 λ“±)κ³Ό 같이 μ»¨ν…Œμ΄λ„ˆ νƒ€μž…μ„ μ‚¬μš©ν•  λ•Œ 유용

  • λ‹€μ–‘ν•œ νƒ€μž…μ— λŒ€ν•΄ λΉ„μŠ·ν•œ λ™μž‘μ„ ν•΄μ•Όν•˜λŠ” 경우 유용

예제

  • 예제 1) Add() ν•¨μˆ˜

    // μ •μˆ˜ν˜•μ— λŒ€ν•œ λ§μ…ˆμ„ μˆ˜ν–‰ν•˜λŠ” ν•¨μˆ˜
    func Add(a, b int) int {
     return a + b
    }
    
    // μ‹€μˆ˜ν˜•μ— λŒ€ν•œ λ§μ…ˆμ„ μˆ˜ν–‰ν•˜λŠ” ν•¨μˆ˜
    func Add(a, b float32) float32 {
     return a + b
    }
    
    import "constraints"
    
    // μ œλ„€λ¦­μ„ μ‚¬μš©ν•˜μ—¬, μ •μˆ˜/μ‹€μˆ˜μ— λŒ€ν•΄ λ§μ…ˆμ„ μˆ˜ν–‰ν•˜λŠ” ν•¨μˆ˜
    func add[T constraints.Integer | constraints.Float](a, b T) T {
       return a + b
    }
    

    [T constraint] : νƒ€μž… νŒŒλΌλ―Έν„°λ₯Ό λ‚˜νƒ€λƒ„

  • 예제 2) Print() ν•¨μˆ˜

    // λͺ¨λ“  νƒ€μž…μ— λŒ€ν•΄ 좜λ ₯ν•˜λŠ” ν•¨μˆ˜
    func Print[T1 any, T2 any](a T1, b T2) {
       fmt.Println(a, b)
    }
    

    [T any] : λͺ¨λ“  νƒ€μž…μ΄ κ°€λŠ₯ν•˜λ‹€κ³  ν‘œμ‹œν•œ νƒ€μž… νŒŒλΌλ―Έν„°

  • 예제 3) νƒ€μž… μ œν•œμ΄ μžˆλŠ” Add() ν•¨μˆ˜

    // νƒ€μž… μ œν•œ μ„ μ–Έ
    type Integer interface {
       int8 | int16 | int32 | int64 | int
    }
    func add[T Integer](a, b T) T {
       return a + b
    }
    

    add[T any]둜 μ‹€ν–‰ μ‹œ, ν•΄λ‹Ή νƒ€μž…μ΄ + μ—°μ‚°μžκ°€ μ§€μ›λ˜λŠ”μ§€ μ•Œ 수 μ—†μ–΄ μ—λŸ¬κ°€ λ°œμƒν•¨
    λ”°λΌμ„œ, λ”°λ‘œ νƒ€μž…μ œν•œμ„ μ •μ˜ν•˜μ—¬ μ²˜λ¦¬ν•  수 있음

  • 예제 4) νƒ€μž… μ œν•œμ΄ μžˆλŠ” Add() ν•¨μˆ˜ - 별칭 νƒ€μž…κΉŒμ§€ ν¬ν•¨ν•˜λŠ” 경우

    // νƒ€μž… μ œν•œ μ„ μ–Έ( ~ : 별칭 νƒ€μž…κΉŒμ§€ 포함)
    type Integer interface {
       ~int8 | ~int16 | ~int32 | ~int64 | ~int
    }
    
    type MyIntType int //별칭 νƒ€μž… μ •μ˜
    
    func add[T Integer](a, b T) T {
       return a + b
    }
    

    ~λ₯Ό 톡해 λ³„μΉ­νƒ€μž…κΉŒμ§€ ν¬ν•¨ν•˜μ—¬ νƒ€μž… μ œν•œμ΄ κ°€λŠ₯

μ°Έκ³