Go

Reflection

reflect ํŒจํ‚ค์ง€, ํƒ€์ž… ๊ฒ€์‚ฌ, ๊ฐ’ ์กฐ์ž‘, struct tags, ์‚ฌ์šฉ ์‚ฌ๋ก€, ์„ฑ๋Šฅ

20 ๋ฉด์ ‘ ์งˆ๋ฌธยท
Senior
1

Go์˜ reflect ํŒจํ‚ค์ง€๋ž€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

๋‹ต๋ณ€

reflect ํŒจํ‚ค์ง€๋Š” ๋Ÿฐํƒ€์ž„์— ํƒ€์ž…๊ณผ ๊ฐ’์„ ๊ฒ€์‚ฌํ•˜๊ณ  ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค. ์ œ๋„ค๋ฆญ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(JSON ๋งˆ์ƒฌ๋ง, ORM) ๊ตฌํ˜„์— ์‚ฌ์šฉ๋˜์ง€๋งŒ, ํƒ€์ž… ์•ˆ์ •์„ฑ๊ณผ ์„ฑ๋Šฅ์„ ํฌ์ƒํ•˜๋ฏ€๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ์—์„œ ์ง์ ‘ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ๊ถŒ์žฅ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

2

reflect ํŒจํ‚ค์ง€๋กœ ๋ณ€์ˆ˜์˜ ํƒ€์ž…์„ ์–ป์œผ๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

๋‹ต๋ณ€

reflect.TypeOf() ํ•จ์ˆ˜๋Š” ์ธ์ž๋กœ ์ „๋‹ฌ๋œ ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋™์  ํƒ€์ž…์„ ๋‚˜ํƒ€๋‚ด๋Š” reflect.Type์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๋ณ€์ˆ˜๊ฐ€ nil์ด๋ฉด reflect.TypeOf()๋Š” nil์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ˜ํ™˜๋œ Type์— .Kind()๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํƒ€์ž… ๋ฒ”์ฃผ(int, string, struct ๋“ฑ)๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

3

reflect.Type๊ณผ reflect.Value์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

๋‹ต๋ณ€

reflect.Type์€ ํƒ€์ž…์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ(์ด๋ฆ„, kind, ๋ฉ”์„œ๋“œ, ํ•„๋“œ)๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ reflect.TypeOf()๋กœ ์–ป์Šต๋‹ˆ๋‹ค. reflect.Value๋Š” ๊ตฌ์ฒด์ ์ธ ๊ฐ’์„ ๋‚˜ํƒ€๋‚ด๋ฉฐ reflect.ValueOf()๋กœ ์ฝ๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‘˜์€ ์ƒํ˜ธ ๋ณด์™„์ ์ž…๋‹ˆ๋‹ค. Type์€ '๋ฌด์—‡'์„ ์„ค๋ช…ํ•˜๊ณ  Value๋Š” '๋ฐ์ดํ„ฐ'๋ฅผ ๋‹ด์Šต๋‹ˆ๋‹ค.

4

reflection์„ ํ†ตํ•ด ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ์–ด๋–ป๊ฒŒ ์ˆ˜์ •ํ•ฉ๋‹ˆ๊นŒ?

5

reflect.Kind๋ž€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

+17 ๋ฉด์ ‘ ์งˆ๋ฌธ

๊ธฐํƒ€ Go ๋ฉด์ ‘ ์ฃผ์ œ

Go ๊ธฐ์ดˆ

Junior
25๊ฐœ ์งˆ๋ฌธ

Go ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ

Junior
20๊ฐœ ์งˆ๋ฌธ

Go ์ธํ„ฐํŽ˜์ด์Šค

Junior
18๊ฐœ ์งˆ๋ฌธ

์—๋Ÿฌ ์ฒ˜๋ฆฌ

Junior
20๊ฐœ ์งˆ๋ฌธ

Goroutine ๊ธฐ์ดˆ

Junior
20๊ฐœ ์งˆ๋ฌธ

Channels

Junior
22๊ฐœ ์งˆ๋ฌธ

Go Modules

Mid-Level
18๊ฐœ ์งˆ๋ฌธ

HTTP ์„œ๋ฒ„

Mid-Level
24๊ฐœ ์งˆ๋ฌธ

HTTP ํด๋ผ์ด์–ธํŠธ

Mid-Level
18๊ฐœ ์งˆ๋ฌธ

JSON ์ธ์ฝ”๋”ฉ

Mid-Level
20๊ฐœ ์งˆ๋ฌธ

Database/SQL

Mid-Level
22๊ฐœ ์งˆ๋ฌธ

context ํŒจํ‚ค์ง€

Mid-Level
20๊ฐœ ์งˆ๋ฌธ

Testing

Mid-Level
22๊ฐœ ์งˆ๋ฌธ

๋™์‹œ์„ฑ ํŒจํ„ด

Mid-Level
24๊ฐœ ์งˆ๋ฌธ

๋™๊ธฐํ™” ํ”„๋ฆฌ๋ฏธํ‹ฐ๋ธŒ

Mid-Level
22๊ฐœ ์งˆ๋ฌธ

Go ์›น ํ”„๋ ˆ์ž„์›Œํฌ

Mid-Level
20๊ฐœ ์งˆ๋ฌธ

REST API ์„ค๊ณ„

Mid-Level
20๊ฐœ ์งˆ๋ฌธ

gRPC

Mid-Level
22๊ฐœ ์งˆ๋ฌธ

๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ

Senior
24๊ฐœ ์งˆ๋ฌธ

์„ฑ๋Šฅ ์ตœ์ ํ™”

Senior
22๊ฐœ ์งˆ๋ฌธ

Generics

Senior
20๊ฐœ ์งˆ๋ฌธ

Go Design Patterns

Senior
24๊ฐœ ์งˆ๋ฌธ

Microservices

Senior
24๊ฐœ ์งˆ๋ฌธ

๋ณด์•ˆ ๋ฐ ์ธ์ฆ

Senior
24๊ฐœ ์งˆ๋ฌธ

Docker & Containerization

Senior
20๊ฐœ ์งˆ๋ฌธ

Kubernetes Basics

Senior
22๊ฐœ ์งˆ๋ฌธ

๊ณ ๊ธ‰ Go

Senior
20๊ฐœ ์งˆ๋ฌธ

CLI ๊ฐœ๋ฐœ

Senior
20๊ฐœ ์งˆ๋ฌธ

๋‹ค์Œ ๋ฉด์ ‘์„ ์œ„ํ•ด Go์„ ๋งˆ์Šคํ„ฐํ•˜์„ธ์š”

๋ชจ๋“  ์งˆ๋ฌธ, flashcards, ๊ธฐ์ˆ  ํ…Œ์ŠคํŠธ, ์ฝ”๋“œ ๋ฆฌ๋ทฐ ์—ฐ์Šต, ๋ฉด์ ‘ ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ์— ์ ‘๊ทผํ•˜์„ธ์š”.

๋ฌด๋ฃŒ๋กœ ์‹œ์ž‘ํ•˜๊ธฐ