Computer >> 컴퓨터 >  >> 프로그래밍 >> Ruby

Ruby inspect와 to_s 메서드 완벽 가이드 – 스스로를 설명하는 객체 만들기

Ruby에서 inspect 메서드는 어떻게 동작할까요? 그리고 왜 사용하는 걸까요? 이 글에서 그 답을 알아봅니다.

문자열이나 배열을 출력하면 내용물이 그대로 화면에 나타납니다.

예시:

puts [1,2,3]

1
2
3

그런데 직접 만든 클래스의 객체를 출력하면 어떻게 될까요?

이런 결과를 보게 됩니다:

#<Cat:0x29458e0>

왜 그럴까요?

Ruby에게 이 클래스를 사람이 이해할 수 있는 형태로 표시하는 방법을 알려주지 않았기 때문입니다.

to_s 같은 메서드를 정의하면 이 기본 동작을 바꿀 수 있습니다.

지금부터 자세히 살펴보겠습니다!

to_s 메서드 구현하기

객체에 puts를 사용하면 Ruby는 객체의 문자열 표현을 얻기 위해 to_s 메서드를 호출합니다.

기본적으로는 클래스 이름(Cat)과...

object_id를 16진수로 나타낸 숫자(0x29458e0)가 함께 출력됩니다.

이렇게 바꿀 수 있습니다:

class Cat
  def to_s
    "I'm a cat"
  end
end

puts Cat.new
# "I'm a cat"

클래스에 인스턴스 변수가 있다면, 그 값도 객체 설명에 포함시킬 수 있습니다.

다음 예제처럼요:

class Cat
  attr_reader :color

  def initialize(color)
    @color = color
  end

  def to_s
    "I'm a #{color} cat"
  end
end

puts Cat.new("blue")
# "I'm a blue cat"

puts Cat.new("white")
# "I'm a white cat"

이제 객체를 출력하면 훨씬 유용한 정보를 확인할 수 있습니다.

꽤 멋지죠?

Ruby inspect 메서드

객체를 표현하는 방법에는 두 가지가 있습니다.

첫 번째:

to_s를 사용하는 것입니다.

이것은 객체를 화면에 표시할 때 사용자에게 보여주고 싶은 형태입니다.

예를 들어 시간 객체라면, 실제 저장 방식인 1546021067(유닉스 타임스탬프) 대신 사람이 이해하기 쉬운 2018-12-28 19:17:28 형태로 보여주는 것이 좋겠죠.

두 번째:

inspect를 사용하면 객체를 더 원시적인(raw) 형태로 확인할 수 있습니다.

차이점이 뭘까요?

  • to_s를 정의하면 puts 사용 시 객체가 이 특정한 형태로 표시됩니다.
  • inspect는 자신과 다른 개발자들의 디버깅을 돕기 위해 정의합니다.

예제를 볼까요?

"abc".inspect

결과:

"abc"

inspect는 따옴표를 그대로 유지하고, 줄바꿈(\n) 같은 특수 문자도 눈에 보이게 만듭니다.

가장 좋은 점은 무엇일까요?

자신만의 클래스에서도 inspect 메서드를 구현할 수 있다는 것입니다 🙂

구현 방법:

class Cat
  attr_reader :color

  def inspect
    "Cat - id: #{object_id} - color: #{color}"
  end
end

Cat.new("white").inspect
# "Cat - id: 23316588 - color: white"

이렇게 스스로를 설명하는 객체를 만들 수 있습니다!

마무리

Ruby의 inspectto_s 메서드를 활용해 더 나은 클래스를 만드는 방법을 배웠습니다.

이 글이 도움이 되었다면 주변에 공유해 주세요. 읽어주셔서 감사합니다!