Ruby에 콜론2개 `::`는 뭘 하는 건가요?

조회수 2066회

발생하는 문제 및 실행환경

Foo::Bar에서 ::는 뭘 하는건가요?

캡슐화(private, protected)랑 관련있는건가 했는데 정의를 보니까 그건 아니네요.

The :: is a unary operator that allows: constants, instance methods and class methods defined within a class or module, to be accessed from anywhere outside the class or module.

그러면 ::이 굳이 있어야 할 필요는 없지 않나요? 접근을 제한해주는 것도 아니고 ::만 찍으면 어디서든 접근할 수 있는데 이건 왜 있을까요?

1 답변

  • 좋아요

    0

    싫어요
    채택 취소하기

    ::는 namespace와 관련된 연산자입니다. module이나 class안에 item을 접근할 때 씁니다.

    예를들면

    module SomeModule
        module InnerModule
            class MyClass
                CONSTANT = 4
            end
        end
    end
    

    이런 코드를 썼을 때, SomeModule밖에서 CONSTANT에 접근하려면

    SomeModule::InnerModule::MyClass::CONSTANT.
    

    같이 써야 합니다.

    ::를 쓰는 이유는 접근을 제한하기 위해서가 아니라, "method나 class간에 이름이 충돌하는걸 막기 위해" 씁니다.

    공동 개발을 하는 경우를 생각해보면 변수의 이름이 같아 conflic가 생길 가능성이 높습니다. 그렇다고 해서 다른 사람이 어떤 이름을 쓰고 있는지 일일히 검사해야 할까요? 이건 너무 비효율적인 방법이지요. 그래서 서로 다른 namespace에서 자유롭게 코드를 만들어 충돌을 피하는 방법을 쓰는 겁니다.

    MR_COUNT = 0        # main Object class에서 정의하는 constant (1)
    module Foo
      MR_COUNT = 0      # Foo에서 정의하는 constant(2)
      ::MR_COUNT = 1    # (1)을 1로 설정함
      MR_COUNT = 2      # (2)를 2로 설정함
    end
    
    puts MR_COUNT       # (1)
    puts Foo::MR_COUNT  # (2)
    

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)