Ruby로 개발하다 보면 여러 문자열을 하나로 합쳐야 하는 작업을 자주 하게 됩니다. 그런데 어떻게 하면 될까요?
크게 두 가지 방법이 있습니다:
- Ruby 문자열 연결(Concatenation)
- Ruby 문자열 보간(Interpolation)
1. 문자열 연결(Concatenation)
연결은 다음과 같이 사용합니다:
a = "Nice to meet you" b = ", " c = "do you like blueberries?" a + b + c # "Nice to meet you, do you like blueberries?"
+ 연산자를 사용하면 한 문자열 뒤에 다른 문자열을 붙일 수 있습니다. 위 예제의 a + b + c처럼 연결하면 새로운 문자열이 생성됩니다.
참고로 굳이 변수를 사용하지 않아도 됩니다.
예제:
puts "I like" + " " + "chocolate" # I like chocolate
+= 연산자로 문자열 붙이기
또 다른 방법은 += 연산자를 사용하는 것입니다.
예제:
a = "" a += "test" a += "test" a += "test" a # "testtesttest"
빈 문자열에서 시작해서 계속 내용을 덧붙여 더 큰 문자열을 만드는 방식입니다.
그런데 이 방법에는 한 가지 문제가 있습니다...
바로 실행 속도가 매우 느리다는 점! 해결 방법을 바로 이어서 소개합니다.
2. concat 메서드로 효율적으로 합치기
Ruby의 concat 메서드를 사용하면 문자열을 더 효율적으로 병합할 수 있습니다.
사용 방법은 다음과 같습니다:
str = ""
str.concat("a")
str.concat("a")
str
# "aa"
concat이 빠른 이유는 새 문자열을 만들지 않고 기존의 str 객체 자체를 변경하기 때문입니다.
다만 +=만큼 깔끔해 보이지는 않죠... 다른 방법은 없을까요?
네, 있습니다! concat의 별칭(alias)인 << 메서드를 사용하면 됩니다.
참고: Ruby 2.4부터는 약간의 차이가 생겼습니다.
concat은 여러 인수를 한 번에 전달할 수 있지만,<<는 한 번에 하나씩만 전달할 수 있습니다.
예제:
str = "" str << "a" str << "a"
이렇게 연속으로 사용할 수도 있습니다:
str = "" str << "a" << "a"
3. 문자열이 아닌 값 다루기: TypeError 피하기
아직 한 가지 문제가 남아 있습니다. 문자열과 변수를 합치려는데 그 변수가 문자열이 아니라면 예상치 못한 결과가 나옵니다.
직접 확인해 볼까요:
"" + 1 # TypeError: no implicit conversion of Fixnum into String "" << 1 # "\x01"
해결책은 무엇일까요? to_s 메서드를 사용해 해당 객체를 문자열로 변환하면 됩니다.
이렇게요:
"" + 1.to_s
물론 이런 식으로 코드를 작성하면 금방 지저분해지기 때문에, 더 좋은 도구가 준비되어 있습니다.
4. 문자열 보간(Interpolation) 사용법
보간(Interpolation)은 변수를 문자열 안에 삽입하는 강력한 기술입니다. 문자열을 일종의 '템플릿'처럼 활용할 수 있게 해줍니다.
예제를 살펴볼까요:
age = 33
name = "Jesus"
"Hello, my name is #{name} & I'm #{age} years old."
문자열 앞에서 name과 age 값을 설정하기만 하면 어떤 값이든 자유롭게 넣을 수 있습니다.
가장 좋은 점은 무엇일까요?
Ruby가 이 값들을 자동으로 문자열로 변환해 줍니다. 따라서 to_s를 직접 호출할 필요가 없습니다!
5. prepend로 문자열 앞에 붙이기
문자열을 합치는 또 다른 방법도 있습니다. 문자열 보간으로 새 문자열을 만들거나, <<와 concat으로 뒤에 붙이는 대신 앞에 붙이는 방식입니다.
예제:
str = ""
str.prepend("1")
str.prepend("2")
str.prepend("3")
# "321"
'append' 메서드도 있지 않을까 생각하신다면, 아쉽지만 없습니다. append는 배열(Array)에만 존재하는 메서드입니다.
마무리 정리
이번 글에서는 Ruby에서 문자열을 합치는 다양한 방법, 즉 연결(+, +=), concat, <<, prepend, 그리고 보간(#{})에 대해 배웠습니다. 상황에 맞는 방법을 선택하면 더 읽기 쉽고 성능 좋은 코드를 작성할 수 있습니다.
도움이 되셨다면 주변에 공유해 주세요 🙂
읽어주셔서 감사합니다.