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

루비 puts vs print vs p: 출력 메서드 차이점 완벽 정리

루비(Ruby)에는 화면에 무언가를 출력하는 방법이 여러 가지 있습니다.

그중 가장 많이 쓰이는 세 가지는 다음과 같습니다:

  • puts
  • print
  • p

그런데 이들은 어떻게 다를까요?

그리고 언제 어떤 것을 사용해야 할까요?

이 글에서 바로 그 답을 확인해 보세요!

줄바꿈 없이 출력하는 방법

사용자에게 결과를 보여주기 위해 화면에 무언가를 출력할 때는 일반적으로 puts를 사용합니다.

사용 방법은 다음과 같습니다:

puts "Hello there!"

puts는 호출될 때마다 메시지 끝에 자동으로 줄바꿈(newline)을 추가합니다.

줄바꿈을 원하지 않는다면 print를 사용하세요.

예시:

print 123

다음에 print로 출력하는 내용은 이전 메시지와 같은 줄에 이어서 표시됩니다.

예시:

print 123
print 456
print 789

# 출력 결과
123456789

반면 puts를 사용하면:

puts 123
puts 456
puts 789

# 출력 결과
123
456
789

모든 메시지가 각자 자신만의 줄에 출력됩니다!

puts는 배열도 다르게 처리합니다.

예시:

puts [1,2]
# 1
# 2

print [1,2]
# [1,2]

또 다른 차이점도 있습니다:

puts는 모든 값을 문자열로 변환하려고 시도합니다(to_s 메서드 호출).

왜 이것이 중요할까요?

nil 값이 들어 있는 배열을 puts로 출력하려고 하면...

빈 줄이 함께 출력되기 때문입니다!

예시:

puts [1,nil,nil,2]
# 1
#
#
# 2

정리하자면, putsprint의 공통점은 다음과 같습니다:

  • 값을 문자열로 변환한다는 점입니다(빈 문자열이 되더라도).

그리고 puts만의 특징은:

  • 메시지 끝에 줄바꿈을 추가합니다.
  • 배열의 요소를 한 줄에 하나씩 출력합니다.

p로 디버그 출력하기

그렇다면 puts와 p는 어떻게 다를까요?

p는 객체의 좀 더 "원시적인(raw)" 형태를 그대로 보여주는 메서드입니다.

예를 들어:

> puts "Ruby Is Cool"
Ruby Is Cool

> p "Ruby Is Cool"
"Ruby Is Cool"

p는 무엇에 유용할까요?

바로 디버깅입니다.

(평소에는 눈에 보이지 않는) 줄바꿈 문자 같은 숨겨진 값을 찾거나, 어떤 값이 실제로 올바른지 확인하고 싶을 때 p를 사용하세요.

또 하나의 차이점:

  • puts는 항상 nil을 반환합니다.
  • p는 인자로 전달된 객체 자체를 반환합니다.

다소 기술적인 차이지만...

메서드의 마지막 줄에서 변수를 puts로 출력하고, 그 메서드의 반환값을 활용하는 경우에는 실제로 문제가 될 수 있습니다.

예시:

def numbers
  puts 123
end

numbers
# => nil

이 예제에서 numbers 메서드는 화면에 123을 출력하지만, 반환값은 nil입니다.

만약 다음과 같이 코드를 작성하면:

result = numbers

result에는 123이 아니라 nil이 저장됩니다.

하지만 p를 사용하면 의도한 대로 동작합니다.

보기 좋게 출력하는 pp

루비에는 출력 메서드가 하나 더 있습니다.

바로 pp입니다.

p와 비슷하지만, 크기가 큰 해시(hash)나 배열을 훨씬 읽기 좋은 형태로 출력해 줍니다.

참고로 구버전 루비(2.4 미만)에서는 이 메서드를 사용하려면 먼저 require 'pp'를 실행해야 합니다.

핵심 차이 한눈에 보기

메서드 줄바꿈 추가 배열 한 줄씩 출력 raw 형태 출력 반환값
puts O O X nil
print X X X nil
p O X O 전달된 객체
pp O X O (보기 좋게) 전달된 객체

마무리

지금까지 루비의 puts, print, p(그리고 pp)의 차이점에 대해 알아보았습니다!

이제 연습할 시간입니다.

새로 배운 내용은 바로 연습해야 지식으로 자리 잡습니다. 연습하지 않으면 금방 잊어버리고 실력도 늘지 않으니, 지금 바로 직접 코드를 실행해 보며 차이를 몸으로 익혀보세요!