[Go] circular import ๋ฌธ์ œ

import cycle not allowed

Go ๋ชจ๋“ˆ์‹œ์Šคํ…œ์˜ ๋ถˆํŽธํ•œ ํ•œ๊ณ„์  ์ค‘ ํ•˜๋‚˜๋‹ค.

๊ณ„์ธตํ˜•์œผ๋กœ ๋ชจ๋“ˆ์„ ์Œ“์•„์˜ฌ๋ฆฌ๋Š” Rust ๊ฐ™์€ ๋ชจ๋“ˆ์‹œ์Šคํ…œ์—์„œ๋Š” ์ด๋Ÿฐ ๋ฌธ์ œ๊ฐ€ ๋ณ„๋กœ ์—†๊ณ  ํšŒํ”ผํ•˜๊ธฐ๋„ ์‰ฌ์šด๋ฐ, Go์˜ ๋ชจ๋“ˆ์‹œ์Šคํ…œ์€ ๊ฐ ํŒจํ‚ค์ง€ ๊ฒฝ๋กœ๊ฐ€ ๋‹ค ๋…๋ฆฝ์ ์ด๊ณ  ์ˆ˜ํ‰์ ์ธ ๊ด€๊ณ„๋ผ์„œ ์ด๋Ÿฐ ๊ท€์ฐฎ์€ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, A๊ฐ€ B ํŒจํ‚ค์ง€๋ฅผ importํ•˜๊ณ , B๊ฐ€ A ํŒจํ‚ค์ง€๋ฅผ importํ•œ๋‹ค๋ฉด ์ด๋Ÿฐ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋œ๋‹ค.

์ฝ”๋“œ๋กœ ํ•œ๋ฒˆ ์˜ˆ์‹œ๋ฅผ ๋“ค์–ด๋ณด๊ฒ ๋‹ค.
๊ฐ ํ”„๋กœ์„ธ์„œ์˜ ๋™์ž‘์„ ์ •์˜ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค ํ•˜๋‚˜์™€, ๊ทธ ํ”„๋กœ์„ธ์„œ๋“ค์˜ ๋งคํ•‘ ๋ชฉ๋ก์ด ์žˆ๋‹ค.

ํŠน์ • ๋ฌธ์ž์—ด์ด ์ „๋‹ฌ๋ ๋•Œ ํ•ด๋‹น ํ”„๋กœ์„ธ์„œ๋ฅผ ์‹คํ–‰์‹œํ‚ค๊ธฐ ์œ„ํ•œ ๊ตฌ์กฐ ๋งคํ•‘์ด๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ € ์ธํ„ฐํŽ˜์ด์Šค์— ๋Œ€ํ•œ ๊ฐ„๋‹จํ•œ ๊ตฌํ˜„์ด ์žˆ๋‹ค.

์—ฌ๊ธฐ๊นŒ์ง€๋Š” ๊ดœ์ฐฎ๋‹ค. ์–ด์ฐจํ”ผ ๊ณ ๋žญ์˜ ๋‹คํ˜•์„ฑ์€ ๋•ํƒ€์ดํ•‘์ด๋ผ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ๊ฐ€์ ธ์˜ค์ง€๋Š” ์•Š์œผ๋‹ˆ๊นŒ

ํ•˜์ง€๋งŒ ๊ฐ€์ ธ์˜ฌ ์ผ์ด ์ƒ๊ธธ ์ˆ˜๋„ ์žˆ๋‹ค.
๋‚ด ๊ฒฝ์šฐ์—๋Š” ์ง€๊ธˆ Processor ๊ฐ์ฒด๋ฅผ ํ•˜๋‚˜ ๋ฐ›์•„์„œ ์—ฐ๋‹ฌ์•„ ์‹คํ–‰ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๋ ค ํ•œ๋‹ค.

๊ทธ๋Ÿฌ๋ฉด ์ด์ œ

์—๋Ÿฌ๊ฐ€ ํ„ฐ์ง„๋‹ค.




์ผ๋ฐ˜์ ์ธ ํ•ด๊ฒฐ๋ฒ•

๋ณดํ†ต์€ ํŒŒ์ผ, ํŒจํ‚ค์ง€๋‹จ์œ„๋ฅผ ์ž˜ ์ชผ๊ฐœ๋Š” ๊ฒƒ๋งŒ์œผ๋กœ ํ•ด๊ฒฐ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
ํŒจํ‚ค์ง€-ํด๋” ๋‹จ์œ„๋กœ import๋ฅผ ํ•˜๋‹ค๋ณด๋‹ˆ ๋ฌด์กฐ๊ฑด ๋””๋ ‰ํ„ฐ๋ฆฌ ๋‹จ์œ„๋กœ ์ชผ๊ฐœ์•ผ ํ•˜๋Š”๊ฒŒ ๋ถˆํŽธํ•˜๊ธด ํ•˜์ง€๋งŒ..

์ผ๋‹จ ์ด ๊ฒฝ์šฐ์—๋Š” interface๋ฅผ ๋…๋ฆฝ์ ์œผ๋กœ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. ์—ฌ๊ธฐ์ €๊ธฐ ๋ถˆ๋ ค๋‹ค๋‹ˆ๋Š” ๋…€์„์ด๋‹ˆ๊นŒ.

๊ฒฝํ—˜์ƒ ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๊ผญ ์ด๋Ÿฐ ๊ฒฝ์šฐ๊ฐ€ ์•„๋‹ˆ๋ผ๋„ ๋‹จ๋…ํŒŒ์ผ๋กœ ๋ถ„๋ฆฌํ•ด๋‘๋Š”๊ฑธ ๊ถŒ์žฅํ•œ๋‹ค.
์—ฌ๊ธฐ์ €๊ธฐ์„œ ๊ณตํ†ต์œผ๋กœ ๋ถˆ๋ ค๋‹ค๋‹ˆ๊ธฐ ์‰ฌ์šด ๋…€์„์ด๋‹ˆ, ๋‹น์žฅ์€ ๊ดœ์ฐฎ๋”๋ผ๋„ ์“ฐ๋‹ค๋ณด๋ฉด import๊ฐ€ ๊ผฌ์ด๊ธฐ ๋”ฑ ์ข‹๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ „์—ญ๋ณ€์ˆ˜ ๋งคํ•‘ Processors๋Š” main ํŒจํ‚ค์ง€๋กœ ์˜ฎ๊ฒผ๋‹ค.

๊ทธ๋Ÿผ ์ด์ œ ์ž˜ ์‹คํ–‰์ด ๋  ๊ฒƒ์ด๋‹ค.