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