1. namespace ๊ฐ์
TCL์ namespace๋ ๋ณ์์ ํ๋ก์์ ๋ฅผ ๋
ผ๋ฆฌ์ ์ผ๋ก ๊ทธ๋ฃนํํ์ฌ ์ด๋ฆ ์ถฉ๋์ ๋ฐฉ์งํ๊ณ ์ฝ๋๋ฅผ ๋ชจ๋ํํ๋ ๋ฉ์ปค๋์ฆ์
๋๋ค.
namespace, double colon, array๋ ๋๊ท๋ชจ ๋ณ์ data ์ฒ๋ฆฌ๋ฅผ ํ๋๋ฐ ์ ๋ฆฌํฉ๋๋ค. ์๊ท๋ชจ ๋ณ์ ์คํฌ๋ฆฝํ
๋ง ํ๋ ๊ฒฝ์ฐ, 14~16์ฅ์ ๋์ด๊ฐ์
๋ ๋ฉ๋๋ค. (๋์ด๋๊ฐ ์์ด์, ํฌ๊ธฐํ์ค๊น๋ด )
2. namespace ์์ฑ ๋ฐ ์ฌ์ฉ
2.1 namespace ์์ฑ
namespace eval MyNamespace {
variable myVar 10
proc myProc {} {
puts "Hello from MyNamespace"
}
}
2.2 namespace ๋ด ์์ ์ ๊ทผ
::๋ Double colon์ด๋ผ๊ณ ๋ถ๋ฆฝ๋๋ค. ๋ค์ ์ฅ์์ ์์ธํ ์ดํด๋ด
๋๋ค.
puts $MyNamespace::myVar
MyNamespace::myProc
3. namespace ๋ช
๋ น์ด
3.1 ํ์ฌ namespace ํ์ธ
puts [namespace current]
3.2 namespace ๋ชฉ๋ก ์กฐํ
puts [namespace children ::]
3.3 namespace ์กด์ฌ ์ฌ๋ถ ํ์ธ
if {[namespace exists MyNamespace]} {
puts "MyNamespace exists"
}
3.4 namespace ์ญ์
namespace delete MyNamespace
4. namespace ์ค์ฒฉ
namespace๋ ์ค์ฒฉ๋ ์ ์์ต๋๋ค.
namespace eval Outer {
namespace eval Inner {
variable innerVar 20
proc innerProc {} {
puts "Inner procedure"
}
}
}
puts $Outer::Inner::innerVar
Outer::Inner::innerProc
5. namespace import/export
5.1 ๋ช
๋ น์ด export
namespace eval MyNS {
namespace export myCmd
proc myCmd {} {
puts "MyNS command"
}
}
5.2 ๋ช
๋ น์ด import
namespace import MyNS::myCmd
myCmd # ์ด์ ํ์ฌ namespace์์ ์ง์ ์ฌ์ฉ ๊ฐ๋ฅ
6. namespace path
๋ค๋ฅธ namespace์ ๋ช
๋ น์ด๋ฅผ import ์์ด ์ฌ์ฉํ ์ ์๊ฒ ํฉ๋๋ค.
namespace eval MyNS {
proc myProc {} {
puts "MyNS procedure"
}
}
namespace eval OtherNS {
namespace path ::MyNS
myProc # MyNS::myProc๋ฅผ ์ง์ ํธ์ถ
}
7. namespace ๋ณ์
7.1 ๋ณ์ ์ ์ธ
namespace eval MyNS {
variable myVar 30
}
7.2 ๋ณ์ ์ ๊ทผ
puts $MyNS::myVar
namespace eval MyNS {
puts $myVar # namespace ๋ด์์๋ ์ง์ ์ ๊ทผ ๊ฐ๋ฅ
}
8. namespace ensemble
๊ด๋ จ ๋ช
๋ น์ด๋ค์ ๊ทธ๋ฃนํํ์ฌ ์ฌ์ฉํ ์ ์์ต๋๋ค.
namespace eval math {
namespace export add subtract
proc add {a b} {return [expr {$a + $b}]}
proc subtract {a b} {return [expr {$a - $b}]}
namespace ensemble create -command math -subcommands {add subtract}
}
puts [math add 5 3] # ์ถ๋ ฅ: 8
puts [math subtract 10 4] # ์ถ๋ ฅ: 6
9. ์ฃผ์์ฌํญ โ ๏ธ
์ ์ญ namespace๋ฅผ ๊ณผ๋ํ๊ฒ ์ค์ผ์ํค์ง ์๋๋ก ์ฃผ์ํ์ธ์.
namespace ์ด๋ฆ ์ถฉ๋์ ์ฃผ์ํ์ธ์.
import ์ฌ์ฉ ์ ์ด๋ฆ ์ถฉ๋ ๊ฐ๋ฅ์ฑ์ ๊ณ ๋ คํ์ธ์.
10. ํ๊ณผ ์๋ น ๐ก
ํฐ ํ๋ก์ ํธ์์๋ namespace๋ฅผ ์ฌ์ฉํ์ฌ ์ฝ๋๋ฅผ ๋ชจ๋ํํ์ธ์.
namespace ์ด๋ฆ์ ์๋ฏธ์๊ณ ๋ช
ํํ๊ฒ ์ง์ผ์ธ์.
ํ์ํ ๊ฒฝ์ฐ namespace ๋ณ์นญ์ ์ฌ์ฉํ์ฌ ๊ธด ์ด๋ฆ์ ๊ฐ์ํํ ์ ์์ต๋๋ค.
namespace ๋ด๋ถ์์ ๋ณ์๋ฅผ ์ฌ์ฉํ ๋๋ variable
๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ์ธ์.
11. ์ฑ๋ฅ ๊ณ ๋ ค์ฌํญ ๐
namespace๋ฅผ ๊ณผ๋ํ๊ฒ ์ค์ฒฉํ๋ฉด ์ฑ๋ฅ์ ์ํฅ์ ์ค ์ ์์ต๋๋ค.
์์ฃผ ์ฌ์ฉ๋๋ ๋ช
๋ น์ด์ ๊ฒฝ์ฐ, ์ ์ฒด ๊ฒฝ๋ก๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๋ณด๋ค importํ์ฌ ์ฌ์ฉํ๋ ๊ฒ์ด ์ฝ๊ฐ ๋ ๋น ๋ฅผ ์ ์์ต๋๋ค.
TCL์ namespace๋ฅผ ๋ง์คํฐํ์ฌ ๊น๋ํ๊ณ ๋ชจ๋ํ๋ ์ฝ๋๋ฅผ ์์ฑํ์ธ์!