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

Ruby에서 Heredoc(히어독)을 활용하는 방법 완벽 가이드

Ruby로 개발하다 보면 여러 줄에 걸친 문자열을 코드 안에 그대로 넣고 싶은 순간이 자주 찾아옵니다. SQL 쿼리, HTML 조각, 설정 텍스트 등을 매번 따옴표와 \n으로 조립하는 것은 번거롭고 가독성도 떨어지죠. 이럴 때 유용한 것이 바로 heredoc(히어독)입니다.

Heredoc이란 무엇인가?

Heredoc은 여러 줄의 문자열을 정의하는 문법으로, 원본의 들여쓰기와 서식을 그대로 유지할 수 있다는 것이 가장 큰 특징입니다.

주로 SQL이나 HTML처럼 구조화된 코드 조각을 소스 코드 안에 직접 삽입할 때 활용됩니다.

기본 예제를 살펴보겠습니다:

query = <<-SQL
SELECT * FROM food
WHERE healthy = true
SQL

Ruby에서 heredoc을 정의하는 문법은 다음과 같습니다.

<<- 기호로 시작하고, 이어서 이 heredoc을 식별할 이름(SQL)을 붙입니다. 그다음 원하는 문자열 내용을 작성한 뒤, 같은 이름을 한 줄에 단독으로 적어 heredoc을 닫아주면 됩니다.

%Q를 사용한 대안

여러 줄 문자열을 만드는 또 다른 방법으로 %Q를 사용할 수 있습니다.

query = %Q(

  Article about heredocs

)

다만 이 방식에는 한 가지 단점이 있습니다. 문자열의 시작과 끝에 불필요한 줄바꿈(newline)이 추가된다는 점이죠. 이 문제는 heredoc을 사용하거나 strip 메서드를 호출하면 해결됩니다.

다음은 끝의 줄바꿈을 제거한 Ruby heredoc 예제입니다:

query = <<-HTML.chomp

  Article about heredocs

HTML

.chomp를 호출하면 문자열 마지막의 줄바꿈 문자가 깔끔하게 사라집니다.

Heredoc에서 문자열 보간(Interpolation) 사용하기

"Heredoc 안에서도 문자열 보간(string interpolation)을 쓸 수 있을까?"라는 궁금증이 드실 텐데요,

정답은 네, 가능합니다!

예제:

type  = "healthy"
table = "food"

query = <<-SQL
SELECT * FROM #{table}
WHERE #{type} = true
SQL

#{} 구문을 사용해 변수 값을 동적으로 삽입할 수 있어, 상황에 맞는 쿼리나 텍스트를 손쉽게 생성할 수 있습니다.

보간 비활성화하기

반대로 #{}가 실제 값으로 치환되는 것을 원하지 않는 경우도 있습니다. 이때는 heredoc 이름을 작은따옴표(single quotes)로 감싸면 됩니다.

이렇게 말이죠:

doc = <<-'TIME'
Current time is #{Time.now}
TIME

이렇게 하면 #{Time.now}가 평가되지 않고 문자 그대로 출력됩니다.

Squiggly Heredoc(<<~)으로 들여쓰기 정리하기

그렇다면 각 줄 앞에 붙은 불필요한 들여쓰기는 어떻게 제거할 수 있을까요?

바로 이런 용도로 만들어진 것이 squiggly heredoc입니다.

Ruby 2.3에서 도입된 squiggly heredoc(<<~)은 여분의 들여쓰기를 자동으로 제거해 줍니다.

비교 예제:

page = <<-HTML
  Heredocs are cool & useful
HTML

# "  Heredocs are cool & useful\n"

page = <<~HTML
  Heredocs are cool & useful
HTML

# "Heredocs are cool & useful\n"

page = <<~HTML.strip
  Heredocs are cool & useful
HTML

# "Heredocs are cool & useful"

squiggly heredoc을 사용하면 코드상에서는 들여쓰기를 유지해 가독성을 높이면서도, 실제 생성되는 문자열에는 불필요한 공백이 포함되지 않습니다. 두 마리 토끼를 모두 잡는 셈이죠!

마무리 정리

지금까지 Ruby에서 heredoc을 활용해 여러 줄 문자열을 코드에 삽입하는 방법을 알아보았습니다. 핵심 내용을 요약하면 다음과 같습니다.

  • <<-NAME: 기본적인 heredoc 문법
  • .chomp 또는 .strip: 불필요한 줄바꿈 및 공백 제거
  • #{}: 문자열 보간 지원 (작은따옴표로 감싸면 비활성화)
  • <<~NAME: Ruby 2.3+ 에서 들여쓰기 자동 제거

이러한 기법은 코드 테스트를 작성하거나, 파일을 읽어오지 않고도 작은 데이터 조각을 바로 사용해야 할 때 특히 유용합니다. 실무에서 SQL, HTML, YAML 등을 다룰 때 적극적으로 활용해 보시기 바랍니다.

읽어주셔서 감사합니다!