Ruby의 인스턴스 대 클래스 메소드

1822 단어
Ruby에서 "self"라는 용어는 내 머리를 감싸는 가장 힘든 것 중 하나였습니다. "self"가 클래스를 참조하는 경우와 "self"가 해당 클래스의 인스턴스를 참조하는 경우가 있으며, 이는 메서드 작성 방식에 영향을 미칩니다.

클래스 및 인스턴스



인스턴스 및 클래스 메서드를 이해하기 위해 먼저 인스턴스와 클래스가 실제로 무엇인지 분석해 보겠습니다. 기본적으로 클래스는 인스턴스 모음입니다. 데이터베이스와 함께 생각해보면 클래스는 전체 테이블을 나타내고 인스턴스는 해당 테이블의 각 행을 나타냅니다.

인스턴스 대 클래스 메서드



이제 인스턴스와 클래스가 어떻게 관련되어 있는지 이해했으므로 메서드에 대해 이야기할 수 있습니다. 방법은 데이터베이스에서 세부 정보를 조작하고 외삽하는 데 사용하는 것입니다. 찾기, 정렬, 삭제 등의 방법을 만들 수 있습니다. 백만 달러짜리 질문은 "우리 방법이 클래스 전체에 영향을 주기를 원합니까, 아니면 우리 방법이 각 인스턴스에 영향을 주기를 원합니까?"가 됩니다.

수업 방법



메서드가 클래스 전체에 영향을 미치게 하려면 클래스 메서드를 작성해야 합니다. 클래스 메서드는 일반적으로 ClassName.method_name 와 같이 마침표로 표시됩니다. 이것은 우리의 "self"가 클래스라는 것을 알게 해주고, 그래서 우리의 코드는 다음과 같을 것입니다:

class ClassName
   def self.method_name
      ClassName.method
   end
end


인스턴스 방법



메서드가 클래스의 각 인스턴스에 영향을 미치게 하려면 인스턴스 메서드를 작성해야 합니다. 인스턴스 메서드는 일반적으로 ClassName#method_name 와 같은 해시태그와 함께 표시됩니다. 이를 통해 "self"가 인스턴스임을 알 수 있으므로 코드는 다음과 같습니다.

class ClassName
   def method_name
      self.method
   end
end


음, 알겠습니다. 하지만 여전히 혼란스럽습니다.



여전히 이 "자신"이 벅찬 느낌이 든다면 콘솔을 사용하여 테스트해 보는 것이 좋습니다. Flatiron에서 우리는 콘솔에서 우리의 방법을 테스트하기 위해 프라이 세션을 시작하도록 권장받았습니다. 클래스 메서드의 경우 ClassName.method_name 를 입력합니다. 인스턴스 메서드의 경우 테스트할 특정 인스턴스를 생각해야 합니다. 하나의 내장 케이스는 "첫 번째"인스턴스입니다. 그것은 테이블의 첫 번째 행이 될 것입니다. 따라서 콘솔에서 메서드를 테스트할 때 ClassName.first.method_name 를 입력할 수 있습니다.

결론



내가 스스로에게 여러 번 되풀이한 말을 남기고 가겠습니다: 클래스 메서드는 전체 클래스, 즉 전체 테이블에 영향을 미칩니다. 인스턴스 메서드는 클래스의 인스턴스, 즉 테이블의 행에 영향을 미칩니다.

좋은 웹페이지 즐겨찾기