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의 inspect와 to_s 메서드를 활용해 더 나은 클래스를 만드는 방법을 배웠습니다.
이 글이 도움이 되었다면 주변에 공유해 주세요. 읽어주셔서 감사합니다!