14์žฅ: namespace

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๋ฅผ ๋งˆ์Šคํ„ฐํ•˜์—ฌ ๊น”๋”ํ•˜๊ณ  ๋ชจ๋“ˆํ™”๋œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์„ธ์š”!

Last updated