루비 문자열 탐색: 포함(include?), 시작/끝(start_with?/end_with?), 특정 위치 접근([]) 완벽 가이드
🎯 이번 시간 학습 목표
지난 시간에는 문자열의 대소문자를 바꾸고(upcase
/downcase
) 앞뒤 공백을 제거하는(strip
) 방법을 배웠습니다. 이번 시간에는 문자열 안을 좀 더 자세히 들여다보는 기술들을 연마해 볼 거예요! 🕵️♀️
- ✅
include?
: 문자열 안에 특정 내용이 포함되어 있는지 확인하기 - ✅
start_with?
: 문자열이 특정 내용으로 시작하는지 확인하기 - ✅
end_with?
: 문자열이 특정 내용으로 끝나는지 확인하기 - ✅
[]
(인덱싱): 문자열의 특정 위치에 있는 글자에 접근하기 (기초)
이 기능들을 잘 활용하면 문자열 데이터를 분석하고 원하는 정보를 찾아내는 데 큰 도움이 될 거예요. 마치 탐정이 단서를 찾는 것처럼요! 자, 코드를 통해 직접 탐험해봅시다! 🚀
✨ 오늘 배울 내용 미리보기
함수/메소드 | 설명 | 간단 예시 |
---|---|---|
include?(substring) |
문자열 안에 substring 이 포함되어 있으면 true , 아니면 false 를 반환합니다. |
"ruby".include?("ub") → true |
start_with?(prefix) |
문자열이 prefix 로 시작하면 true , 아니면 false 를 반환합니다. |
"hello".start_with?("he") → true |
end_with?(suffix) |
문자열이 suffix 로 끝나면 true , 아니면 false 를 반환합니다. |
"world".end_with?("ld") → true |
[index] |
문자열의 index 위치(0부터 시작)에 있는 한 글자를 반환합니다. |
"code"[1] → "o" |
[start..end] |
문자열의 start 위치부터 end 위치까지의 부분을 반환합니다. |
"ruby"[1..2] → "ub" |
[start, length] |
문자열의 start 위치부터 length 길이만큼의 부분을 반환합니다. |
"ruby"[1, 2] → "ub" |
📌 위 표는 각 메소드의 핵심 기능을 보여줍니다. 아래에서 더 자세한 사용법과 주의사항을 알아볼게요!
🔍 숨은 그림 찾기! include?
문자열 안에 내가 찾고 있는 특정 단어나 글자가 들어있는지 확인하고 싶을 때 include?
메소드를 사용합니다. 결과는 참(true
) 또는 거짓(false
)으로 알려줘요.
sentence = "Ruby is fun and powerful!"
puts sentence.include?("fun") # 출력 결과: true
puts sentence.include?("Ruby") # 출력 결과: true
puts sentence.include?("easy") # 출력 결과: false
puts sentence.include?("!") # 출력 결과: true (특수 문자도 가능)
puts sentence.include?("ruby") # 출력 결과: false (대소문자를 구분합니다!)
주의사항⚠️: include?
는 대소문자를 엄격하게 구분합니다. "Ruby"는 포함되어 있지만 "ruby"는 포함되어 있지 않다고 판단하는 것을 볼 수 있죠? 만약 대소문자 구분 없이 확인하고 싶다면, 비교하기 전에 upcase
나 downcase
메소드를 먼저 적용하는 방법을 사용할 수 있습니다.
sentence = "Ruby is fun!"
search_term = "ruby"
# 먼저 모두 소문자로 바꾼 후 비교
puts sentence.downcase.include?(search_term.downcase) # 출력 결과: true
🚦 시작과 끝을 알려줘! start_with?
/ end_with?
문자열이 특정 패턴으로 시작하는지 또는 끝나는지 확인해야 할 때가 있습니다. 파일 확장자를 검사하거나, 특정 형식의 메시지를 필터링할 때 유용하게 쓰이죠. 이때 start_with?
와 end_with?
메소드가 활약합니다!
filename = "report.pdf"
url = "https://example.com"
# start_with? 예제
puts filename.start_with?("report") # 출력 결과: true
puts filename.start_with?("image") # 출력 결과: false
puts url.start_with?("https://") # 출력 결과: true
puts url.start_with?("http://") # 출력 결과: false
# end_with? 예제
puts filename.end_with?(".pdf") # 출력 결과: true
puts filename.end_with?(".txt") # 출력 결과: false
puts url.end_with?(".com") # 출력 결과: true
puts url.end_with?("/") # 출력 결과: false
# 대소문자를 구분합니다!
puts filename.start_with?("Report") # 출력 결과: false
이 메소드들 역시 include?
처럼 대소문자를 구분한다는 점을 기억하세요!
꿀팁🍯: start_with?
와 end_with?
에는 여러 개의 후보 문자열을 전달하여 그중 하나라도 일치하는지 확인할 수도 있습니다. (단, 루비 버전에 따라 지원 여부가 다를 수 있으니 공식 문서를 참고하는 것이 좋습니다.)
# 예시 (Ruby 2.6 이상)
image_file = "photo.jpg"
puts image_file.end_with?(".jpg", ".png", ".gif") # 출력 결과: true
🎯 원하는 글자만 콕! 인덱싱 []
기초
문자열에서 특정 위치에 있는 글자 하나를 가져오거나, 일부분을 잘라내고 싶을 때 대괄호 []
를 사용합니다. 이를 **인덱싱(indexing)** 또는 **슬라이싱(slicing)**이라고 부릅니다.
💥 **중요:** 루비에서 인덱스는 항상 0부터 시작합니다! 첫 번째 글자의 위치는 0, 두 번째는 1, 이런 식이죠.
1️⃣ 특정 위치의 글자 하나 가져오기: `[index]`
word = "Ruby"
puts word[0] # 출력 결과: "R" (첫 번째 글자)
puts word[1] # 출력 결과: "u" (두 번째 글자)
puts word[3] # 출력 결과: "y" (네 번째 글자)
# 음수 인덱스: 뒤에서부터 셉니다!
puts word[-1] # 출력 결과: "y" (마지막 글자)
puts word[-2] # 출력 결과: "b" (뒤에서 두 번째 글자)
음수 인덱스는 특히 마지막 글자나 끝에서 몇 번째 글자에 접근할 때 아주 편리합니다.
2️⃣ 여러 글자 잘라내기 (슬라이싱): `[start..end]` 또는 `[start, length]`
문자열의 일부분을 가져올 때는 두 가지 방법을 주로 사용합니다.
[start..end]
:start
인덱스부터end
인덱스까지의 모든 글자를 포함하여 가져옵니다. (..
사용)[start, length]
:start
인덱스부터 시작해서length
개수만큼의 글자를 가져옵니다.
message = "Hello, World!"
# [start..end] 사용
puts message[0..4] # 출력 결과: "Hello" (0부터 4까지)
puts message[7..11] # 출력 결과: "World" (7부터 11까지)
puts message[0..-1] # 출력 결과: "Hello, World!" (처음부터 끝까지)
puts message[-6..-2] # 출력 결과: "World" (뒤에서 6번째부터 뒤에서 2번째까지)
# [start, length] 사용
puts message[0, 5] # 출력 결과: "Hello" (0부터 5개)
puts message[7, 5] # 출력 결과: "World" (7부터 5개)
puts message[-1, 1] # 출력 결과: "!" (마지막 글자 1개)
🤔 어라? 글자가 아니라nil
이 나와요!
인덱싱을 할 때 지정한 위치(인덱스)가 문자열의 범위를 벗어나면 루비는 오류를 발생시키는 대신nil
(값이 없음)을 반환합니다. 슬라이싱의 경우 빈 문자열(""
)이나nil
을 반환할 수 있습니다.주의사항⚠️:word = "Ruby" puts word[4] # 출력 결과: nil (인덱스 4는 범위를 벗어남) puts word[10] # 출력 결과: nil puts word[5..10] # 출력 결과: nil puts word[1, 10] # 출력 결과: "uby" (1부터 시작해서 최대 길이만큼 가져옴) puts word[4, 2] # 출력 결과: "" (시작 위치가 범위를 벗어나면 빈 문자열)
nil
값이 반환될 수 있다는 점을 항상 염두에 두고 코드를 작성해야 예기치 않은 오류(예: `nil`에 대해 메소드를 호출하는 경우)를 방지할 수 있습니다.
✨ 문자열 탐색 능력 레벨 업! ✨
와우! 이제 여러분은 루비 문자열 속에서 원하는 정보를 찾아내고(include?
, start_with?
, end_with?
), 특정 부분을 정확하게 짚어내는([]
) 탐색 기술까지 마스터했습니다! 🥳
이 능력들은 문자열 데이터를 검증하고, 필요한 부분만 추출하며, 조건에 따라 다른 처리를 하는 등 프로그래밍의 다양한 상황에서 빛을 발할 것입니다.
다음 시간에는 문자열을 특정 기준으로 나누고(split
), 문자열 안의 내용을 다른 내용으로 바꾸는(gsub
, sub
) 강력한 편집 기술을 배워보겠습니다. 문자열 마스터가 되는 그날까지, 함께 달려봐요! 😉