Ruby의 gsub 메서드에 대해 알아보겠습니다. 이 메서드를 사용하려면 먼저 다룰 문자열이 필요합니다.
왜냐고요?
gsub의 핵심 목적은 바로 문자열의 일부를 대체하는 것이기 때문입니다.
사실, 'gsub'에서 'sub'는 'substitute(대체)'를 의미하고, 'g'는 'global(전역)'을 뜻합니다.
예시 문자열을 하나 준비해 보겠습니다:
str = "white chocolate"
여기서 'white'라는 단어를 'dark'로 바꾸고 싶다고 가정해 봅시다.
방법은 간단합니다:
str.gsub("white", "dark")
이 코드의 의미는 다음과 같습니다:
문자열 str에서 첫 번째 단어(white)가 등장하는 모든 부분을 두 번째 단어(dark)로 교체하라는 것입니다.
덕분에 우리는 훨씬 맛있는 초콜릿을 먹게 되었네요.
아, 잠깐, 이건 그냥 문자열이죠.
먹을 수는 없습니다! 🙂
어쨌든...
Ruby의 gsub 메서드는 단순한 치환 이상의 기능을 제공합니다.
몇 가지 실용적인 예제를 살펴보겠습니다.
1. 정규표현식으로 패턴 치환하기
단일 단어를 교체하는 것도 좋지만, 특정 패턴을 교체할 수 있다면 어떨까요?
예를 들어:
연도, 이메일 주소, 전화번호 같은 것들 말입니다.
물론 가능합니다!
예제:
"a1".gsub(/\d/, "2") # "a2"
첫 번째 인자는 정규표현식인데, 이 주제만으로도 책 한 권 분량이라 여기서 자세히 다루기는 어렵습니다.
간단히 말해 정규표현식은 패턴 매칭 언어입니다.
위 예제에서 \d는 숫자를 찾습니다. 즉, "a1" 속의 숫자 "1"을 찾아내는 것이죠.
이런 것도 가능합니다:
"a1".gsub(/(\w)(\d)/, '\2\1')
결과:
"1a"
순서가 뒤바뀌었습니다!
이것은 '캡처 그룹(capture groups)'이라는 기능 덕분에 작동합니다.
그룹은 괄호로 생성되며, 첫 번째 그룹은 \1, 두 번째 그룹은 \2 형태로 참조할 수 있습니다.
2. 블록을 활용한 고급 gsub
gsub에 블록을 함께 사용하면 훨씬 흥미로워집니다.
이유가 무엇일까요?
블록 안에서는 로직을 사용해 무엇을 어떻게 교체할지 동적으로 결정할 수 있기 때문입니다.
정적인 값만 사용하는 것과는 비교가 되죠.
예제:
"dog".gsub(/\w+/) { |animal| animal == "dog" ? "cat" : "dog" }
\w+는 '하나 이상의 영숫자'를 의미하며, 이를 통해 동물 이름을 찾아냅니다.
그다음:
- 찾은 단어가 "dog"라면 "cat"으로 교체하고
- 그 외의 단어라면 "dog"로 교체합니다
이런 조건부 로직은 두 번째 인자에 고정된 값을 넣는 방식으로는 구현할 수 없습니다.
3. 해시로 여러 항목 한 번에 치환하기
교체해야 할 목록이 여러 개 있다면 해시(hash)를 사용할 수 있습니다.
다음과 같이 말이죠:
colors = {
"B" => "blue",
"G" => "green",
"R" => "red"
}
이것은 마치 번역 사전처럼 작동하며, 키(key)가 해당 값(value)으로 교체됩니다.
예제:
"BBBGR".gsub(/\w/, colors)
결과:
"bluebluebluegreenred"
주의할 점은 첫 번째 인자가 해시의 키와 일치하도록 만들어야 한다는 것입니다.
이 예제에서 \w는 개별 문자와 매칭되므로, "B"를 찾아 "blue"로 교체하게 됩니다.
마무리
지금까지 Ruby의 gsub 메서드에 대해 배웠습니다! gsub는 문자열 내부의 문자를 교체하거나 대체할 수 있는 강력한 메서드입니다.
다양한 용도로 활용할 수 있습니다:
- 유효하지 않은 문자 제거 (두 번째 인자를 빈 문자열로 지정)
- 플레이스홀더나 약어를 전체 값으로 교체
- 패턴과 로직을 활용한 문자열 변환
이제 직접 이 메서드를 연습해서 새로 배운 지식을 확실히 익혀보세요.
읽어주셔서 감사합니다 🙂