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


발생하는 문제 및 실행환경

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.

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

  • 2016년 02월 23일에 작성됨

조회수 180


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)
  • 2016년 02월 23일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close