Ruby는 객체 지향 프로그래밍 언어로, 객체와 클래스의 개념이 매우 중요합니다. 이 과정에서 'self' 키워드는 매우 중요한 역할을 합니다. 이 글에서는 Ruby에서 self 키워드의 의미와 다양한 사용 사례를 살펴보겠습니다.
Ruby에서 self는 현재 객체를 참조하는 특별한 키워드입니다. 즉, self는 메서드가 호출되는 객체를 나타냅니다. self는 클래스 내에서, 인스턴스 메서드 내에서, 그리고 클래스 메서드 내에서 다르게 동작할 수 있습니다.
self는 다음과 같은 상황에서 사용됩니다:
이제 self 키워드의 다양한 사용 사례를 살펴보겠습니다.
인스턴스 메서드 내에서 self는 해당 메서드를 호출한 인스턴스를 참조합니다. 다음은 인스턴스 메서드에서 self를 사용하는 예제입니다:
class Dog
def initialize(name)
@name = name
end
def bark
puts "#{self.name} says woof!"
end
def name
@name
end
end
dog = Dog.new("Buddy")
dog.bark # 출력: Buddy says woof!
위의 예제에서 bark 메서드는 self를 사용하여 현재 인스턴스의 name 메서드를 호출합니다. self는 dog 인스턴스를 참조합니다.
클래스 메서드 내에서 self는 해당 메서드를 호출한 클래스를 참조합니다. 다음은 클래스 메서드에서 self를 사용하는 예제입니다:
class Dog
def self.species
"Canis lupus familiaris"
end
end
puts Dog.species # 출력: Canis lupus familiaris
위의 예제에서 species 메서드는 self를 사용하여 Dog 클래스를 참조합니다. self는 Dog 클래스 자체를 나타냅니다.
클래스 정의 내에서 self는 클래스 자체를 참조합니다. 다음은 클래스 정의 내에서 self를 사용하는 예제입니다:
class Dog
def self.breed
"Labrador"
end
def self.info
puts "This is a #{self.breed}."
end
end
Dog.info # 출력: This is a Labrador.
위의 예제에서 info 메서드는 self를 사용하여 현재 클래스를 참조하고, breed 메서드를 호출합니다.
self는 인스턴스 변수에 접근할 때도 사용됩니다. 다음은 self를 사용하여 인스턴스 변수에 접근하는 예제입니다:
class Cat
def initialize(name)
@name = name
end
def introduce
puts "I am #{self.name}."
end
def name
@name
end
end
cat = Cat.new("Whiskers")
cat.introduce # 출력: I am Whiskers.
위의 예제에서 introduce 메서드는 self를 사용하여 현재 인스턴스의 name 메서드를 호출합니다.
self는 블록 내에서도 사용할 수 있습니다. 다음은 블록 내에서 self를 사용하는 예제입니다:
class Person
def initialize(name)
@name = name
end
def greet
yield self
end
def name
@name
end
end
person = Person.new("Alice")
person.greet do |p|
puts "Hello, my name is #{p.name}."
end
위의 예제에서 greet 메서드는 블록을 받아 self를 전달합니다. 블록 내에서 self는 person 인스턴스를 참조합니다.
self 키워드를 사용할 때 주의해야 할 몇 가지 사항이 있습니다:
self 키워드는 Ruby에서 매우 중요한 개념으로, 객체 지향 프로그래밍의 핵심 요소입니다. self를 이해하고 적절히 사용하는 것은 Ruby 프로그래밍에서 필수적입니다. 이 글에서 설명한 다양한 사용 사례를 통해 self의 개념을 명확히 이해하고, 실제 코드에서 활용해 보시기 바랍니다.
Ruby를 배우는 과정에서 self 키워드를 잘 활용하면 더 나은 객체 지향 프로그래밍을 할 수 있습니다. Happy coding!
© 2024 RailsInsights. All rights reserved.