Ruby에서 'self'의 이해: 초보자를 위한 가이드

Beginners guide to understanding ‘self’ in Ruby. | by Saphie Abayomi | Medium

작성자
jeff
발행일
2019년 01월 22일

핵심 요약

  • 1 Ruby에서 'self' 키워드는 사용되는 맥락에 따라 인스턴스 또는 클래스를 지칭하는 동적인 특성을 가집니다.
  • 2 인스턴스 메서드 내에서 'self'는 현재 객체 인스턴스를 참조하여 인스턴스 속성 및 메서드에 접근하는 데 사용됩니다.
  • 3 메서드 이름 앞에 'self'를 붙여 클래스 메서드를 정의할 때, 'self'는 클래스 자체를 나타내며 클래스 수준의 기능을 구현하는 데 활용됩니다.

도입

Ruby 프로그래밍 언어에서 `self` 키워드는 그 사용 맥락에 따라 지칭하는 대상이 달라지는 중요한 개념입니다. 이 글은 초보 개발자들을 위해 `self`가 다양한 상황에서 어떻게 작동하는지 구체적인 예시를 통해 명확하게 설명하고, `self`의 유연한 특성을 이해하는 데 도움을 줍니다. `self`는 인스턴스 내부에서 인스턴스 속성에 접근하거나, 클래스 수준의 메서드를 정의하는 등 Ruby 객체 지향 프로그래밍의 핵심적인 부분을 담당합니다.

Ruby에서 self의 동작 방식은 크게 세 가지 주요 맥락으로 나누어 설명할 수 있습니다.

1. 인스턴스 메서드 내에서의 self

  • 역할: 인스턴스 메서드 내에서 self는 해당 메서드를 호출한 객체의 인스턴스 자체를 참조합니다.
  • 예시: class Dog 내의 인스턴스 메서드 #says에서 self.name을 호출할 경우, 이는 Dog 클래스의 특정 인스턴스(예: dog1)의 name 속성에 접근하는 것을 의미합니다.
  • 핵심: self를 통해 인스턴스 변수나 다른 인스턴스 메서드에 접근할 수 있습니다.

2. 클래스 메서드 정의 및 내에서의 self

  • 역할: 메서드 이름 앞에 self를 붙여 정의하는 경우, 이는 클래스 메서드임을 나타내며, 이때의 self클래스 자체를 참조합니다. 클래스 메서드 내부에서도 self는 클래스를 지칭합니다.
  • 예시: Dog 클래스에 정의된 self.pack 메서드는 클래스 메서드입니다. 이 메서드는 @@pack과 같은 클래스 변수를 사용하여 모든 Dog 인스턴스의 수를 추적하는 등 클래스 수준의 데이터를 관리할 수 있습니다.
  • 핵심: 인스턴스는 다른 인스턴스에 대해 알지 못하지만, 클래스는 모든 인스턴스를 추적하고 관리할 수 있습니다.

3. 다양한 맥락에서의 self 활용

  • 인스턴스 메서드 내 self: 여전히 인스턴스 자체를 참조합니다. (예: Dog 인스턴스의 #what_am_i 메서드 내 self는 인스턴스를 반환)
  • 클래스 메서드 정의: self.method_name 형태로 클래스 메서드를 생성할 때 self는 클래스를 지칭합니다.
  • 클래스 메서드 내 self: 클래스 메서드 본문 내에서 self는 클래스 자체를 지칭합니다.
  • 클래스 자체 참조: 클래스 메서드가 아닌 곳에서 클래스 자체를 참조해야 할 경우, self.class를 사용하여 해당 객체의 클래스를 얻을 수 있습니다. (예: 인스턴스 메서드 내에서 self.class를 호출하면 해당 인스턴스의 클래스인 Dog가 반환됨)
  • 핵심: self는 코드의 특정 지점에서 현재 실행 컨텍스트에 따라 동적으로 인스턴스 또는 클래스를 가리키며, 이를 통해 유연한 객체 지향 설계를 가능하게 합니다.

결론

`self` 키워드는 Ruby에서 매우 강력하고 유연한 도구이지만, 그 동작 방식이 맥락에 따라 달라지므로 정확한 이해가 필수적입니다. 이 글에서 제시된 예시들은 `self`가 인스턴스 내부에서 인스턴스 속성에 접근하거나, 클래스 수준의 기능을 정의하고 실행하는 데 어떻게 사용되는지를 명확히 보여줍니다. `self`의 다양한 활용법을 숙지함으로써 Ruby 개발자는 보다 견고하고 효율적인 객체 지향 코드를 작성할 수 있으며, 이는 Ruby 프로그래밍의 숙련도를 높이는 데 기여할 것입니다.

댓글 0

댓글 작성

0/1000
정중하고 건설적인 댓글을 작성해 주세요.

아직 댓글이 없습니다

첫 번째 댓글을 작성해보세요!