인스턴스 변수 소개
핵심 포인트:
- 클래스의
.new 메서드가 호출되어 객체 인스턴스를 만들면, 인스턴스의 상태를 초기화하기 위해 모든 인자가 .initialize 메서드에 전달돼요.
- 인스턴스 변수 이름 앞에는
@가 붙어요.
- 인스턴스 변수는 명시적으로 설정하기 전까지 기본값이
nil이에요.
- 인스턴스 변수는 기본적으로 private이고, 게터와 세터로 다뤄야 해요.
class Backpack
initialize(owner)
@owner = owner
end
def owner
@owner
end
def owner=(new_owner)
@owner = new_owner
end
end
- 끝에
=가 붙은 메서드는 Ruby가 세터로 인식하며, 대입 문법을 편의 문법 형태로 쓸 수 있게 해줘요. 예를 들어 Backpack.new("Sven").owner = "Ayah"처럼요.
owner와 = 사이에는 공백이 있지만, 실제 메서드 이름은 owner=라는 점을 눈여겨봐요.
- 게터와 세터는
attr_reader, attr_writer, attr_accessor 메서드로 만들 수 있어요:
-
attr_reader: 나열된 심볼에 대한 게터를 만들어요
-
attr_writer: 나열된 심볼에 대한 세터를 만들어요
-
attr_accessor: 나열된 심볼에 대한 게터와 세터를 만들어요
class Backpack
attr_accessor :owner
initialize(owner)
@owner = owner
end
end
- 인스턴스 변수를 직접 쓰지 않고 게터와 세터를 쓰는 이유는 뭘까요?
- 앞의 예시에 오타(이런 실수를 "typo"라고 불러요)가 있었다면(예:
@ownar), 아무 오류도 없이 조용히 실패해서 시스템에 버그를 끌어들일 수 있어요.
- 게터와 세터는 이런 문제를 명확히 드러내 주고, 오타가 나면 오류를 발생시켜요.
참고 자료
객체 인스턴스 초기화
인스턴스 변수