15์žฅ: Double colon

1. ์ด์ค‘ ์ฝœ๋ก (::) ๊ฐœ์š”

TCL์—์„œ ์ด์ค‘ ์ฝœ๋ก (::)์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์šฉ๋„๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค:

  1. ์ „์—ญ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์ง€์ •

  2. ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๊ตฌ๋ถ„

  3. ์ •๊ทœํ™”๋œ(fully qualified) ์ด๋ฆ„ ์ƒ์„ฑ

2. ์ „์—ญ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์ง€์ •

์ด์ค‘ ์ฝœ๋ก ์„ ์ด๋ฆ„ ์•ž์— ์‚ฌ์šฉํ•˜๋ฉด ์ „์—ญ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์˜ ๋ณ€์ˆ˜๋‚˜ ํ”„๋กœ์‹œ์ €๋ฅผ ์ฐธ์กฐํ•ฉ๋‹ˆ๋‹ค.

set ::globalVar 10

proc localScope {} {
    puts $::globalVar  # ์ „์—ญ ๋ณ€์ˆ˜ ์ ‘๊ทผ
}

localScope  # ์ถœ๋ ฅ: 10

3. ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๊ตฌ๋ถ„

์ด์ค‘ ์ฝœ๋ก ์€ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ๊ตฌ๋ถ„ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

namespace eval MyNamespace {
    variable myVar 20
    
    proc myProc {} {
        puts $MyNamespace::myVar
    }
}

MyNamespace::myProc  # ์ถœ๋ ฅ: 20

4. ์ •๊ทœํ™”๋œ ์ด๋ฆ„ ์ƒ์„ฑ

์—ฌ๋Ÿฌ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ๊ฑฐ์น˜๋Š” ๊ฒฝ์šฐ, ์ด์ค‘ ์ฝœ๋ก ์œผ๋กœ ์ „์ฒด ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

namespace eval Outer {
    namespace eval Inner {
        proc nestedProc {} {
            puts "Nested procedure"
        }
    }
}

::Outer::Inner::nestedProc  # ์ถœ๋ ฅ: Nested procedure

5. ๋ณ€์ˆ˜ ๋ฐ ํ”„๋กœ์‹œ์ € ์ด๋ฆ„ ์ถฉ๋Œ ๋ฐฉ์ง€

์ด์ค‘ ์ฝœ๋ก ์„ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋กœ ๋‹ค๋ฅธ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์˜ ๋™์ผํ•œ ์ด๋ฆ„์„ ๊ฐ€์ง„ ๋ณ€์ˆ˜๋‚˜ ํ”„๋กœ์‹œ์ €๋ฅผ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

namespace eval NS1 {
    proc common {} {
        puts "NS1's common procedure"
    }
}

namespace eval NS2 {
    proc common {} {
        puts "NS2's common procedure"
    }
}

NS1::common  # ์ถœ๋ ฅ: NS1's common procedure
NS2::common  # ์ถœ๋ ฅ: NS2's common procedure

6. ํ˜„์žฌ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์ฐธ์กฐ

ํ˜„์žฌ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์ฐธ์กฐํ•  ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

namespace eval MyNS {
    variable localVar 30
    
    proc accessVar {} {
        variable localVar
        puts ${::MyNS::localVar}  # ํ˜„์žฌ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์˜ ๋ณ€์ˆ˜ ๋ช…์‹œ์  ์ฐธ์กฐ
    }
}

MyNS::accessVar  # ์ถœ๋ ฅ: 30

7. ์ด์ค‘ ์ฝœ๋ก ๊ณผ upvar ์‚ฌ์šฉ

์ƒ์œ„ ์Šค์ฝ”ํ”„์˜ ๋ณ€์ˆ˜๋ฅผ ์ฐธ์กฐํ•  ๋•Œ ์ด์ค‘ ์ฝœ๋ก ๊ณผ upvar๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

proc outerProc {} {
    set localVar 40
    innerProc
}

proc innerProc {} {
    upvar ::localVar globalVar
    puts $globalVar
}

outerProc  # ์ถœ๋ ฅ: 40

8. ์ฃผ์˜์‚ฌํ•ญ โš ๏ธ

  • ๊ณผ๋„ํ•œ ์ด์ค‘ ์ฝœ๋ก  ์‚ฌ์šฉ์€ ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์„ ๋–จ์–ด๋œจ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ์ด๋ฆ„ ์ถฉ๋Œ์— ์ฃผ์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ์ „์—ญ ๋ณ€์ˆ˜์˜ ๊ณผ๋‹ค ์‚ฌ์šฉ์€ ์ฝ”๋“œ์˜ ๋ชจ๋“ˆ์„ฑ์„ ํ•ด์น  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

9. ํŒ๊ณผ ์š”๋ น ๐Ÿ’ก

  • ๊ฐ€๋Šฅํ•œ ์ง€์—ญ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ์ „์—ญ ๋ณ€์ˆ˜ ์‚ฌ์šฉ์„ ์ตœ์†Œํ™”ํ•˜์„ธ์š”.

  • ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ๋…ผ๋ฆฌ์ ์œผ๋กœ ๊ตฌ์กฐํ™”ํ•˜์„ธ์š”.

  • ๋ณ€์ˆ˜๋‚˜ ํ”„๋กœ์‹œ์ €์˜ ์Šค์ฝ”ํ”„๊ฐ€ ๋ถˆ๋ถ„๋ช…ํ•  ๋•Œ๋Š” ๋ช…์‹œ์ ์œผ๋กœ ์ด์ค‘ ์ฝœ๋ก ์„ ์‚ฌ์šฉํ•˜์„ธ์š”.

  • ํฐ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋ชจ๋“ˆํ™”๋œ ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“œ์„ธ์š”.

10. ์„ฑ๋Šฅ ๊ณ ๋ ค์‚ฌํ•ญ ๐Ÿš€

  • ์ด์ค‘ ์ฝœ๋ก ์„ ์‚ฌ์šฉํ•œ ์ „์—ญ ๋ณ€์ˆ˜ ์ ‘๊ทผ์€ ์ง€์—ญ ๋ณ€์ˆ˜ ์ ‘๊ทผ๋ณด๋‹ค ์•ฝ๊ฐ„ ๋” ๋Š๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๊นŠ๊ฒŒ ์ค‘์ฒฉ๋œ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์ž์ฃผ ์ฐธ์กฐํ•˜๋ฉด ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

TCL์˜ ์ด์ค‘ ์ฝœ๋ก (::)์„ ๋งˆ์Šคํ„ฐํ•˜์—ฌ ํšจ๊ณผ์ ์ธ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๊ด€๋ฆฌ์™€ ๋ณ€์ˆ˜ ์Šค์ฝ”ํ”„ ์ œ์–ด๋ฅผ ์ˆ˜ํ–‰ํ•˜์„ธ์š”!

Last updated