Ruby 클래스에서 인스턴스 변수 활용
7876 단어 tutorialrubybeginnersprogramming
힌트 - 인스턴스 변수보다 메소드 선호
나는 이전에 2015년에 다른 사이트에 이것을 게시했지만 Ruby 여정을 시작하는 사람들에게 여전히 도움이 된다고 생각합니다.
2015년에 The Firehose Project에 대한 멘토링을 시작했습니다. 온라인 Rails 부트캠프.
다음은 제가 이전에 2015년에 썼던 서론으로 항상 변함없이 남아 있습니다. Ruby에서 인스턴스 변수를 활용하는 방법을 소개합니다.
그 과정에서 인스턴스 변수 설정과 setter 메서드 호출과 관련하여 내가 선호하는 클래스 방법론에 대해 이야기하겠습니다.
# Example 1
class Book
def initialize(a_title)
@title = a_title
end
def title
@title
end
end
이는 다음과 같이 요약될 수 있습니다.
# Example 2
class Book
def initialize(a_title)
@title = a_title
end
attr_reader :title
end
점점 더 초기화의 일부로 인스턴스 변수를 설정하지 않고 대신 setter 메서드를 호출하는 것을 선호합니다(자세한 내용은 나중에 설명).
# Example 3
class Book
def initialize(a_title)
# Make sure to remember to use `self.title = a_title` instead of
# `title = a_title`. If you use `title = a_title`, you will be setting the
# local variable `title` instead of calling the instance method `#title=`
# (and thus setting the instance variable `@title`)
self.title = a_title
end
attr_reader :title
def title=(a_title)
@title = a_title
end
end
이는 다음과 같이 요약될 수 있습니다.
# Example 4
class Book
def initialize(a_title)
self.title = a_title
end
attr_reader :title
attr_writer :title
end
그리고 더 자세히:
# Example 5
class Book
def initialize(a_title)
self.title = a_title
end
attr_accessor :title
end
초기화 시
attr_accessor
및 인스턴스 메서드 setter를 사용하는 것이 내가 선호하는 방법론입니다(예제 #5 참조). 이전에는 사실상의 방법론으로 예제 #2를 사용했습니다. 그러나 요즘은 사용하지 않으려고 합니다.setter 메서드를 사용하는 이유는 다음과 같습니다.
다음을 고려하세요:
# Example 6
class FrenchBook < Book
def title=(a_title)
@title = translate_to_french(a_title)
end
end
setter 방식을 사용할 때 setter 방식은 코드에서 변곡점(확장하고 수정하는 곳)입니다.
초기화 메소드에서 인스턴스 변수를 설정했다면 제 변곡점은 초기화 메소드일 것입니다. 다음 예는 그 변경을 보여줍니다.
# Example 7
class Book
def initialize(a_title)
@title = a_title
end
attr_reader :title
end
class FrenchBook < Book
def initialize(a_title)
@title = translate_to_french(a_title)
end
end
두 예제의 전체 코드 행은 동일합니다. 그러나
Book
클래스를 변경해야 할 때 어떤 일이 발생하는지 생각해 보십시오.# Example 8
class Book
def initialize(a_title, an_author)
# do stuff here
end
end
예 7의
FrenchBook
클래스를 변경해야 합니다.결론
인스턴스 변수를 설정하는 대신
attr_writer
를 사용하면 방법의 문제를 빠르게 분리할 수 있습니다. 클래스에 single responsibility(즉, 변경 이유)가 있어야 하는 것처럼 메서드도 마찬가지입니다.인스턴스 변수를 설정하는 방법을 사용하면 확장, 수정 및 전반적인 유지 관리가 더 쉬워집니다.
다음은 요즘 제가 선호하는 수업 구조입니다.
# Example 9
class Book
def initialize(a_title)
self.title = a_title
end
attr_accessor :title
private :title=
end
개체 인스턴스화 외에는 제목을 업데이트하는 수단을 노출하고 싶지 않습니다. 객체 상태의 변경 가능성을 외부 세력으로부터 보호하고 싶습니다.
Reference
이 문제에 관하여(Ruby 클래스에서 인스턴스 변수 활용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/devteam/leveraging-instance-variables-in-ruby-classes-4f90텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)