트랙
/
Ruby
Ruby
/
연습 문제
/
놀이공원
놀이공원

놀이공원

학습 연습 문제

소개

인스턴스 변수

객체는 _인스턴스 변수_를 설정해서 자신만의 상태를 가질 수 있어요. 이 변수들은 객체 안에 존재하고, 보통 내부 상태를 저장하는 데 사용해요.

인스턴스 변수는 항상 @로 시작해요. @로 시작하는 변수를 설정해서 새로운 인스턴스 변수를 만들 수 있어요. 예를 들어볼게요:

class Repeater
  def hear(something)
    # Save what's been heard into a new instance variable called @heard
    @heard = something
  end

  def repeat
    # Return the value of the instance variable
    @heard
  end
end

repeater = Repeater.new
repeater.hear("Hello, friend!")
print repeater.repeat # Prints "Hello, friend!"

객체는 보통 initialize 메서드에서 초기 상태를 설정하는데, 이 메서드는 클래스에서 new를 호출할 때 자동으로 호출돼요.

class Airplane
  def initialize
    @wings = 2
  end

  def wings
    @wings
  end
end

plane = Airplane.new
plane.wings # returns 2

initialize 메서드는 인자를 받을 수도 있어서, 각 인스턴스가 원하는 상태로 시작할 수 있어요:

class Suitcase
  def initialize(locked)
    @locked = locked
  end
end

인스턴스 변수는 외부에서 읽거나 쓰지 못하도록 private으로 취급하는 게 좋아요. 대신 값을 가져오고 설정하는 메서드를 정의해요. 예를 들어볼게요:

class Suitcase
  def initialize
    @locked = false
  end

  def locked? # Query methods should be named with a trailing `?`
    @locked
  end

  def lock! # Methods which mutate state should have trailing `!`
    @locked = true
  end
end

suitcase = Suitcase.new
suitcase.locked? # false
suitcase.lock!
suitcase.locked? # true

Nil

Nil은 "아무것도 없음" 또는 "0"을 뜻하는 영어 단어예요. Ruby에서 nil은 객체의 _부재_를 표현할 때 사용해요. 다른 프로그래밍 언어에서는 null이나 none 값이 비슷한 역할을 하기도 해요.

# I do not have a favorite color
favorite_color = nil

Ruby는 인스턴스 변수가 처음 등장했을 때, 다른 값이 주어지기 전까지는 기본값으로 nil을 줘요.

print @favourite_color # prints nil
@favourite_color = "blue"
print @favourite_color # prints "blue"

지침

놀이공원에서 일하게 되면서, 입장객과 놀이기구를 관리하는 시스템을 설계하라는 명세를 받았어요. 여기서는 공원을 방문하는 사람인 관람객(Attendee)을 모델링하는 일을 맡았어요.

1. 새 관람객 만들기

Attendee 클래스의 Attendee#initialize 메서드를 구현해요. 이 메서드는 키(센티미터 단위)를 인자로 받아 인스턴스 변수에 저장해야 해요.

Attendee.new(106)
# => #<Attendee:0x000055c33e6c7e18 @height=106>

2. 관람객의 키 구하기

Attendee 클래스의 Attendee#height getter 메서드를 구현해요. 이 메서드는 인스턴스의 키를 반환해야 해요.

Attendee.new(106).height
# => 106

3. 이용권 id는 무엇인가요

모든 관람객이 이용권을 산 것은 아니지만, 이용권을 가지고 있는지 없는지는 알아야 해요. Attendee 클래스의 Attendee#pass_id getter 메서드를 구현해요. 이 메서드는 인스턴스의 pass_id를 반환하고, 관람객이 이용권을 가지고 있지 않다면 nil을 반환해야 해요.

Attendee.new(106).pass_id
# => nil

4. 이용권을 살 수 있게 하기

Attendee#issue_pass!를 구현해서 인스턴스의 상태를 바꾸고, pass id 인스턴스 변수를 인자로 설정해요. 이 메서드는 pass id를 반환해야 해요.

attendee = Attendee.new(106)
attendee.issue_pass!(42)
attendee.pass_id
# => 42

5. 이용권 회수하기

일부 손님은 안전하지 않은 행동으로 규칙을 어기기 때문에, 공원은 이용권을 회수할 수 있기를 원해요. Attendee#revoke_pass!를 구현해서 인스턴스의 상태를 바꾸고, pass id를 nil로 설정해요.

attendee = Attendee.new(106)
attendee.issue_pass!(42)
attendee.revoke_pass!
attendee.pass_id
# => nil
GitHub에서 편집 링크가 새 창이나 탭에서 열려요
Ruby Exercism

놀이공원 문제를 시작해 볼 준비가 됐나요?

Exercism에 가입하고 Ruby 트랙을 개념 21개연습 문제 121개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.