๋ชจ๋ ์์คํ ์ ๊ฒฝ์ฐ ์ ํ๊ธฐ๋ฒ์ผ๋ก ๋ชจ๋์ ๊ฐ์ ธ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
import ArgParse
...
ArgParse.add_argument(p, "--opt1")
...
์ด๊ฒ์ ๋ค์์คํ์ด์ค ์ค์ผ์ ๋ฐฉ์งํ๋ ๋ฐ ์ ์ฉํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ชจ๋ ์ด๋ฆ์ ์ฅํฉํจ ๋๋ฌธ์ ๋ชจ๋ ๋ณ์นญ์ ๊ฐ๋ ๊ฒ์ด ์ข์ต๋๋ค.
import ArgParse as ap
...
ap.add_argument(p, "--opt1")
...
๋๋ ๋น์ ์ด ๋ค์์ ํ ์ ์๋ค๋ ๊ฒ์ ๋ช ๋ถ ์ ์ ๊นจ๋ฌ์์ต๋๋ค.
import ArgParse
ap = ArgParse
ap.add_argument(...)
๋๋ ์ฌ์ ํ "import as" ํ๊ธฐ๋ฒ์ ๊ตฌ๋ฌธ ์คํ์ผ๋ก ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
๋ด๊ฐ ์ฌ๊ธฐ ์๊ณ ๊ทธ๊ฒ์ ๋ํด ์๊ฐํ๋ ๋์ @JeffreySarnoff ์ ํฌ๋ผ ๊ฒ์๋ฌผ ์์ ์ธ๊ธํ๋ฏ์ด ๋์ผํ ๊ฐ์ ธ์ค๊ธฐ ๋ผ์ธ์์ ์ฌ๋ฌ ํน์ ๊ธฐ๋ฅ์ ๊ฐ์ ธ์ค๋ ๋ฐฉ๋ฒ์ด ์์ผ๋ฉด ์ข์ ๊ฒ์ ๋๋ค. ๋ฌธ์ ๋ฅผ ๊ฒ์ํ ๊ฒฐ๊ณผ ์์ง ๊ทธ๋ฌํ ์์ฒญ์ด ํ์๋์ง ์์์ต๋๋ค.
๊ฐ์ ๊ฒ
# from the forum post
import Module.(export1,export2,export3)
# or
import Module.[export1,export2,export3]
# or maybe
import Module.{export1,export2,export3}
์ด ๋ฌธ์ ์ ๋ค๋ฅธ ๋ฌธ์ ์ด์ง๋ง ๊ด๋ จ์ด ์์ต๋๋ค. ๋ด๊ฐํด์ผํฉ๋๊น
(์ด๋ฌํ ๊ธฐ๋ฅ์ ์ ์ฉ์ฑ์ ๋ ผ๋์ ์ฌ์ง๊ฐ ์๋ค๊ณ ๊ฐ์ ํ๊ณ ...)
ํธ์ง : ์ด๊ฒ์ ์ด์ import Module: export1, export2, export3
์์ ์๋ํฉ๋๋ค.
๋๋ ๊ทธ๊ฒ์ด ๋ํ ์๋ฅผ ๋ค์ด ์ง์ํด์ผํ๋ค๊ณ ์๊ฐํฉ๋๋ค
import ArgParse.add_argument as addarg
๊ฐ์ ธ์ฌ ๋ ๋ชจ๋ ๋ฉค๋ฒ์ ์ด๋ฆ์ ๋ฐ๊ฟ ์ ์์ต๋๋ค.
์ด๋ฆ์ด ๋ฐ๋ ํจ์ ์ด๋ฆ์ด ๋์คํจ์น์ ์ด๋ป๊ฒ ์ฐธ์ฌํ๋์ง ๊ถ๊ธํ์ญ๋๊น?
๊ธฐ๋ณธ์ ์ผ๋ก const foo = Base.bar
์ ํด๋นํ๋ ๋ณ์นญ์ฒ๋ผ ์๋ํด์ผ ํฉ๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก const foo =์ ๋์ผํ ๋ณ์นญ์ฒ๋ผ ์๋ํด์ผ ํฉ๋๋ค.
๋ฒ ์ด์ค.๋ฐ.ํจ์๋ฅผ ๊ฐ์ ธ์ฌ ๋ ์ฌ์ฉํ๊ฑฐ๋ ์ฌ์ ์ํ ๊ณํ์ ๋๋ค. ์ฃผ์ด์ง
์์ ๊ฐ์ด
Base.bar๋ฅผ foo๋ก ๊ฐ์ ธ์ค๊ธฐ
ํ์คํ foo๋ฅผ Base.bar๋ก ์ฌ์ฉํ ์ ์์ง๋ง foo๋ฅผ ์ ์ํ๋ ๊ฒ๋ ์ฌ์ ์๋ฉ๋๋ค.
๋ฒ ์ด์ค๋ฐ? ๊ทธ๋์ผ ํ ๊น์?
์ด๊ฒ์ ์ค๋๋ ๋ฌธ์ ์ด์ง๋ง ์ฐ๋ฆฌ๊ฐ 0.2์ ์ ๊ทผํจ์ ๋ฐ๋ผ ์ด๊ฒ์ ๋ค์ ๊ฒํ ํด์ผ ํ ๋๋ผ๊ณ ์๊ฐํฉ๋๋ค.
์ฝ๋๋ฅผ ์์ฑํ ๋ ํญ์ import NumericExtensions as ne
๋ฅผ ์์ฑํ๊ณ ์ถ์๊ณ ์ด๊ฒ์ด ์ง์๋์ง ์๋๋ค๋ ์ฌ์ค์ ์ค์ค๋ก์๊ฒ ์๊ธฐ์์ผฐ์ต๋๋ค.
๊ตฌํํ๊ธฐ๊ฐ ๊ทธ๋ ๊ฒ ์ด๋ ต์ง๋ ์๊ณ , ์ ์๊ฐ์๋ ์ด๊ฒ ์ฐ๋ ๊ฒ๋ณด๋ค ํจ์ฌ ์ข์ ๊ฒ ๊ฐ์์.
import NumericExtensions
const ne = NumericExtensions
+1
+1
์ด๊ฒ์ ์ฌ์ ํ โโ๊ด๋ จ์ด ์์ต๋๊น? ์ ๋ ๊ฐ์ธ์ ์ผ๋ก ๋ชจ๋ ์จ๋ฆฌ์ด์ฑ์ ์ํด ์ถ๊ฐ foo = Foo
๋ฅผ ํ๋ ๊ฒ์ ์ ๊ฒฝ ์ฐ์ง ์์ง๋ง, ์๊ฑฐ โโ์จ๋ฆฌ์ด์ฑ์ ์ง์ํ๊ธฐ ์ํ ํฉ์๊ฐ ์์๋ ๊ฒ ๊ฐ์ต๋๋ค. ์ถฉ๋ถํ ๊ฐํ๊ฒ ๋๋ผ๋ ์ฌ๋์ ์ค์ค๋ก PR์ ํด์ผ ํ ์๋ ์์ต๋๋ค.
๊ทธ๋ฌ๋ x as y
๋ #1470์์ ์ธ๊ธ๋ convert(y,x)
๊ตฌ๋ฌธ์ ๋ํ ๊ฐ์ฅ ๊ฐ๋ ฅํ ๊ฒฝ์์ ์ค ํ๋์์ต๋๋ค. ์ด ๋์ ๋ช
ํํ ๊ตฌ๋ถํ๋ ๊ฒ์ ๊ทธ๋ฆฌ ์ด๋ ต์ง ์์ ๊ฒ ๊ฐ์ง๋ง ์ฐธ๊ณ ๋ง ํ์ธ์.
์ด ๊ธฐ๋ฅ์ ๊ฐ์น๋ ์๋ ์ด๋ฆ์ ๊ฐ์ ธ์ค๋ ๊ฒ์ ํผํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค.
+1
์ด ๊ธฐ๋ฅ์ด ์์ผ๋ฉด ์ข์ ๊ฒ์
๋๋ค.
+1
์ ํค์๋ as
๋ฅผ ๋์
ํ๋ ๋์ =>
์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์ด๋ป์ต๋๊น?
import Tlahuixcalpantecuhtli => Venus: xxxxxxxxx => x9, yyyyyyyy => y8, zzz
์ด๋ ๊ฒ ํ๋ฉด ๋์ผํ ๊ตฌ๋ฌธ์์ ๋ชจ๋ ๋ฐ ๋ณ์์ ํ์ ์งํฉ์ ๋ณ์นญ์ ์์ง์ผ๋ก ํ์ฉํ ์ ์์ต๋๋ค.
์ ๋ชจ๋ฅด๊ฒ ์ด, ๊ทธ๊ฑด ๋ด๊ฐ ๋ณด๊ธฐ์ ์ ๋ง ๋ชป์๊ฒผ์ด.
import Tlahuixcalpantecuhtli as Venus: xxxxxxxxx as x9, yyyyyyyy as y8, zzz
๊ทธ๊ฒ ๋ ๋์? ๊ฐ๋ ์ฑ์ด ํจ์ฌ ๋จ์ด์ง๋ ๊ฒ ๊ฐ์์.
์ ๋ ๊ฐ์ธ์ ์ผ๋ก as
์ด =>
๋ณด๋ค ๋ ์๋ช
ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ด๋ ์ฌ๋ฌ ๊ฐ์ง๋ฅผ ์๋ฏธํ ์ ์์ ๊ฒ ๊ฐ์ต๋๋ค.
์ ์ฒด ๊ณต๊ฐ: ํ์ด์ฌ ํธํฅ.
๋๋ as
=>
๊ตฌ๋ฌธ์ด ๋ ์ข์ต๋๋ค.
๋๋ ๋ด์ฌ ๊ท ํ์ ๊ฐํ ์์ ๊ฑฐ ๋ณด๊ด์๋ฅผ ์ข์ํฉ๋๋ค.
๋ชจ๋์ ๋ด๋ถ ๊ธฐํธ๋ฅผ ๋ค์ ๋ฐ์ธ๋ฉํ๋ ์ด์ ๋ ๋ฌด์์ ๋๊น? ๋น์ ์ด ์ ๋ง๋ก ๊ทธ๋ ๊ฒํด์๋ ์๋๊ธฐ ๋๋ฌธ์ ์ถํ ๊ฒ์ ๋๋ค.
๋๋ Haskell์ import ๋ฌธ๋ฒ์ ์ข์ ํ๋ค. ๋๋ Python์ ๋ค์์คํ์ด์ค๊ฐ Julia์ ๋ชจ๋๋ณด๋ค ๋ ์ธ๋ถํ๋์ด ์๋ค๊ณ ์๊ฐํฉ๋๋ค. Julia์ ๋ชจ๋์ Haskell์ ๋ชจ๋์ ๋นํด ์ ์ ์ด ๋ ๊ฐํ๋ฏ๋ก ์๊ฐ์ ์ป๊ธฐ ์ํด ๊ทธ๊ณณ์์ ์ฐพ์์ผ ํ ๊ฒ์ ๋๋ค.
@ssfrr ์ ๋์ํฉ๋๋ค. as
ํค์๋๋ ํจ์ฌ ๋ ์๋ช
ํ๋ฉฐ Python/Haskell ์ฌ์ฉ์์๊ฒ๋ ์น์ํฉ๋๋ค. @StefanKarpinski ๋ฌธ์ ๋ฅผ ๊ฐ๋
์ฑ์ผ๋ก ํด๊ฒฐํ๋ ค๋ฉด ํ์ด์ฌ๊ณผ ์ ์ฌํ ์ ๊ทผ ๋ฐฉ์๋ ๋์์ด ๋ฉ๋๋ค.
from Tlahuixcalpantecuhtli as Venus import xxxxxxxxx as x9, yyyyyyyy as y8, zzz
REPL๊ณผ ๋ํํ๋ ๊ฒ ๊ฐ์ ๋๋์ด ๋ญ๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ฌํ ์ ์์ ์คํ ๊ฐ๋ฅํ์ง ์๋ค๋ ๊ฒ์ ์๊ณ ์์ต๋๋ค.
from Tlahuixcalpantecuhtli as Venus import xxxxxxxxx as x9, yyyyyyyy as y8, zzz
์ด๊ฒ์ ๋ด๊ฐ Python์์ ๊ฐ์ฅ ์ ํธํ์ง ์๋ ๊ตฌ๋ฌธ ์ ํ ์ค ํ๋์ ๋๋ค. ์๋ฏธ๋ฅผ ์ฝ๊ฐ ๋ณ๊ฒฝํ๋ ค๋ฉด ์ด๊ธฐ ํค์๋์ ๋ชจ๋ ๊ฒ์ ์์๋ฅผ ๋ณ๊ฒฝํ์ฌ ์ ์ฒด ํ์ ๊ทผ๋ณธ์ ์ผ๋ก ์ฌ๋ฐฐ์ดํด์ผ ํฉ๋๋ค. ๋ค๋ฅธ ์์ ํ๊ณผ ์์ ํ ๋ค๋ฅธ ๊ฒ์ฒ๋ผ ๋ณด์ด๋ฉฐ ๊ฑฐ์ ๋์ผํ ์์ ์ ์ํํ๋ค๋ ์ฌ์ค์ ํ๋ฆฌ๊ฒ ํฉ๋๋ค. ์ด๊ฒ์ ํผ์์ ์ผ๋ก ์์ด์ ๊ฐ์ ๊ฒ์ ๋๋ฌด ๋ง์ ๋น์ค์ ๋๋ ๋์ฐํ ๊ตฌ๋ฌธ ์ค๊ณ์ ๋๋ค.
:+1: as
, :-1: from
import a => b: c => d, e => f
๋ ๋์๊ฒ ๋๋ฌด ํ๋ญ์ด๋ ๋๋์
๋๋ค.
๋๋ ๋ด์ฌ ๊ท ํ์ ๋ํด ๋ค์ด๋ณธ ์ ์ด ์์ผ๋ฉฐ ๊ทธ๊ฒ์ ๋ํด ์ฝ์ ํ์ ์ด๊ฒ์ด ๊ท ํ์ ๊ตฌ์ฑํ๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค. ํ์ง๋ง ์ฌ๋ฏธ์๋ ์ ์ ์ด ์์ ๊ฑฐ ๋ณด๊ด์๊ฐ 1์๊ฐ์ 10๊ฐ์ ์๋ต์ ๊ฐ์ง๊ณ ์๋ ๋ฐ๋ฉด, ์ ์๊ฒ ๋งค์ฐ ์ค์ํ์ง๋ง ๋ ์ด๋ ค์ด ๊ฒ์ผ๋ก ์๊ฐ๋๋ #6984์ ์ ์์ด 4์๊ฐ ๋์ ์๋ฌด๋ฐ ๋ ผํ๋ ์๋ค๋ ๊ฒ์ ๋๋ค!
as
vs. =>
์ ๊ฒฝ์ฐ : ์ด๋ ์ชฝ์ด๋ ํ์ฌ ์ํฉ์ ๋ํ ์ข์ ๊ฐ์ ์ด ๋ ๊ฒ์
๋๋ค.
์ข์ ์ง์ @BobPortmann #6984.
=>
๊ฐ FWIW์ ์ ํฉํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
ํ์ง๋ง ์ฌ๋ฏธ์๋ ์ ์ ์ด ์์ ๊ฑฐ ๋ณด๊ด์๊ฐ 1์๊ฐ์ 10๊ฐ์ ์๋ต์ ๊ฐ์ง๊ณ ์๋ ๋ฐ๋ฉด, ์ ์๊ฒ ๋งค์ฐ ์ค์ํ์ง๋ง ๋ ์ด๋ ค์ด ๊ฒ์ผ๋ก ์๊ฐ๋๋ #6984์ ์ ์์ด 4์๊ฐ ๋์ ์๋ฌด๋ฐ ๋ ผํ๋ ์๋ค๋ ๊ฒ์ ๋๋ค!
Parkinson์ ์๋ ๋น์ ์์ ์ด ๋ฌธ์ ๋ ์์ ๊ฑฐ ์ฐฝ๊ณ ์ด๊ณ #6984๋ ์์๋ก์ ๋๋ค.
:)
๋๋ ์ด ๋๋น๋ฅผ ํ์ ๋ ๊ฒ์ ์ซ์ดํ์ง๋ง ๋๋ as
์ ์ ํธํ๋ค๊ณ ์๊ฐํฉ๋๋ค. =>
๋ ์ฝ๊ฐ ๋ชจํธํ๊ณ ์ฌ์ ๊ณผ ๊ตฌ๋ฌธ์ ๊ณต์ ํ๋ ๊ฒ์ด ์ด์ํฉ๋๋ค. ์๋ง๋ =
๊ฐ ์๋ฏธ๊ฐ ์์ ์ ์์ต๋๋ค. import Foo: x = y
, ์ง๊ธ ํ๋ const x = Foo.y
์ ์ ์ฌํฉ๋๋ค.
๊ทธ ์ธ์๋ Haskell ๋ฌธ์์ ํด๋น ํ๊ฐ ์ ๋ง ๋์์ด ๋ฉ๋๋ค. ๋๋ ์ข
์ข
(ํนํ julia๋ฅผ ์ฒ์ ๋ฐฐ์ธ ๋) import
/ using
/ require
๋๋ import Mod.thing
vs. import Mod: thing
. ์ค์ ๋ก ๊ฐ์ ธ์ค๊ธฐ์ ๋ํ ์ฝ๋ก ๊ตฌ๋ฌธ์ ๋ํ ์ค๋ช
์ ์ฐพ๊ณ ์์๋๋ฐ ์ฐพ์ ์ ์์์ต๋๋ค.
@jakebolewski Julia์ using
๋ Haskell์ (ํ์ ๋์ง ์์) import
์ ๊ฐ๊ณ Julia์ import
๋ Haskell์ import qualified
์ ๊ฐ์ผ๋ฉฐ Haskell ๊ตฌ๋ฌธ์ด ๊ฝค ๋น์ทํ ๊ฒ ๊ฐ์ต๋๋ค.
์ถ๋ฐ์ ์ผ๋ก ๋ ์ ์๋ ์ฌ๋์ด ์ด๊ฒ์ด ํ์ฌ ์ฌ์ฉ ๊ฐ๋ฅํ ๊ฐ์ ธ์ค๊ธฐ/์ฌ์ฉ ๊ตฌ๋ฌธ์ ์ข์ ์์ฝ์์ ํ์ธํ ์ ์์ต๋๊น? x
๋ฐ y
ํจ์๋ฅผ ๋ด๋ณด๋ด๊ณ p
๋ฐ q
ํจ์๋ฅผ ๋ด๋ณด๋ด๋ Mod
๋ชจ๋์ด ์๋ค๊ณ ๊ฐ์ ํฉ๋๋ค.
import Mod
๋ Mod.x
, Mod.y
, Mod.p
๋ฐ Mod.q
$ ๋ฅผ ๊ฐ์ ธ์ต๋๋ค. ๊ฐ์ ธ์จ ํจ์๋ ๋ชจ๋ ๋ฉ์๋ ํ์ฅ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
using Mod
๋ x
, y
, Mod.x
, Mod.y
, Mod.p
๋ฐ Mod.q
$๋ฅผ ๊ฐ์ ธ์ต๋๋ค. . x
๋ฐ y
๋ ๋ฉ์๋ ํ์ฅ์ ์ฌ์ฉํ ์ ์์ง๋ง Mod.*
๋ ์ฌ์ฉํ ์ ์์ต๋๋ค.
import Mod.x, Mod.p
๋ x
, p
, Mod.x
, Mod.y
, Mod.p
๋ฐ Mod.q
$๋ฅผ ๊ฐ์ ธ์ต๋๋ค. . ๋ฉ์๋ ํ์ฅ์ ๋ชจ๋ ์ฌ์ฉํ ์ ์์ต๋๋ค.
import Mod: x, p
์ import Mod.x, Mod.p
์ ๋์ผํฉ๋๋ค.
using Mod.x, Mod.p
๋ x
, p
, Mod.x
, Mod.y
, Mod.p
๋ฐ Mod.q
$๋ฅผ ๊ฐ์ ธ์ต๋๋ค. . x
๋ฐ p
๋ ๋ฉ์๋ ํ์ฅ์ ์ฌ์ฉํ ์ ์์ง๋ง Mod.*
๋ ์ฌ์ฉํ ์ ์์ต๋๋ค.
using Mod: x, p
๋ using Mod.x, Mod.p
์ ๋์ผํฉ๋๋ค.
๋ด๊ฐ ๋งํ ์์๋ ํ using Mod
์ Mod
๋ด๋ณด๋ธ ๊ฒ์ ์ ๊ฒฝ ์ฐ๋ ์ ์ผํ ์ฌ์ฉ๋ฒ์
๋๋ค.
Module์ ๋ฌธ์์ ์ด ์์ฝ์ด ์์ผ๋ฉด ์ ๋ง ์ ์ฉํ ๊ฒ์ ๋๋ค! ๋๊ตฐ๊ฐ ์ด๊ฒ์ ํ์ธํ์ฌ PR์ ์ค๋นํ ์ ์์ต๋๊น?
๋ ผ์์ ์ฌ์ง๊ฐ ๊ฐ์ฅ ์ ์ ๋ฒ์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
import Tlahuixcalpantecuhtli as Venus: xxxxxxxxx as x9, yyyyyyyy as y8, zzz
๋๋ ๊ด์ฐฎ์ต๋๋ค. ํ ๋น ๋ฒ์ ์ ํฅ๋ฏธ๋กญ์ง๋ง ๋ค์๊ณผ ๊ฐ์ด ํ ์คํธํฉ๋๋ค.
import Venus = Tlahuixcalpantecuhtli: x9 = xxxxxxxxx, y8 = yyyyyyyy, zzz
์ซ์ดํ ์ค ์์๋๋ฐ ์ ๋ง ์ด์๋ค์. ์ด ๋ชจ๋์ ์๊ฐ๋ ์ด๋ฆ์ด ๊ฐ์ฅ ๋จผ์ ๋์ค๊ณ ๊ฐ์ฅ ๋์ ๋๋ ๊ฒ์ด ๋ง์์ ๋ญ๋๋ค. ์ฌ๋ฌ ๋ฉด์์ ์ด๊ฒ์ด ๊ฐ์ฅ ์ค์ํ ๊ฒ์ ๋๋ค.
@jakebolewski : ์ ๋ชจ๋์ ๋ด๋ถ ๊ธฐํธ๋ฅผ ๋ค์ ๋ฐ์ธ๋ฉํฉ๋๊น? ๋น์ ์ด ์ ๋ง๋ก ๊ทธ๋ ๊ฒํด์๋ ์๋๊ธฐ ๋๋ฌธ์ ์ถํ ๊ฒ์ ๋๋ค.
์๋ก ๋ค๋ฅธ ๋ ๋ชจ๋์์ ์ด๋ฆ์ด ์ถฉ๋ํ๋ ๋ฐ์ธ๋ฉ์ ๊ฐ์ ธ์ฌ ์ ์์ผ๋ฉฐ ์ด๋ฅผ ํตํด ๊ฐ๋ฅํฉ๋๋ค. ๋ํ ์์ ํ ์๊ฒฉ์ ๋ถ์ฌํ ์๋ ์์ง๋ง ์จ๋ฆฌ์ด์ฑ์ ์ง์ํ๋ ๊ฒฝ์ฐ ์ด๊ฒ๋ ์ง์ํ ์ ์์ต๋๋ค.
์ ๋ฐฐ์น ๋ ์ผ๋ถ ์ค ๋ฐ๊ฟ์ IMO๋ฅผ ๋ ์ฝ๊ธฐ ์ฝ๊ฒ ๋ง๋ญ๋๋ค.
import Tlahuixcalpantecuhtli as Venus:
xxxxxxxxx as x9,
yyyyyyyy as y8,
zzz
๋๋
import Venus = Tlahuixcalpantecuhtli:
x9 = xxxxxxxxx,
y8 = yyyyyyyy,
zzz
๋๋ ํ ๋น ๋ฒ์ ์ ์๋นํ ์ ํธํ๋ค๋ ๊ฒ์ ์๊ฒ ๋์์ต๋๋ค. ๊ฐ์ ธ์ค๊ธฐ๋ ๊ฒฐ๊ตญ ํ ๋น์ ํ ํํ์ ๋๋ค.
Module์ ๋ฌธ์์ ์ด ์์ฝ์ด ์์ผ๋ฉด ์ ๋ง ์ ์ฉํ ๊ฒ์ ๋๋ค! ๋๊ตฐ๊ฐ ์ด๊ฒ์ ํ์ธํ์ฌ PR์ ์ค๋นํ ์ ์์ต๋๊น?
@brk00 , ๊ฐ์ธ์!
@kmsquire ์ค๋ ์์ ํ๊ฒ ์ต๋๋ค!
ํ์ง๋ง ๊ทธ ์ ์ ๋ด๊ฐ ๊ทธ๊ฒ์ ์ ์ดํดํ๊ณ ์๋์ง ํ์ธํ๊ณ ์ถ์ต๋๋ค. @ssfrr ์์์ ๋ด๊ฐ REPL์ ์๊ณ using Mod
๋ฅผ ์
๋ ฅํ๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. ๊ฐ์ ธ์จ ํจ์ x
๋ฐ y
๋ ๋ฉ์๋ ํ์ฅ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ฆ, ๋ค๋ฅธ x ๋ฐ y ํจ์๋ฅผ ์ ์ธํ๋ฉด ํ ๋ฒ ๊ฐ์ ธ์จ Mod
์ ๋ฉ์๋์ ๋ ์ด์ ์ก์ธ์คํ ์ ์์ผ๋ฉฐ ์ ๋ฉ์๋์๋ง ์ก์ธ์คํ ์ ์์ต๋๊น?
ํจ์๋ฅผ ๊ฐ์ ธ์ค์ง ์๊ณ ํ์ฅํ๋ ค๊ณ ํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ๋ฉ๋๋ค.
julia> module Mod
export x, y
x() = "x"
y() = "y"
p() = "p"
q() = "q"
end
julia> using Mod
julia> x()
"x"
julia> p()
ERROR: p not defined
julia> x(n) = n
ERROR: error in method definition: function Mod.x must be explicitly imported to be extended
๋ค์๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
julia> import Mod: x # or import Mod.x
julia> x(n) = n
x (generic function with 2 methods)
julia> methods(x)
# 2 methods for generic function "x":
x() at none:5
x(n) at none:1
๊ธ์, ๋๋ ์ด๋ฆ ํด๊ฒฐ ํ๋์ ํผ๋ ์ค๋ฌ์ ์ต๋๋ค.
julia> module Mod
export x, y
x() = "x"
y() = "y"
p() = "p"
q() = "q"
end
julia> using Mod
julia> x(n) = n
x (generic function with 1 method)
using Mod
๋ก ๋ฐฉ๊ธ ๊ฐ์ ธ์จ ํจ์๋ฅผ _using_ํ๊ธฐ ์ ์ x
์ ์ ํจ์๋ฅผ ํ ๋นํ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์๋ฅผ ๋ค์ด ์ ํ ๋น ์ ์ x()
๋ฅผ ํธ์ถํ๋ฉด(๊ทํ์ ์์์์ ๊ฐ์ด) ์ค๋ฅ๊ฐ ์ค์ ๋ก ๋ฐ์ํฉ๋๋ค.
์, ํฅ๋ฏธ๋กญ๋ค! ๋๋ ๊ทธ๊ฒ์ ๋ํด ๋ชฐ๋๋ค. ๋ฐฉ๊ธ using
๋ค์ ๋ค์์คํ์ด์ค๋ฅผ ๋ณด์ฌ์ฃผ๊ธฐ ์ํด x
๋ฅผ ํธ์ถํ์ต๋๋ค.
ํต์ฌ ๊ฐ๋ฐ์ ์ค ํ ๋ช
์ด ์ฝ๊ฐ์ ๋น์ ๋น์ถ ์ ์์ต๋๋ค. x
๊ฐ ํธ์ถ๋์ด ์ค๋ฒ๋ก๋ฉ ์๋ ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด ์ด๋ป๊ฒ ๋ฉ๋๊น?
์์์ @carlobaldassi ๊ฐ ์ ์ํ ์จ๋ฆฌ์ด์ฑ์ด ์ค์ ๋ก ๋งค์ฐ ์ ์ฉํ๋ค๋ ๊ฒ์ ์์์ต๋๋ค.
import
๊ฐ ๋ชจ๋ ๊ฐ์ฒด๋ฅผ ๋ฐํํ ์ ์๋์ง ๊ถ๊ธํฉ๋๋ค. ๊ทธ๋์ const
๊ฐ ์๊ฑฐ๋ ์๋ ํ ๋น์ผ๋ก ์ง์ ๋ณ์นญ์ ์ง์ ํ ์ ์์ต๋๊น? ์
const Shortname = import ModuleWithLongName
๋์ ์
import ModuleWithLongName
const Shortname = ModuleWithLongName
์ด๊ฒ์ ์๋ก์ด ๊ตฌ๋ฌธ์ด ํ์ํ์ง ์์ผ๋ฉฐ ๊ธฐ์กด ๊ตฌ๋ฌธ ์์์ ์กฐํฉ๋ง ํ์ํฉ๋๋ค. ๋๋ ํ์ฌ import
๊ฐ ์์ ํ ๋ถ์์ฉ์ ์ํด ํธ์ถ๋ "๋ฌธ์ฅ"์ด๋ฉฐ ๊ฐ์น๊ฐ ์๋ค๋ ๊ฒ์ ์๊ณ ์์ต๋๋ค. ํ์๊ฐ ์ด๊ฒ์ ํ์ฉํ์ง ์๋๋ค๋ฉด, ๋๋ import("Module")
๋๋ ์ด์ ์ ์ฌํ ๊ฒ์ ์ ํธํ ๊ฒ์
๋๋ค.
๋ชจ๋์ ๋ณ์นญ์ ์ง์ ํ๋ ์ต์ ์ด ์ข์ ์๋ ์์ง๋ง ์๋ฌด๋ ์ธ๊ธํ์ง ์์ ๋จ์ ์ด ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ฝ๋๋ฅผ ์๋นํ ๊ฐ๋ฆด ์ ์๋ค๋ ๊ฒ์ ๋๋ค. ์ฝ๋ ๋ฆฌ๋์ ๊ด์ ์์ ๋ณด๋ฉด ๋ชจ๋์ ๋ํด ์ค๋ช ํ๋ ์ด๋ฆ์ด ํ๋๋ง ์๋ ๊ฒ์ด ์ข์ต๋๋ค.
๊ทธ๋๋ ์ฐพ์๋ณด๊ธฐ๊ฐ ์ฝ์ง ์๋์? ๋จ์ถ๋ ํ์์ np
for numpy
์ ๊ฐ์ ์ธ๊ธฐ ์๋ ํจํค์ง์ ๋ํด์๋ ํ์คํ๋ ๊ฒ์
๋๋ค.
๋๋ ์ฌ์ ํ numpy
์ ํ์คํ๋ np
๋ณด๋ค๋ $ Arrays
๋ฅผ numpy
๋ก ์ ํธํฉ๋๋ค. numpy
๋ 1950๋
๋ ๋์ค ๋์๊ณผ ์น๋ช
์ ์ธ ์ ์ผ๋ณ ์ฌ์ด์ ๊ต์ฐจ์ฒ๋ผ ๋ค๋ฆฝ๋๋ค.
๋ค์๊ณผ ๊ฐ์ด ์ฝ๊ฒ ์์ฑํ ์ ์์ต๋๋ค.
Base.require("ArgParse")
const ap = Main.ArgParse
์ด๊ฒ์ 1.0์ ๋ํ ๊ตฌ๋ฌธ์ด ํ์ํ์ง ์์ต๋๋ค
์ด์ ๋ํ ๊ตฌ๋ฌธ์ด ์์ด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์, require
๋ฐ const
ํ ๋น์ ํ ์ ์๊ธฐ ๋๋ฌธ์ ๊ทธ๊ฒ ์์ด๋ ์ด ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ require
๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๊ฝค ์ถํ๊ณ ํธ๋ฆฌํ ๊ตฌ๋ฌธ์ด ์๊ธฐ ๋๋ฌธ์ ์ฌ๋๋ค์ด ์ด๋ฆ์ ๋ฐ๊พธ์ง ๋ชปํ๊ฒ ๋ฉ๋๋ค. ๊ทธ๋ค์ด ์ํ๋/ํ์ํ ๋๋ก.
const
์ฌ์ด ํธ๋ฆญ์ ๋งคํฌ๋ก์ ๋ณ์นญ์ ์ง์ ํด์ผ ํ ๋ ๋ถ์กฑํฉ๋๋ค. ์ด๊ฒ์ด ์ ๊ฐ ํ๋ ๋ฐฉ๋ฒ์ด๋ฉฐ ์์๋ด๋ ๋ฐ ์๊ฐ์ด ์ข ๊ฑธ๋ ธ์ต๋๋ค.
julia> macro foo(a, b, c)
a, b, c
end
<strong i="8">@foo</strong> (macro with 1 method)
julia> macro f(args...)
Expr(:macrocall, Symbol("@foo"), args...) |> esc
end
<strong i="9">@f</strong> (macro with 1 method)
julia> <strong i="10">@f</strong> 1 2 3
(1,2,3)
ImportMacros.jl์์ ๋ค์์ ๊ตฌํํ๊ณ ์์ต๋๋ค.
<strong i="15">@from</strong> Foo.Bar use foo as f
<strong i="18">@from</strong> Foo.Bar use <strong i="19">@foo</strong> as @f
์ฐธ์กฐ: https://github.com/fredrikekre/ImportMacros.jl/pull/3
@Ismael-VC
๋ ธ๋ ฅํ๋ค
<strong i="7">@eval</strong> const $(Symbol("@foo")) = $(Symbol("@bar"))
์ด๊ฒ์ ๋ ๋ชป์๊ฒผ์ง๋ง, ๋งคํฌ๋ก๋ฅผ ๋ก์ปฌ์์ ์ ์ํ๋ ๊ฒ๋ณด๋ค ์งง๊ณ ๋ ๋ช ํํฉ๋๋ค.
@TotalVerb ๋์์ ์ฃผ์ ์ ๋ค์ ํ ๋ฒ ๊ฐ์ฌ๋๋ฆฝ๋๋ค!
Julia + ImportMacros์์ ๋๋ฝ๋ ์ ์ผํ ๊ธฐ๋ฅ์ ๋ชจ๋์ ๋ณ์นญ์ ์ง์ ํ๋ ๊ฒ๊ณผ ์ด๋ฌํ ๋ชจ๋์์ ๊ฐ๋ณ ์์ ๊ฐ์ฒด์ ๋ณ์นญ์ ์ง์ ํ๊ณ ๋ณ์นญ ์์ด ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ๊ฐ์ ธ์ค๋ ๊ฒ์ ํผํฉํ๋ ๊ฒ์ ๋๋ค.
<strong i="9">@from</strong> Foo.Bar as B use foo as f, <strong i="10">@bar</strong> as <strong i="11">@b</strong>, baz
๋๋ from
์์ด :
import Foo.Bar as B: foo as f, <strong i="17">@bar</strong> as <strong i="18">@b</strong>, baz
import B = Foo.Bar: f = foo, <strong i="21">@b</strong> = <strong i="22">@bar</strong>, baz
๋ง์ง๋ง ๊ฒ์ ๋งคํฌ๋ก๋ก๋ ๋ถ๊ฐ๋ฅํ ๊ฒ ๊ฐ์ต๋๋ค:
julia> parse("<strong i="26">@from</strong> Foo.Bar as B use foo as f, <strong i="27">@bar</strong> as <strong i="28">@b</strong>, baz")
:(<strong i="29">@from</strong> Foo.Bar as B use foo as (f,@bar(as,(@b(),baz))))
julia> parse("<strong i="30">@import</strong> Foo.Bar as B: foo as f, <strong i="31">@bar</strong> as <strong i="32">@b</strong>, baz")
:(<strong i="33">@import</strong> Foo.Bar as B:foo as (f,@bar(as,(@b(),baz))))
julia> parse("<strong i="34">@import</strong> B = Foo.Bar: f = foo, <strong i="35">@b</strong> = <strong i="36">@bar</strong>, baz")
ERROR: ParseError("unexpected \"=\"")
in #parse#310(::Bool, ::Bool, ::Function, ::String, ::Int64) at .\parse.jl:184
in (::Base.#kw##parse)(::Array{Any,1}, ::Base.#parse, ::String, ::Int64) at .\<missing>:0
in #parse#311(::Bool, ::Function, ::String) at .\parse.jl:194
in parse(::String) at .\parse.jl:194
์ ์๋ ๋ชจ๋ ๊ตฌ๋ฌธ์ด ์ค๋ฅ์ด๊ฑฐ๋ ์์ ํ ๋์ผ์ค์ด๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ์ค์ ๋ก 1.0์ ๋ํด ๊ฒฐ์ ํ ํ์๊ฐ ์์ต๋๋ค.
์๋ ๋ชจ๋์ด REPL์์ reload("...")
์ ๊ฐ์ด ์ฌ์ ์๋๋ฉด ๋ชจ๋ ๋ณ์นญ์ ์ด๋ป๊ฒ ๋ฉ๋๊น? const M = MyModule
์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํ๋ฉด M
๋ ๋ค์ ๋ก๋ํ ํ์๋ ์ฌ์ ํ ์ด์ ๋ชจ๋์ ์ฐธ์กฐํ๋ฏ๋ก MyModule
MyModule.name
์ก์ธ์คํ ์ ์์ง๋ง ์ก์ธ์คํ ์๋ ์์ต๋๋ค. M.name
.
์ด ๊ฒฝ์ฐ ๋ณ์นญ ๊ตฌ๋ฌธ์ const M = Module
์ ๋ํ ๋ฌธ๋ฒ์ ์คํ ์ด์์ด์ด์ผ ํ์ง๋ง ๋์ M
๊ฐ ํญ์ MyModule
์ ๋์ผํ ๊ฒ์ ์ฐธ์กฐํด์ผ ํฉ๋๋ค.
์ด๋ ๊ฒ ํ๋ฉด ๊ฐ๋ฐ ์ค์ ๋ชจ๋์ ๊ณ์ import
ํ ์ ์์ง๋ง ๋งค๋ฒ ( const
๊ฐ ์๋) ๋ณ์นญ์ ๋ค์ ์ค์ ํ ํ์ ์์ด ๋ ์งง์ ๋ณ์นญ์ ํตํด ์ฐธ์กฐํ ์ ์๊ธฐ ๋๋ฌธ์ REPL ์ํฌํ๋ก๊ฐ ๋จ์ํ๋ฉ๋๋ค. reload
.
ํ์ฌ reload
์ด ์ ๊ฑฐ๋์์ผ๋ฏ๋ก ์ด ๋ฌธ์ ๋ ๋ ์ด์ ์ ์ฉ๋์ง ์์ต๋๋ค.
์ด๊ฒ์ include
์๋ ์ ์ฉ๋ฉ๋๋ค. ์๋๋ฉด ์ ๊ฐ ๋์น๊ณ ์๋ ๊ฒ์ด ์์ต๋๊น? ์ผ๋ฐ์ ์ผ๋ก ๋ชจ๋์ ์ฌ์ ์ํ ๋ import
ed ๋ชจ๋ ์ด๋ฆ์ ์ ์ ์๋ฅผ ์ฐธ์กฐํ๊ณ ํ ๋น์ ์ํด ์ ์๋ ๋ณ์นญ์ ์ด์ ์ ์๋ฅผ ์ฐธ์กฐํ์ง ์์ต๋๊น?
์๋์, ๊ทธ๊ฒ์ ๊ฑฑ์ ํ ํ์๊ฐ ์์ต๋๋ค. ์ผ๋ฐ import
๋ฅผ ํฌํจํ์ฌ ๋ชจ๋์ด ์ฌ์ ์๋ ๋ ๊ฐ์ ธ์จ ์ด๋ฆ์ ์ ๋ ๋ณ๊ฒฝ๋์ง ์์ต๋๋ค. ๋ณ๊ฒฝ๋ ์ฌํญ์ ๋ค์ ๊ฐ์ ธ์ฌ ๊ฒฝ์ฐ ๊ฐ์ ธ์ฌ ๋ชจ๋์
๋๋ค. ๊ฐ์ ธ์จ ๊ฒ์ ํญ์ ๋ฐ์ธ๋ฉ์ด์์ต๋๋ค.
๋ค, ์ ๊ฐ ๋ช
ํํ๊ฒ ํํํ์ง ๋ชปํ์ ์๋ ์์ต๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ์ฝํ
์ธ ๊ฐ ํฌํจ๋ test.jl
ํ์ผ์ ์์ฑํ๋ ๊ฒฝ์ฐ
module Tst
f() = 1
end
๋ก๋ํ๊ณ Tst
๊ฐ์ ธ์ค๊ณ $# Tst
๋ณ์นญ์ ์ ์ํ๋ฉด ๋ชจ๋ ๊ฒ์ด ์ ์์
๋๋ค.
julia> include("test.jl")
Tst
julia> import Tst
julia> const Tst2 = Tst
Tst
julia> Tst.f()
1
julia> Tst2.f()
1
์ด์ test.jl
๋ฅผ ๋ค์์ผ๋ก ๋ณ๊ฒฝํ๋ฉด
module Tst
f() = 2
end
REPL์์ ๋ค์ include
๋ชจ๋๊ณผ ํด๋น ๋ณ์นญ์ด ๋ค๋ฅด๊ฒ ์๋ํฉ๋๋ค.
julia> include("test.jl")
WARNING: replacing module Tst
Tst
julia> Tst.f()
2
julia> Tst2.f()
1
์ด๊ฒ์ด ์ ๊ทธ๋ฐ์ง ์์ง๋ง import Tst as Tst2
์ ๊ฐ์ ๋ณ์นญ์ ๋ง๋ค ๋ ์ด๋ฐ ์ผ์ด ๋ฐ์ํด์๋ ์ ๋๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋๋ ์ด๊ฒ์ 0.6.2์์ ํ ์คํธํ๊ณ ํ์ฌ๋ก์๋ 0.7์์ ํ ์คํธํ ์ ์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ด ์ฌ์ ํ ์ฌ์ค์ด๋ผ๋ฉด ์ง๊ธ์ ํ์ง ์์ต๋๋ค.
๋น์ ์ ๊ทธ๊ฒ์ ์ ํ ์์
ํ์ง ์์ต๋๋ค. ํฌํจํ๋ ๋ชจ๋์ ์ด๋ฏธ ๋ฒ์์ ์ ์๋์ด ์์ต๋๋ค. import
์(๋) ์๋ํ์ง ์์ต๋๋ค.
์ฌ์ค์ด์ง๋ง ์ด๊ฒ์ด ์์ ์ด ์๋๋๋ค. ์์ ์ ๊ฐ์์ import Tst as Tst2
์ ๊ฐ์ ์์
์ ์ํํ ๋ ์ผ์ด๋๋ ์ผ์
๋๋ค. ๊ทธ๋ฐ ๋ค์ ์ด ๋ช
๋ น๋ฌธ์ ์๋ํ์ง ์๋ ๊ฒ์ด ์๋๋ผ ๋ณ์นญ์ ๋ง๋ญ๋๋ค.
์ด ๋ณ์นญ์ด const Tst2 = Tst
์ฒ๋ผ ์๋ํ๋ ๊ฒฝ์ฐ Tst
๋ชจ๋์ ์ฌ์ ์ํ๋ฉด ๋ณ์นญ์ด ๋ชจ๋์ ์ด์ ๋ฒ์ ์ ๊ฐ๋ฆฌํต๋๋ค. ์ด๊ฒ์ ์ด๋ค ๊ฒฝ์ฐ์๋ ๋ฐ๋์งํ์ง ์์ต๋๋ค. ๋ณ์นญ์ Tst
์ ์ ๋ฒ์ ๋ ๊ฐ๋ฆฌ์ผ์ผ ํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ์ฌ์ฉ์๊ฐ ๋ณ์นญ์ ๋ค์ ์ค์ ํด์ผ ํฉ๋๋ค. ๊ทธ๋ฌ๋ ํ์์ ๊ฒฝ์ฐ ์ฌ์ค์ ํ์ง ์๊ณ ์ด์ ๋ณ์นญ์ ์ฌ์ฉํ๋ฉด ์ด์ ๋ชจ๋์ ๊ฐ๋ฆฌํค๋ ๋์ ์ค๋ฅ๊ฐ ๋ฐ์ํด์ผ ํฉ๋๋ค.
๊ทธ๊ฒ์ด ์ ์ ์ผ๋ก ์์ ์
๋๋ค. ๋ชจ๋ ์ ์๊ฐ ์๋ import
์ ํจ์๋ฅผ ์ถ๊ฐํ๋ ๋ฌธ์ ์
๋๋ค. ๊ทํ์ import
๋ ์๋ํ์ง ์์ผ๋ฉฐ ์ ๊ฑฐํ ํ ์ฝ๋์ import
๋๋ using
๊ฐ ๋ ์ด์ ์์ผ๋ฏ๋ก ์ด ๋ฌธ์ ์ ๊ด๋ จ์ด ์์ต๋๋ค. ๋ชจ๋์ด import
์ ๋์ผํ ๋ฒ์์ ์ ์๋์ง ์๋๋ก ๋ณ๊ฒฝํ์ญ์์ค.
import Tst as Tst2
๋ ํด๋น ์ด๋ฆ์ ๋ฐ์ธ๋ฉ๋๋ ํญ๋ชฉ์ ๊ด์ ์์ import Tst
์ ๋์ผํ๊ฒ ์๋ํฉ๋๋ค. ์ด๋ ํญ์ ๋ฐ์ธ๋ฉ์ด๋ฉฐ ์ํ๋ ๋ง๋ฒ์ด ์๋๋๋ค. ์ด๊ฒ์ ๋ชจ๋์ ์ ์ํ ๋ ๋ณ์นญ์ ์ถ๊ฐํ๋ ๊ฒ์ด ์๋๋๋ค .
๋ค๋ฅธ ์์ผ๋ก ๋งํ๋ฉด ์ฝ๋๋ ๊ธฐ๋ณธ์ ์ผ๋ก
a = Ref(1) # include
a = a # import
b = a # alias
a = Ref(2) # include again
๊ทธ๋ฆฌ๊ณ a
๊ฐ a = a
์ ์ํด ๋ฐ์ธ๋ฉ๋์ง ์๊ธฐ ๋๋ฌธ์ b = a
์ ๋์์ ๋ํด ๋ถํํ๋ ๊ฒ์ ์๋ฏธ๊ฐ ์์ต๋๋ค. ๋น์ ์ด ๋ณด๋ ๋ชจ๋ ๊ฒ์ ๋์ ์์์ ๊ฐ์ ธ์ค๊ธฐ์ ๊ฐ์ ๋ฒ์์์ ๋ชจ๋์ ์ ์ํ๋ ๋ถ์์ฉ(์: a = a
๋ฐ a = Ref(...)
๊ฐ์ ๋ฒ์)์
๋๋ค.
์ข์ต๋๋ค. ์ด๋ค ์ํฉ์์๋ ํ ๋น์ ์ํด ์ ์๋ ๋ณ์นญ์ด ์์๋๋ก ์๋ํ์ง ์๋๋ค๋ ์ ์ ์ง์ ํ๊ณ ์ถ์์ต๋๋ค. ์ด์ฉ๋ฉด ๋ด๊ฐ ๋์ ์๋ฅผ ์ ํํ์ ์๋ ์์ต๋๋ค. ๋ชจ๋ ๋ณ์นญ์ ์์ฑํ๋ ๊ตฌ๋ฌธ( import
๊ณผ ๊ด๋ จ์ด ์๋์ง ์ฌ๋ถ)์ ๋ํด ์ด๊ฒ์ด ์ค์ํ ์ ์๋ค๊ณ ์๊ฐํ์ง๋ง ์ง๊ธ ๋น์ฅ์ ์ด๋๊น์ง๋ ๊ฐ์ค์
๋๋ค. ์์ ์ฃ์กํฉ๋๋ค.
์ด ๋ฌธ์ ๋ ์ค๋ซ๋์ ์กด์ฌํด ์์ง๋ง ์ผ๋ถ ํ์ฅ์ ์ฌ์ ํ โโ๋ ผ์๋์ด์ผ ํฉ๋๋ค.
import LongPackage as longpkg
์์ฒด๋ ๊ฝค ํฉ๋ฆฌ์ ์ผ๋ก ๋ณด์ ๋๋ค.
์ถฉ๋. ํ์ฌ๋ก์๋ ์ต๊ณ ์ ์๋ฃจ์ ์ด ๋ฌด์์ธ์ง ๊ถ๊ธํฉ๋๋ค. ๋ด๊ฐ ํ๋ ์ผ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
import LinearAlgebra
const linalg = LinearAlgebra
๋ ๋์ ์๋ฃจ์ ์ด ์์ผ๋ฉด ์์ ํด์ฃผ์ธ์!
๊ทธ๊ฒ์ด ํ์ฌ์ ๊ธฐ์ค์ ๋๋ค.
~ ๊ตฌ๋ฌธ์ ์ด๋ป์ต๋๊น? ๊ฒฐ๊ณผ๋ ๋ชจ๋ฅด๊ฒ ์ง๋ง ๋ฉ์ง ๋ฏธํ์ด ์์ต๋๋ค. ๋ํ ~๋ ๊ทผ์ฌ์น๋ฅผ ๋ํ๋ด๋ ๊ธฐํธ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
import LongPackage ~ lp
@JeffreySarnoff ์คํ ํ ์ธ์ฉ
@StefanKarpinski
์ด๊ฒ์ ๋ด๊ฐ Python์์ ๊ฐ์ฅ ์ ํธํ์ง ์๋ ๊ตฌ๋ฌธ ์ ํ ์ค ํ๋์ ๋๋ค. ์๋ฏธ๋ฅผ ์ฝ๊ฐ ๋ณ๊ฒฝํ๋ ค๋ฉด ์ด๊ธฐ ํค์๋์ ๋ชจ๋ ๊ฒ์ ์์๋ฅผ ๋ณ๊ฒฝํ์ฌ ์ ์ฒด ํ์ ๊ทผ๋ณธ์ ์ผ๋ก ์ฌ๋ฐฐ์ดํด์ผ ํฉ๋๋ค. ๋ค๋ฅธ ์์ ํ๊ณผ ์์ ํ ๋ค๋ฅธ ๊ฒ์ฒ๋ผ ๋ณด์ด๋ฉฐ ๊ฑฐ์ ๋์ผํ ์์ ์ ์ํํ๋ค๋ ์ฌ์ค์ ํ๋ฆฌ๊ฒ ํฉ๋๋ค. ์ด๊ฒ์ ํผ์์ ์ผ๋ก ์์ด์ ๊ฐ์ ๊ฒ์ ๋๋ฌด ๋ง์ ๋น์ค์ ๋๋ ๋์ฐํ ๊ตฌ๋ฌธ ์ค๊ณ์ ๋๋ค.
์ด ๊ฒฝ์ฐ ~๋ Python ๊ตฌ๋ฌธ์ ์์ด์ ๊ฐ์ ์ธก๋ฉด๊ณผ ์๋ฌด ๊ด๋ จ์ด ์์ต๋๋ค. ~์ ๋ณผ ๋ ๋๋ ๊ทผ์ฌ์น์ ์ํ์ ๊ฐ๋ ์ ์ธ์ํ๋ ๊ฒ ๊ฐ์์. 10.001 ~ 10.
๊ทธ๋ฐ ์๋ฏธ์์, ๋๋ ~๊ฐ ์ค์ ๋ก ๊ฝค ์ข๋ค๊ณ ์๊ฐํฉ๋๋ค.
import LongPackage ~ lp
import HugePackage ~ hp
import MassivePackage ~ mp
import GiantPackage ~ gp
:-)
ok -- python์ ์์ด๋ฒ๋ฆฌ์ธ์ -- ์ ๋ ๊ทธ ์ฃผ์์ ์ญ์ ํ๊ฒ ์ต๋๋ค.
lp imports LongPlayingRecords
hp imports HewlettPackard
mp imports MilitaryPolice
gp imports PariForNumberTheory
์๋ ๋ง์์ ์๋ค์๋๋ฐ ์์ฐ์ค๋ฝ๊ฒ as
๋ก ์ฐ๊ณ ์ถ์ดํ์๋ ๋ถ๋ค์ด ๋ง์ ๊ฒ ๊ฐ์์ ๋ค๋ฅธ ๊ฑธ ํ๊ธฐ์๋ ๋๋ฌด ์๋ฑํ ์๊ฐ์ ํ๊ฒ ๋๋ค์. ์ด๊ฒ์ ๋ช
ํํ ๊ตฌ๋ฌธ ์ปจํ
์คํธ์ด๋ฏ๋ก ํค์๋ ๋๋ ๋ค๋ฅธ ๊ฒ์ผ๋ก ์์ฝํ ํ์๊ฐ ์์ต๋๋ค.
์ฌ๋๋ค์๊ฒ ๊ทธ ์๋ฏธ๋ฅผ ์๋ฆฌ๊ธฐ ์ํด _์๋ํ๋_ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด !?!
@์ ํ๋ฆฌ์ฌ๋ ธํ
ํ์ด์ฌ๋ณด๋ค ๋ ์ํ๋ ค๊ณ ํ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด !!!
@neilpanchal Julia๋ ํ์คํ ์ฌ๋ฌ ๋ฉด์์ Python๋ณด๋ค ๋ ๋์ ์ธ์ด๋ฅผ ์๋ํ๋ ์ธ์ด์ ๋๋ค. ๋ค๋ฅธ ํํธ์ผ๋ก, ํ์ด์ฌ์ด ๋ญ๊ฐ๋ฅผ ์ ๋๋ก ํ๊ณ ์๋ ํ์ด์ฌ๊ณผ _๋ค๋ฅด๊ฒ_ ๋๋ ๋ฐฉ์์์ ๋ฒ์ด๋์ง ์๋ ๊ฒ์ ๋ถ๋ช ํฉ๋๋ค. Julia๋ Python ์ผ์ชฝ ๋ฐ ์ค๋ฅธ์ชฝ์์ ๊ตฌ๋ฌธ ๊ท์น์ ์ฐจ์ฉํฉ๋๋ค.
ํ์ด์ฌ as
์ ์ฑํํ์ญ์์ค. ๊ทธ๋ค์ ๊ทธ๊ฒ์ ๋ง์๋ค.
julia> LightGraphs๋ฅผ lg๋ก ๊ฐ์ ธ์ค๊ธฐ
์ค๋ฅ: ๊ตฌ๋ฌธ: ํํ์ ๋ ๋ค์ ์ถ๊ฐ ํ ํฐ "as"
Python์์ ๋ฒ์ด๋๋ as
์ ์ฐฌ์ฑํ๋ ๋ ๋ค๋ฅธ $0.02 ์ฃผ์์
๋๋ค. fwiw, ์ด์ Julia w/some regularity๋ฅผ โโ๋ค์ ์ฌ์ฉํ๊ณ ์์ผ๋ฏ๋ก ์ด๊ฒ์ ๊ทธ๋ฆฌ์ํฉ๋๋ค. Python์ด ์๋๋ผ Clojure( ์ ์ฐธ์กฐ)์์์ ๊ฐ์ด ํจํค์ง ๋ฒ์ ๋ค์์คํ์ด์ค(๋ช
ํ์ฑ์ ์ข์)๋ฅผ ๋จ์ํํ์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํจ์ฌ ๋ ๊ด๋ฒ์ํ๊ฒ ๋ช
์์ ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค. const gf =
ํ์ ์ถ๊ฐํ์ง ์๊ณ import Gadlfy as gf
์ ์ฝ๊ฐ์ ๊ตฌ๋ฌธ ์คํ์ ๊ฐ๋ using
(์: ์์ผ๋์นด๋ ๊ฐ์ ธ์ค๊ธฐ)๋ฅผ ํผํ๋ ๊ฒ์ ์ ํธํ๊ธฐ ๋๋ฌธ์(ํ์ฌ ๋ด๊ฐ ํ๋ ์ผ) ํธ๋ฆฌํ๋ค.
as
๊ตฌ๋ฌธ์ ์ง์ํ๋ ๋ ๋ค๋ฅธ ์๊ฒฌ :heart: ์์ผ๋ก์ Julia ๋ฆด๋ฆฌ์ค์์๋ ์ ๋ง ์ด๋ ค์ด ์์
์ด ๋์์ผ๋ฉด ํฉ๋๋ค.
๋๋ ์ด๋ฐ ์ผ์ด ์ผ์ด๋๊ธธ ๋ฐ๋๋ค. ํนํ ๋ธ๋ ์ดํน ์ฒด์ธ์ง๊ฐ ์๋๊ธฐ ๋๋ฌธ์(๋ง๋์?).
๋๋ ์ด๊ฒ์ด ์ด๋ ์์ ์ ๊ตฌํ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ง๋ง(์๊ฐ์ด ํ๋ฝํ๋ค๋ฉด ์ค์ค๋ก ์๋ํ ๊ฒ์
๋๋ค), ๊ทธ ๋์ ImportMacros
ํจํค์ง ์๋ ์ฌ๊ธฐ์์ ์์ฒญํ ๊ฑฐ์ ๋ชจ๋ ๊ธฐ๋ฅ์ด ์์ต๋๋ค(๋ฌธ์๊ฐ ๋๋ฝ๋์์ง๋ง) :
<strong i="8">@import</strong> ModuleA as ma
<strong i="9">@using</strong> ModuleB as mb
<strong i="10">@from</strong> ModuleC use long_function_name as func
<strong i="11">@from</strong> Module use <strong i="12">@macroname</strong> as <strong i="13">@alias</strong>
ImportMacros
.jl์ ๋ํด ๋ชฐ๋๋๋ฐ ์ง์ ํด์ฃผ์
์ ๊ฐ์ฌํฉ๋๋ค. ์ด ๊ธฐ๋ฅ์ด ํจํค์ง์ ์กด์ฌํ๋ค๋ฉด ๊ธฐ๋ณธ ์ธ์ด๋ก ํฌํจํ๋ ๊ฒ์ด ๊ทธ๋ ๊ฒ ์ค์ํ์ง ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋๋ ์ฌ์ ํ ์ด๊ฒ์ด ์ธ์ด๋ก ์์ผ๋ฉด ์ข์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
๊ฐ์ ธ์ค๊ธฐ๋ ๊ฑฐ์ _ํญ์_ ๊ธฐ๋ณธ ์ธ์ด ๊ท์น์ ๋ฐ๋ฅด๊ณ ๋งคํฌ๋ก๋ก ๋ํํ๊ฑฐ๋ ํจํค์ง ์ข
์์ฑ์ ์ถ๊ฐํ์ง ์์ผ๋ ค๋ IMO์
๋๋ค. import
... const
๋ ๊ธฐ๋ณธ ์ธ์ด๊ฐ 2๋จ๊ณ ํ๋ก์ธ์ค๋ฅผ ๋ ๊ฐ๊ฒฐํ๊ฒ ๋ง๋ค๊ธฐ ์ํด ํ์ฅ๋์ง ์๋ ๊ฒฝ์ฐ์๋ (ํนํ) ํด๋ฐฑํ๊ธฐ์ ๋ ์ข์ต๋๋ค.
ํนํ ๋ณด๊ธฐ์ ์ข ์ง๊ทธ๋ฝ๋ค.
using ImportMacros
<strong i="6">@using</strong> OtherPackage as ...
<strong i="7">@using</strong> ThirdPackage as ...
๋งคํฌ๋ก๊ฐ ์๋ using
๊ฐ ํ์ด๋์ค๊ธฐ ๋๋ฌธ์
๋๋ค.
import
๊ฐ ์ค์ ๋ก ๋ฒ์์ ๊ฐ์ ธ์ค๋ ๋ชจ๋/ํจ์/๋ฌด์์ด๋ ๋ฐํํ๋ ๊ฒ์ ์ด๋ป์ต๋๊น?
๊ทธ๋ฌ๋ฉด ์ธ ์ ์์ต๋๋ค.
lg = import LightGraphs
baz = import foo.bar
baz, kit, kat = import foo : bar1, bar2, bar3
๋ณ๊ฒฝํด์ผ ํ ์ ์ผํ ๊ฒ์ ๊ฐ์ ธ์ค๊ธฐ ๊ธฐ๋ฅ์
๋๋ค.
@DhruvaSambrani ์ ์๋ฃจ์ ์ Julia์ ์ ๋ฐ์ ์ธ "๋ชจ๋ ๊ฒ์ด ํํ์ ๋๋ค" ์ ๊ทผ ๋ฐฉ์์ ์ ํฉํ๊ธฐ ๋๋ฌธ์ ์ ๋ง ์ข์ํฉ๋๋ค.
์ ์ผํ ๊ฒ์ ์ผ๊ด์ฑ์ ์ํด ๊ฐ์ ธ์ค๊ธฐ ํํ์์ด ์ ์ฒด ์ด๋ฆ์ ๋ฒ์๋ก ๊ฐ์ ธ์ค๋ ๋ถ์์ฉ์ ์ํํด์ผ ํ๋ค๋ ๊ฒ์ ๋๋ค(์ฌํด๊ฐ ์๋ ์๋ ์์). ์ ์ฒด ์ด๋ฆ์ ๊ฐ์ ธ์ค์ง ์๋๋ก ํน์ ์ผ์ด์ค๋ฅผ ์ฌ์ฉํ ์๋ ์์ง๋ง ํน์ ์ผ์ด์ค๋ ์ด์ฒด์ ์ ๋๋ค.
OCaml(์ต๊ณ ์ ๋ชจ๋์ด ์๋ ์ธ์ด!)์์ ๋ค์๊ณผ ๊ฐ์ด ํ ์ ์์ต๋๋ค.
module LG = LightGraphs
์ฌ๊ธฐ์ ์ค์ํ ์ฐจ์ด์ ์ OCaml ํ๋ก๊ทธ๋จ์ผ๋ก ์ปดํ์ผ๋๋ ๋ชจ๋ ๋ชจ๋์ ์ ๊ทํ๋ ์ด๋ฆ์ด ์๋์ผ๋ก ๋ฒ์ ๋ด์ ์๋ค๋ ๊ฒ์ ๋๋ค.
๋ฌผ๋ก import LightGraphs as LG
๋ฅผ ์ฌ์ฉํ๋ฉด "๋ชจ๋ ์ฌ๋"์ด Python์์ ์ด๋ฏธ ์๊ณ ์๋ค๋ ์ด์ ์ด ์์ง๋ง, ๋ด ๊ฐ์ธ์ ์ธ ์ทจํฅ์ ๋ฌธ์ ๊ทธ๋๋ก ํ ๋น์ธ ๊ฒ์ ํ ๋น ๊ตฌ๋ฌธ์ ์ฌ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ๋ซ๋ค๋ ๊ฒ์
๋๋ค.
๋๋ ๋ ๊ด๋ฒ์ํ ๋ณ๊ฒฝ์ "๋ค์์คํ์ด์ค"๋ฅผ ์ ํ์ผ๋ก ๋์
ํ๋ ๊ฒ์
๋๋ค(์ด๋ฏธ ์๋ฃ๋ ๊ฒฝ์ฐ idk). ๊ทธ๋ฐ ๋ค์ import
๋ ๋ชจ๋/๋ฌด์์ด๋ ๋ค์์คํ์ด์ค๋ก ํ์ฅํ๊ณ ๋ค์์คํ์ด์ค๋ฅผ ๋ฐํํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋จ์ํ import mod_name
๋ฅผ ์ํํ๋ฉด ์ ์ญ ๋ฒ์์์ mod_name
๋ค์์คํ์ด์ค๋ฅผ ์ฌ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์ ๋ชจ๋ Julia ์ฝ๋๊ฐ ์์๋ฉ๋๋ค. import๊ฐ ์ ํ ํ ๋น ์์ด ์ฌ์ฉ๋ ๋ mod_name
๋ค์์คํ์ด์ค๋ฅผ ์ ์ญ์์ ์ฌ์ฉํ ์ ์๋๋ก ํ ์ ์๋ค๋ฉด ๊ทธ๊ฒ์ ๋ฌธ์ ๊ฐ ๋์ง ์์ต๋๋ค.
๋๋ ๋จ์ผ ๋ค์์คํ์ด์ค์์ ๋ชจ๋ ํจ์/๋ชจ๋ ๋ฑ์ ๋ฐํํ๋ ์์ ํจ์๊ฐ ๋ ์ ํจ์ import_as_ns(mod_name) :: Namespace
๋ฅผ ์ถ๊ฐํ์ญ์์ค.
Julia์ ์ ๋ฐ์ ์ธ "๋ชจ๋ ๊ฒ์ด ํํ์ ๋๋ค" ์ ๊ทผ ๋ฐฉ์์ ๋ง์ต๋๋ค.
๊ทธ๋ฌ๋ import
๋ฐ using
๋ ๋ถ์์ฉ์ ๋ํด์๋ง ์ต์์ ์์ค์์๋ง ์ฌ์ฉ๋๊ธฐ ๋๋ฌธ์ ํน๋ณํฉ๋๋ค.
๋ง๋ถ์ฌ์, ์ด ๋ฌธ์ ๊ฐ ์ค๋ซ๋์ ๊ณต๊ฐ๋์ด ์๋ค๋ ์ ์ ๊ฐ์ํ ๋ triage์์ ๊ธฐ๊บผ์ด ๊ทธ๊ฒ์ ๋ค์ ๋ฐฉ๋ฌธํ๊ณ ๊ฒฐ์ ์ ๋ด๋ฆด ์ํฅ์ด ์๋์ง ๊ถ๊ธํฉ๋๋ค. ๋๋ ํ์๋ฅผ ์นํธํ ๊ฒ์ด๋ค.
import Foo; const Bar = Foo
๋ ์ฌ์ฉ์๊ฐ ๋ค์์คํ์ด์ค์์ Foo
๋ฅผ ์ ๊ฒฝ ์ฐ์ง ์์ ๋ ์๋ฒฝํ ์๋ฃจ์
์ ์ ๊ณตํฉ๋๋ค.๋๋ ์ด ๋ชจ๋ ์๊ฐ์ด ์ง๋ ํ์๋ ์ฌ์ ํ ์ด๊ฒ์ ๊ทธ๋ฆฌ์ํ๋ค๊ณ ๋งํ ๊ฒ์ ๋๋ค(๋ด ์์ ์ ์ฝ๋์์๋ ImportMacros๋ฅผ ์ฌ์ฉํฉ๋๋ค).
๋๋ ๋น์ ์ด ์ฐ๊ณ ์๋ ์ปคํผ์ ์คํ์ผ์ด ์ด๊ฒ์ ๋ํ ํ์(๋๋ ์๋ง)์ ์ํฅ์ ๋ฏธ์น๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ ๋ ML์ด๋ ๊ณผํ ์ฝ๋๋ฅผ ์์ฑํ ๋ ๊ทธ๊ฒ์ ๊ทธ๋ฆฌ์ํ์ง ์๋๋ค๋ ๊ฒ์ ์๊ฒ ๋์์ต๋๋ค. ๊ธด ์ด๋ฆ์ ๊ฐ์ง ์ฌ๋ฌ ํจํค์ง๋ฅผ ์ฌ์ฉํ๋ ๋ค๋ฅธ ์ฝ๋๋ฅผ ์์ฑํ ๋ ImportMacros๋ฅผ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํฉ๋๋ค.
ImportMacros๋ก ์ถฉ๋ถํฉ๋๋ค. ๊นจ๋ํด ๋ณด์ด์ง ์๋๋ค๋ ์๊ฒฌ์ ๋์ํฉ๋๋ค.
๋ํ ํธ์ง๊ธฐ์์ ์๋ ํฌ๋งทํฐ๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ ธ์ค๊ธฐ๋ฅผ ์ ๋ ฌํ ์ ์๋ ๋ ์ ๊ณ ๋ํ๊ณ ์์ต๋๋ค. ํ์ง๋ง @using
๋ก ๋ฌด์์ ํด์ผ ํ ์ง ์ ์ ์์ ๊ฒ ๊ฐ์ต๋๋ค...
๋๋ ๋ํ ์ด๊ฒ์ด ํฐ ๋ฌธ์ ๊ฐ ์๋๋ฉฐ ImportMacros๋ก ์ถฉ๋ถํด์ผ ํ๋ค๋ @kmsquire ์ ๋์ํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ค ๋ฐฉ๋ฒ์ด๋ ๋ค์ ๋ํ๋์ง ์๋๋ก ๋ฌธ์ํํด์ผ ํฉ๋๋ค.
๊ทธ๋๋ m=import Module
์คํ์ด ๋จน๊ณ ์ถ์ง๋ง ๐
๋ด ๋ฉ์์ง๊ฐ ์ด๊ฒ์ด ํฐ ๋ฌธ์ ๊ฐ ์๋๋ผ๋ ๊ฒ์ ์์ํ๋ ค๋ ์๋๋ ์์์ต๋๋ค.
๋๋ ์ฌ์ ํ ์ด๊ฒ์ ๋ํ ๊ตฌ๋ฌธ์ ์ ํธํฉ๋๋ค.
ImportMacros๋ก ์ถฉ๋ถํฉ๋๋ค. ๊นจ๋ํด ๋ณด์ด์ง ์๋๋ค๋ ์๊ฒฌ์ ๋์ํฉ๋๋ค.
๋์ํ๋ค. ๋ํ:
using ImportMacros
<strong i="8">@using</strong> OtherPackage as ...
์ฃผ์ด์ง ์คํฌ๋ฆฝํธ๊ฐ ํ๋ฆ์ ๋ณต์กํ๊ฒ ๋ง๋ค๊ณ ๊ฐ๋ฅด์นจ์ ์ด์ ์ ์ด๋์ํค๊ธฐ ๋๋ฌธ์ ์ฃผ์ด์ง ์คํฌ๋ฆฝํธ๊ฐ ์ ์ด๋ฌํ ๋ถ์ผ์น๋ก ์์ํ๋์ง ์ค๋ช ํ๊ธฐ ์ํด ์ ๊ท ์ด๋ฏผ์๋ ํ๋ก๊ทธ๋๋ฐ ์ด๋ณด์์๊ฒ ์ธ์ด๋ฅผ ์ ์ํ ๋ ์ฝ๊ฐ ์ง์ฆ์ด ๋ฉ๋๋ค.
๋ ๋ค ํน๋ณํ ๊ตฌ๋ฌธ์ ๋ณด์ฅํ๊ธฐ ์ํด ์ค์ ์ฝ๋์์ ์์ฃผ ์ฌ์ฉ๋์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
์ฌ๋๋ค์ด ์ค์ ์ฝ๋์์ ImportMacros๋ฅผ ๋ง์ด ์ฌ์ฉํ์ง ์๋ ์ด์ ๋ ์ ์ถฉ์ ๋๋ฌธ์ผ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ๊ฑฐ์ ๋งค๋ฒ import ... as ...
๋ฅผ ์ฌ์ฉํ์ง๋ง ์ด๋ฅผ ์ํํ๊ธฐ ์ํด ๋จผ์ ๋ค๋ฅธ ํจํค์ง๋ฅผ ๊ฐ์ ธ์์ผ ํ๋ ๋น์ฉ์ ๋ค์ง ์์ ๊ฒ์
๋๋ค. ์ถ๊ฐ ์ข
์์ฑ ์ด์์ผ๋ก "๋๋" ์ธก๋ฉด์์๋ ์ํฅ์ ๋ฏธ์นฉ๋๋ค(๊ทธ๋ฆฌ๊ณ ์ผ๋ถ ์ฌ๋๋ค์ ์ฝ๋๊ฐ ๋งค๋๋ฝ๊ฒ ๋ณด์ด๊ธฐ๋ฅผ ์ข์ํฉ๋๋ค(ํนํ python ๋๋ Julia์์) ๐คทโโ๏ธ , ์ด using/@using
๋ ์คํ๋ ค " hacky'์ ๋ถ์๊ธฐ๋ฅผ ์คํฌ๋ฆฝํธ ๋์
์).
์, "ImportMacros๋ก ์ถฉ๋ถํฉ๋๋ค". ์ ๋ง ์ฌ์ฉํ๊ณ ์ถ์ ๋ถ๋ค์ ์ํด. ๊ทธ๋ฌ๋ ๊ทธ๊ฒ์ ์ค์ํ ๋ฌธ์ ๊ฐ ์๋๋ฉฐ ์ฌ๋๋ค์ ๊ทธ๊ฒ ์์ด๋ ์ผํ ์ ์์ต๋๋ค. ๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ , ๋๋ ์ผ๋ฐ์ ์ผ๋ก ์ธ์ด์ ๊ตฌ๋ฌธ์ด ๊ณ ์ ๋๋๋ก ๋ง๋๋ ๊ฒ์ด ์ผ๋ฐ์ ์ผ๋ก ์ด๋ฌํ ์์ ๊ฒ๋ค์ด๋ผ๊ณ ๊ฐ๋ ฅํ๊ฒ ๋ฏฟ์ต๋๋ค. ๋ฐ๋ผ์ ์ด ๊ดด๋ฌผ ์ค๋ ๋๋ ๊ธฐ๋ณธ์ ๋ํ ์ง์์ ์ถ๊ฐํฉ๋๋ค.
import ... as ...
๋ ํ์คํ ๊ฐ์น๊ฐ ์๋ ๊ตฌ๋ฌธ์ ์คํ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์ดํดํ๊ณ ์ค๋ช
ํ๊ธฐ๊ฐ ์ ๋ง ์ฝ๊ณ ํจํค์ง ์ด๋ฆ์ด ๋ค์ ๊ธด Julia์ ๊ฐ์ ์ธ์ด์์ ํนํ ์ ์ฉํฉ๋๋ค(๋ถ๋ช
ํ ์ด๊ฒ์ด ์ค์ํฉ๋๋ค. ์ฌ๋๋ค์ด using ...
ํ๊ณ ์ถ์ง ์๋ค๋ ๊ฐ์ ํ์์๋ง).
๊ทธ๋ฆฌ๊ณ ํ์ด์ฌ์ด ๊ทธ๊ฒ์ ๋จผ์ ๊ตฌํํ๋ค๋ ์ฌ์ค์ ์ค์ ๋ก ๊ด๋ จ์ด ์์ด์ผ ํฉ๋๋ค. Julia๋ ๋ค๋ฅธ ์ธ์ด์ ๊ฑฐ๋ฆฌ๋ฅผ ๋๊ฑฐ๋ ๊ณ ์ ํ ์ ์ฒด์ฑ์ ๊ฐ์กฐํ๊ธฐ ์ ์ ์ต์์ ๊ตฌ๋ฌธ์ ๊ฐ๋๋ก ๋ ธ๋ ฅํด์ผ ํฉ๋๋ค.
์ด๊ฒ์ ๋ํ ๊ตฌ๋ฌธ๊ณผ ์ธ๊ธฐ ์๋ ๋ชจ๋์ ๋ํ ๊ท์น์ ๊ฐ๋ ๊ฒ(๋๋ ๊ทธ๊ฒ์ด ํญ์ import numpy as np
๋ฐ import matplotlib.pyplot as plt
์ธ ๋ฐฉ๋ฒ์ ์๊ฐํ๊ณ ์์ต๋๋ค)์ using SuchAndSuch
๋ฅผ ์ํํ๊ณ export
์ ์์กดํ๋ ๊ฒ์ ๋ํ ๊ฐ๊ฒฐํ ๋์์ ์ ๊ณตํฉ๋๋ค.
@DominiqueMakowski :
์ฃผ์ด์ง ์คํฌ๋ฆฝํธ๊ฐ ์ด๋ฌํ ๋ถ์ผ์น๋ก ์์ํ๋ ์ด์ ๋ฅผ ์ค๋ช ํ๊ธฐ ์ํด ์ ๊ท ์ด๋ฏผ์ ๋๋ ํ๋ก๊ทธ๋๋ฐ ์ด๋ณด์์๊ฒ ์ธ์ด๋ฅผ ์ ์ํฉ๋๋ค.
์ ๊ทธ๊ฒ์ด ๋ถ์ผ์น๋ผ๊ณ ์๊ฐํ๋์ง ์ดํด๊ฐ ๋์ง ์์ต๋๋ค. ๋จ์ํ ๋ค์์คํ์ด์ค ๊ด๋ฆฌ์ผ ๋ฟ์ธ๋ฐ, ์ด๋ ๋๊ท๋ชจ ํ๋ก๊ทธ๋๋ฐ์ ์ผ๋ฐ์ ์ธ ๋ถ๋ถ์ ๋๋ค.
๋ํ ๋ชจ๋์ ์ด๋ฆ์ ๋ฐ๊พธ๋ ๊ฒ์ Julia๋ฅผ ์ฒ์ ์ ํ๋ ์ฌ๋๋ค์ด ์ฒ์ ์ ํ๋ ์ผ์ด ์๋ ์๋ ์์ต๋๋ค.
์ ์ค์ผ์ด์ค๊ฐ ์๋ค๋ ๋ง์ ์๋์ง๋ง, ์์ ์ ํค์๋๋ฅผ ์ ๋นํํ๋ ๊ฒฝ์ฐ๋ ๋๋ฌผ๋ค. ํ์ฌ using ImportMacros
๋ฅผ ๊ฒ์ํ๋ฉด Github์์ <10๊ฐ์ ๊ณ ์ ํ ๊ฒฐ๊ณผ๊ฐ ํ์๋ฉ๋๋ค.
๋๋ ๊ฑฐ์ ๋งค๋ฒ import ... as ...๋ฅผ ์ฌ์ฉํ๊ณ ์ถ์ง๋ง ๊ทธ๊ฒ์ ์ํํ๊ธฐ ์ํด ๋จผ์ ๋ค๋ฅธ ํจํค์ง๋ฅผ ๊ฐ์ ธ์์ผ ํ๋ ๋น์ฉ์ ๋ค์ง ์์ ๊ฒ์ ๋๋ค.
์ด๋ ๊ฒ ํ๋ฉด ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ด ๋ชจ๋ ์ค์ด๋ญ๋๋ค ImportMacros
๋๋ ์ถ๊ฐ ๊ธฐํธ( import LongFoo; const Foo = LongFoo
)์ ๊ฐ์ ๊ฒฝ๋ ํจํค์ง๋ฅผ ์ฌ์ฉํ๋ ๋ฐ ๋๋ (๋งค์ฐ ์ฌ์ํ) ๋น์ฉ์ด ์ด์ ์ ๋๋ฆด ๊ฐ์น๊ฐ ์๋ค๋ฉด ์ด์ ์ ๊ทธ๋ค์ง ํฌ์ง ์์ ์ ์์ต๋๋ค. .
Julia๋ ๋ค๋ฅธ ์ธ์ด์ ๊ฑฐ๋ฆฌ๋ฅผ ๋๊ฑฐ๋ ๊ณ ์ ํ ์ ์ฒด์ฑ์ ๊ฐ์กฐํ๊ธฐ ์ ์ ์ต์์ ๊ตฌ๋ฌธ์ ๊ฐ๋๋ก ๋ ธ๋ ฅํด์ผ ํฉ๋๋ค.
์ ์ด๊ฒ์ด ์ด ํ ๋ก ์ ๋๊ธฐ๋ผ๊ณ ์๊ฐํ๋์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
const
ํ ๋น์ด ์ ๋๋ก ์๋ํ์ง ์๋ ๊ฒฝ์ฐ as
๋ฅผ ์ฌ์ฉํ๋ ค๋ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค.
julia> using Distributed
julia> import Future; const future = Future
Future
julia> Future === Distributed.Future # oops, this is what we wanted
false
julia> Future === future # not what we wanted `Future` to mean
true
์, ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ง๋ง ์ด์ํฉ๋๋ค. ๊ทธ๊ฒ์ด ์ข
์ข
ํธ๋ฆฌํ๊ณ ๋๋๋ก ํ์ํ๊ณ import FooBar as FB
๊ฐ ์ผ๋ฐ์ ์ผ๋ก "๊ฐ์ฅ ๋๋์ง ์์" ๊ตฌ๋ฌธ์ ๋์ํ๋ค๋ ์ ์ ๊ฐ์ํ ๋ ์ฐ๋ฆฌ๊ฐ ๋ฐ๋ผ์ผ ํ ๊ฒ ๊ฐ์ต๋๋ค. ์ด ๋ชจ๋ ์๊ตฌ ์ฌํญ์ ๋๊ตฐ๊ฐ๊ฐ ์ด๋ฅผ ๊ตฌํํ๋ PR์ ๋ง๋๋ ๊ฒ์
๋๋ค.
์ฌ๊ธฐ์ ์๋ก์ด Julia ์ฌ์ฉ์๊ฐ ์์ต๋๋ค.
์ ๋ Python๋ ์ฌ์ฉํ์ฌ ์ฃผ๋ก R ๋ฐฐ๊ฒฝ์์ ์์ต๋๋ค. using
์ ๊ฐ์ ๋ก๋ ๋ฉ์ปค๋์ฆ์ด ์ด๋๋ ํจํค์ง ๊ณตํต ์ด๋ฆ ๊ณต๊ฐ์ ๋ํ ๋์ ๊ฒฝํ์ด ์์ต๋๋ค. ์ถฉ๋์ ์ํ์ ํ๋์ด์ง๋ง ๊ฐ๋
์ฑ ์ธก๋ฉด์์ ๊ฐ ๋ฉ์๋์ ๋ชจ๋์ ๋ํด ๋์์์ด ์๊ฐํด์ผ ํ๋ ์ ์ ์ ๋ถ๋ด์
๋๋ค.
์ด ๊ตฌ๋ฌธ์ ์ถ๊ฐํ๋ ๊ฒ์ด ์ผ๋ง๋ ๋ณต์กํ์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ๋ด๋น๋ ๊ฐ๋ฅํ๊ฐ์?
์๋ง๋ ์ฝ์ง ์์ ๊ฒ์ ๋๋ค. Scheme์ ์์ฑ๋ ํ์ ์ฝ๋๋ฅผ ํดํนํ๊ณ AST๋ฅผ ํตํด ๋ณ๊ฒฝ ์ฌํญ์ ์ฐ๊ฒฐํ์ฌ ์ผ๋ถ C ์ฝ๋๋ ๊ฑด๋๋ฆด ์ ์์ต๋๋ค.
์ฌ๋ฌ ๋ชจ๋์์ ํจ์ ์ด๋ฆ ์ถฉ๋์ ํผํ๊ธฐ ์ํ ์ข์ ๊ธฐ๋ฅ์ ๋๋ค.
slack์ ๋ํ ํ ๋ก ์์ ๋ช ๊ฐ์ง ์๊ฐ์ ์ถ๊ฐํฉ๋๋ค.
์ด๊ฒ์ด ์ฌ๋๋ค์ด ํจ์ ์ด๋ฆ์ ์ ํํ๊ณ ์ฌ๋ฐ๋ฅธ ํจ์์ ๋ฉ์๋๋ฅผ ์ ์ ํ๊ฒ ์ถ๊ฐํ๋ ๋ฐ ์ฃผ์๋ฅผ ๋ ๊ธฐ์ธ์ด๊ฒ ๋ง๋ค์ง ๊ถ๊ธํฉ๋๋ค. ์๋ฅผ ๋ค์ด,
numpy.sin
sympy.sin
๋ค๋ฅธ ํจ์๋ ์ซ์ ๋ฐ ๊ธฐํธ ์ ๋ ฅ ๋ชจ๋์ ๋ํด ์๋ํ๋๋ก ํ๋ ค๋ฉด ๋ ๊ฐ์ง ๋ฒ์ ์ ํจ์๋ฅผ ๊ตฌํํด์ผ ํ๋ ํ์คํ ๋ฐฉ๋ฒ์ ๋๋ค. ์ด๋ฌํ ๋ค์์คํ์ด์ค๊ฐ julia์์๋ ํธ์์ฑ์ผ๋ก ์ธํด ๋ณดํธํ๋๋ค๋ฉด ๋ง์ ์ฝ๋ ์ฌ์ฌ์ฉ์ ๋์น ์ ์์ง ์์๊น์? ์ฆ, Lyndon์ด https://www.oxinabox.net/2020/02/09/whycompositionaljulia.html ์ ๊ฒ์ํ ๊ฒ์ฒ๋ผ " ์ด๋ ์ฌ๋๋ค์ด ํจ๊ป ์ผํ๋๋ก ์ฅ๋ คํฉ๋๋ค "๋ผ๋ ๋ฉ์์ง๋ฅผ ๋ ์ค ์ ์์ต๋๋ค.
@baggepinnen ๋๋ ์ด๊ฒ์ด ๊ทธ ์ ์์ ์๋ฌด๊ฒ๋ ๋ฐ๋์ง ์๋๋ค๊ณ ์๊ฐํฉ๋๋ค.
Julia์์ ๋ค๋ฅธ ๋ชจ๋์์ ๊ตฌํ๋ ๋ฉ์๋๋ ๋ ๋ฉ์๋๋ฅผ ๋์ผํ ๋ค์์คํ์ด์ค๋ก ๊ฐ์ ธ์ด์ผ๋ก์จ ๋ณํฉ๋์ง ์์ต๋๋ค.
julia> module Foo
export sin
sin(s::String) = uppercase(s)
end
Main.Foo
julia> sin(1)
0.8414709848078965
julia> using .Foo
WARNING: using Foo.sin in module Main conflicts with an existing identifier.
julia> sin("wat")
ERROR: MethodError: no method matching sin(::String)
Closest candidates are:
sin(::BigFloat) at mpfr.jl:727
sin(::Missing) at math.jl:1197
sin(::Complex{Float16}) at math.jl:1145
...
Stacktrace:
[1] top-level scope at REPL[4]:1
[2] run_repl(::REPL.AbstractREPL, ::Any) at /build/julia/src/julia-1.5.1/usr/share/julia/stdlib/v1.5/REPL/src/REPL.jl:288
julia> Foo.sin("wat")
"WAT"
์ด๊ฒ์ด ์๋ํ๋ ค๋ฉด ์๋ ํจ์์ ๋์คํจ์น๋ฅผ โโ๋ช ์์ ์ผ๋ก ์ถ๊ฐํด์ผ ํฉ๋๋ค.
julia> Base.sin(s::String) = Foo.sin(s)
julia> sin("wat")
"WAT"
๋ด๊ฐ ๋งํ ์ ์๋ ํ, ๋ชจ๋ ์จ๋ฆฌ์ด์ฑ์ด ํจ์๊ฐ ๋์คํจ์น๋๋ ๋ฐฉ์์ ๋ณ๊ฒฝํ ์ ์๋ ๋ฐฉ๋ฒ์ ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ์์งํ ๋งํด์, ๊ฐ์ ์ด๋ฆ์ ๊ฐ์ง ์ผ๋ถ ํจ์๋ ๋ณ๋์ ๋ค์์คํ์ด์ค์ _์กด์ฌํด์ผ ํฉ๋๋ค_. ์ซ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ find_delta
ํจ์๋ ํ์ผ diff ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ find_delta
์ ๊ด๋ จ์ด ์๋ ์์
์ ์ํํฉ๋๋ค. ์ฝ๋๊ฐ ๋๋ฌด ๋คํ์ฑ์ด ๋์ด ์๋ชป๋ ์
๋ ฅ์์ ์คํํ๋ ๋ฐฉ๋ฒ์ ์ฐพ๊ฒ ๋๋ฉด JavaScript ์์ญ์ ๋ค์ด๊ฐ๊ฒ ๋๋ฉฐ ์๋ฌด๋ ๊ทธ๊ฒ์ ์ํ์ง ์์ต๋๋ค.
@ninjaaron ์์ ์ฐ๋ ค ์ฌํญ์ ์ฝ๊ฐ์ ๋์์ค๋ฅผ ์ ๋ฌํ์ง ๋ชปํ์ ์๋ ์์ต๋๋ค. ๋๋ ์ด ๋ณํ๊ฐ ์ฌ๋๋ค์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ตฌํํ ๋ ์ ํํ๋ ์ ๋ต ์ด์ธ์ ์ด๋ค ๊ฒ๋ ๋ณ๊ฒฝํ๋ ๋ฐ ๊ด์ฌ์ด ์์ต๋๋ค.
Foo
๊ตฌํํ๋ ์ฌ๋์ด ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ๊ณ ๋ฅผ ๋ง๋ฌ์ต๋๋ค.
julia> using .Foo
WARNING: using Foo.sin in module Main conflicts with an existing identifier.
๋จ์ํ import .Foo.sin as sin2
๋ฅผ ์ ํํ๊ฑฐ๋ ์ค์ ๋ก Base.sin
์ ๋ํ ์ ๋์คํจ์น๋ฅผ โโ์ ๊ณตํ๊ณ ์ถ์๋์ง ์ฌ๋ถ๋ฅผ ์๊ฐํ ์ ์์ต๋๋ค. ์ ์์ ์ ๊ทธ๊ฒ๋ค์ ๋จ์ํ ๋ค๋ฅธ ๊ธฐ๋ฅ์ผ๋ก ๊ฐ์ฃผํ๋ ๊ฒ์ด ๋งค์ฐ ์ฌ์์ง๋ฉด, ๊ฐ์ ๊ธฐ๋ฅ์ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ด ์ค์ ๋ก ํ์ํ ์ํฉ์์๋ ์ด๊ฒ์ด ๋๋ฌด ๋๋ฆฌ ํผ์ง ์ ์๋ค๋ ๊ฒ์
๋๋ค. ๊ฐ์ ์ด๋ฆ์ผ๋ก ๋ค๋ฅธ ๊ธฐ๋ฅ์ ๋ค๋ฃจ๋ ๊ฒ์ด ์กฐ๊ธ ๋ ์ด์ํ ํ์ฌ ์ํฉ์ ์ฌ๋๋ค์ด ์๋ก ์ด์ผ๊ธฐํ๊ณ ์ค์ ๋ก ๊ฐ์ ๊ธฐ๋ฅ์ธ์ง ํ์ธํ๊ธฐ ์ํด ์ต์ ์ ๋คํ๋ ์ข์ ๋ถ์์ฉ์ด ์์ต๋๋ค. ๋ฌผ๋ก ๋งค์ฐ ์ ์ฉํ ์ ์๋ ๊ฐ์ ์ด๋ฆ์ ๊ฐ์ง ๋ค๋ฅธ ๊ธฐ๋ฅ์ ๊ฐ์ง ๊ฐ๋ฅ์ฑ์ ๋ํด ๋
ผ์ํ๋ ๊ฒ์ด ์๋๋๋ค. ๋ด ์ฐ๋ ค ์ฌํญ์ด ์ค์ํ์ง ์ฌ๋ถ์กฐ์ฐจ ํ์คํ์ง ์์ง๋ง ๊ณ ๋ ค๋์๋์ง ํ์ธํ๊ธฐ ์ํด ์ ๊ธฐํ ๊ฐ์น๊ฐ ์๋ค๊ณ ์๊ฐํ์ต๋๋ค.
@baggepinnen ๊ทธ๊ฒ์ ์๋ฏธ๊ฐ ์์ผ๋ฉฐ ๊ทธ๊ฒ์ ์ ๊ธฐํ๋ ๋ฐ ์๋ฌด๋ฐ ํด๊ฐ ์์ต๋๋ค. ๋ชจ๋ ์จ๋ฆฌ์ด์ฑ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ์์๊ฒ๋ง ์ํฅ์ ๋ฏธ์น๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ง๋๋ ์ฌ๋๋ค์๊ฒ ํฐ ์ฐจ์ด๋ฅผ ๋ง๋ค์ง ์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๋ชจ๋ ์จ๋ฆฌ์ด์ฑ์ด ๋ ์ฌ์์ง๋ฉด ์ด๋ฆ ์ถฉ๋์ ๋ํด _๋ถํํ๋_ ์ฌ์ฉ์๊ฐ ์ค์ด๋ค ๊ฐ๋ฅ์ฑ์ด ์๋ค๊ณ ์๊ฐํ์ง๋ง ์ด๊ฒ์ด API์ ์์ฒญ๋ ์ํฅ์ ๋ฏธ์น๋ค๋ฉด ๋๋ ๊ฒ์ ๋๋ค.
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์์ฑํ ๋ ์ผ๋ฐ์ ์ผ๋ก Base์ ํจ์์ ๋์คํจ์น๋ฅผ โโ์ถ๊ฐํ ์ง ์๋๋ฉด ๋ณ๋๋ก ์ ์งํด์ผ ํ๋์ง ์ ์๊ณ ์์ต๋๋ค. ๋๋ ๋๋ถ๋ถ์ ๋ค๋ฅธ ๋์๊ด ์ ์๋ค๋ ๋ง์ฐฌ๊ฐ์ง๋ผ๊ณ ์๊ฐํฉ๋๋ค.
@ninjaaron ํ์ฌ ๊ท์น์ด ๋ค์๊ณผ ๊ฐ์ ๋์คํจ์น๋ฅผ โโ์ํด ํน์ ๊ตฌํ์ ์ฌ์ฉํ๊ณ ์๋์ง ์๊ฐํฉ๋๋ค.
numpy.sin
sympy.sin
import numpy.sin as np_sin
๋ฅผ ์ฌ์ฉ์/๊ฐ๋ฐ์๋ฅผ ์ํ ์ถ๊ฐ ์ต์
์ผ๋ก ์ฌ์ฉํ๋ ๊ฒ์ ํ์ฌ ์ฝ๋ ๊ธฐ๋ฐ์ ์ํฅ์ ์ฃผ์ง ์์์ผ ํฉ๋๋ค.
์ ์ผํ ๊ด์ฌ์ฌ๋ ๋
ธ์ถ ๊ธฐ๋ฅ/์ธํฐํ์ด์ค์๋ง ์ํฅ์ ๋ฏธ์น ๊ฒ์
๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ด ๋ฌธ์ ๋ ์ค๋ซ๋์ ์กด์ฌํด ์์ง๋ง ์ผ๋ถ ํ์ฅ์ ์ฌ์ ํ โโ๋ ผ์๋์ด์ผ ํฉ๋๋ค.
์์ฒด๋ ๊ฝค ํฉ๋ฆฌ์ ์ผ๋ก ๋ณด์ ๋๋ค.