Ruby는 인터프리터 방식의 동적, 반사적, 객체 지향 프로그래밍 언어입니다. 마츠모토 유키히로가 개발한 Ruby는 단순함과 생산성에 초점을 맞추고 있습니다. 우아한 구문 덕분에 개발자는 코드를 더 쉽게 읽고 쓸 수 있습니다.
이 가이드에서는 Ruby에서 문자열을 다루는 방법을 알아봅니다.
전제 조건
이 튜토리얼에 설명된 단계를 수행하려면 다음 구성 요소가 필요합니다.
- 올바르게 구성된 Ubuntu 시스템. 자세한 내용은 CloudSigma에서 자체 Ubuntu 서버 구성하기.
- 구문 강조 기능이 있는 최신 텍스트 에디터(예: VS Code, Sublime Text, Atom, Brackets, Vim 등)
문자열 데이터 타입
프로그래밍에서 문자열은 모든 최신 프로그래밍 언어가 지원하는 일반적인 데이터 타입입니다. 이는 일련의 문자 시퀀스로 특징지어집니다. 전체 문자 시퀀스는 단일 데이터 조각으로 처리됩니다. 문자열에는 알파벳, 숫자 및 특수 문자/기호가 포함될 수 있습니다.
순수 객체 지향 프로그래밍 언어인 Ruby는 문자열을 객체로 취급합니다. 다른 많은 언어와 달리 Ruby의 문자열은 가변적(mutable)입니다. 기본적으로 문자열 값은 그 자리에서 변경될 수 있습니다.
단계 1 – 문자열 생성 및 출력
Ruby에서 문자열은 작은따옴표( ') 또는 큰따옴표( ")로 감싸집니다. 다음은 Ruby에서 유효한 두 개의 문자열입니다.
|
1 2 |
'the quick brown fox' "jumps over the lazy dog" |
콘솔 화면에 출력을 인쇄하기 위해 Ruby에는 print 메서드가 제공됩니다.
|
1 2 |
print 'the quick brown fox' print "jumps over the lazy dog" |
이제 실제로 적용해 볼 시간입니다. 새로운 Ruby 파일 practice.rb를 생성하고 다음 코드를 입력하세요.
코드를 실행합니다:
|
1 |
ruby practice.rb |
예상대로 print 명령은 제공된 문자열을 출력합니다. 문자열을 별도의 줄에 출력하려면 대신 puts를 사용하는 것이 좋습니다. 코드를 업데이트하세요:
|
1 2 |
puts 'the quick brown fox' puts "jumps over the lazy dog" |
다음으로 코드를 다시 실행합니다:
|
1 |
ruby practice.rb |
단계 2 – 문자열 변수
변수는 값이 저장되는 컴퓨터 메모리의 특정 위치를 가리키는 이름입니다. 원하는 값을 변수에 저장하고 나중에 사용할 수 있습니다.
Ruby에서 문자열 변수를 선언하려면 변수 이름을 정의하고 문자열 값을 할당합니다.
|
1 |
<variable_name> = <string> |
다음 코드를 practice.rb:
|
1 2 3 4 |
first_half = 'the quick brown fox' second_half = "jumps over the lazy dog" puts first_half puts second_half |
코드를 실행합니다:
|
1 |
ruby practice.rb |
설명:
- 두 개의 변수 first_half 및 second_half를 정의하고 각각에 문자열 값을 할당했습니다.
- The puts 메서드는 변수의 값을 출력합니다.
단계 3 – 문자열 연결
연결(concatenation)을 통해 여러 문자열을 결합하여 새로운 문자열을 만들 수 있습니다. 문자열 연결은 연결 연산자( +)로 표시됩니다. 이 기호는 산술 연산을 수행할 때 더하기 연산자이기도 합니다.
지금까지 선언한 문자열에 대해 문자열 연결을 수행해 보겠습니다.
|
1 |
puts "the quick brown fox" + "jumps over the lazy dog" |
코드를 실행합니다:
|
1 |
ruby practice.rb |
출력 결과에서 볼 수 있듯이, 연결은 문자열 사이에 추가 문자를 삽입하지 않습니다. 그렇기 때문에 fox와 jumps가 서로 붙어 있게 됩니다. 뒤에 공백을 추가하여 이를 해결할 수 있습니다.fox:
|
1 |
puts "the quick brown fox " + "jumps over the lazy dog" |
코드를 실행합니다:
|
1 |
ruby practice.rb |
이제 출력이 더 보기 좋아졌습니다.
문자열 연결은 변수와도 함께 작동합니다. 다음 예를 살펴보세요:
|
1 2 |
first_half = "the quick brown fox " puts first_half + "jumps over the lazy dog" |
코드를 실행합니다:
|
1 |
ruby practice.rb |
다음 예제는 긴 연결 체인을 보여줍니다:
|
1 2 3 |
username = "cloudsigma" fav_color = "blue" puts "hello, " + username + "! your favorite color is " + fav_color + "." |
코드를 실행합니다:
|
1 |
ruby practice.rb |
지금까지는 문자열 변수만 다루었습니다. 만약 다른 변수 타입이 있다면 어떻게 될까요? 다음 프로그램은 이 시나리오를 테스트합니다:
|
1 2 3 |
username = "cloudsigma" user_id = 20 puts username + user_id |
이 프로그램을 실행하려고 하면 Ruby에서 오류 메시지가 발생합니다:
|
1 |
ruby practice.rb |
하지만 이 문제를 피하기 위해 정수를 문자열로 변환할 수 있습니다:
|
1 2 3 |
username = "cloudsigma" user_id = 20 puts username + user_id.to_s |
여기서:
-
메서드 to_s는 변수 값을 문자열로 변환합니다.
우편번호, 통화, 전화번호 및 기타 숫자 데이터와 같은 요소를 다룰 때 숫자를 문자열로 변환하는 것은 흔히 일어나는 일입니다.
4단계 – 문자열 보간 (String Interpolation)
문자열 연결은 강력한 기능이지만, 매우 쉽게 까다로워질 수 있습니다. 많은 상황에서 연결 연산자( +)를 누락하여 골머리를 앓게 될 것입니다. 게다가 서로 다른 데이터 타입을 다룰 때는 먼저 문자열로 변환해야 합니다. 다행히도 Ruby는 다음 기능을 사용하여 문자열에 변수 값을 주입하는 다른 방법을 제공합니다: 문자열 보간 (string interpolation).
사용 예시는 다음과 같습니다. 예를 들어, 다음을 사용하는 대신:
|
1 |
"hello, " + username + "!" |
우리는 다음을 사용할 것입니다:
|
1 |
"hello, #{username}!" |
구문이 약간 어색해 보일 수 있지만, 코드를 극적으로 단순화합니다. 수동으로 to_s 메서드를 호출하여 변수 값을 문자열로 변환할 필요가 없습니다.
이 새로운 기술을 사용하여 이전 코드를 업데이트해 보겠습니다:
|
1 2 3 |
username = "cloudsigma" user_id = 20 puts "hello, #{username}! your user ID is #{user_id}" |
코드를 실행합니다:
|
1 |
ruby practice.rb |
5단계 – 문자열 리터럴과 문자열 값
코드에 선언된 문자열은 항상 따옴표로 둘러싸여 있다는 점에 유의하세요. 하지만 콘솔 화면에 출력을 인쇄할 때는 따옴표 기호가 없습니다. 이 둘 사이에는 분명한 차이가 있습니다.
- 문자열 리터럴 (String literal): 소스 코드에 작성된 문자열입니다(따옴표 포함).
- 문자열 값 (String value): 출력에 인쇄되는 값입니다(따옴표 제외).
예를 들어, 다음은 문자열 리터럴입니다:
|
1 |
"hello world" |
이것의 문자열 값은 hello world.
6단계 – 따옴표 및 아포스트로피 이스케이프
앞서 보여드렸듯이, 소스 코드에서 문자열을 나타내기 위해 따옴표와 아포스트로피가 사용됩니다. 이로 인해 문제가 발생합니다. 문자열 내에 직접 사용할 수 없기 때문입니다. 그렇지 않으면 문제가 발생합니다. 다음 코드가 이를 보여줍니다:
|
1 |
puts 'it's what it is' |
이 문제를 우회하기 위한 다양한 전략이 있습니다.
-
대체 문자열 구문 사용
이것이 문제를 해결하는 가장 간단한 방법입니다. 문자열에 작은따옴표가 필요한 경우, 문자열 리터럴에 큰따옴표를 사용하세요(반대의 경우도 마찬가지입니다).
이전 예제를 수정해 보겠습니다:
|
1 |
puts "it's what it is" |
또 다른 예는 다음과 같습니다:
|
1 |
puts 'he said, "hello world"' |
하지만 모든 상황에서 작동하는 것은 아닙니다. 예를 들어:
|
1 |
puts "Clousdigma says, "I'm a happy boi!"" |
-
이스케이프 문자 사용
백슬래시( \) 문자는 종종 이스케이프 문자라고 불립니다. 이 문자는 Ruby가 다음 문자를 리터럴로 해석하는 것을 방지합니다. 이전 예제를 수정해 보겠습니다. 백슬래시를 사용하여 Ruby가 내부의 큰따옴표를 리터럴로 해석하지 않도록 하세요:
|
1 |
puts "Cloudsigma says, \"I'm a happy boi!\"" |
-
대체 구문 사용하기
지금까지는 문자열 리터럴을 나타내기 위해 작은따옴표와 큰따옴표만 사용해 왔습니다. 하지만 이전 예제들은 이것이 얼마나 쉽게 통제 불능 상태가 될 수 있는지 보여주는 간단한 예시입니다. 이 문제를 해결하기 위해 따옴표를 완전히 버리고 문자열의 시작과 끝을 나타내는 완전히 다른 기호를 사용할 수 있습니다.
다음 예제를 살펴보세요:
|
1 |
%$the quick brown fox said, "I jumped over the lazy dog"$ |
여기서:
-
- 기호 %은(는) 다음 문자( $, 이 경우에는)를 문자열의 구분 기호로 정의합니다.
- 여기서 문자열 리터럴은 $the quick brown fox said, "I jumped over the lazy dog"$.
실행해 봅시다:
|
1 |
puts %$the quick brown fox said, "I jumped over the lazy dog"$ |
여기서 문자열은 기본적으로 다음과 같이 처리됩니다:
|
1 |
"the quick brown fox said, \"I jumped over the lazy dog\"" |
하지만 문자열 내에서 구분 기호가 사용되는 경우 이를 이스케이프해야 하는 문제가 다시 발생합니다. 이를 피하는 한 가지 방법은 일반적으로 문자열에 나타나지 않는 기호를 사용하는 것입니다. 이러한 기호에는 중괄호, 대괄호 등이 포함될 수 있습니다:
|
1 |
puts %{"hello, world!", he said} |
문자열 보간(interpolation)과도 완벽하게 작동합니다:
|
1 2 3 |
username = "cloudsigma" user_id = 5 puts %{hello, #{username}.#{user_id}!} |
또한 %Q{} 및 %q{}을(를) 사용하여 Ruby 프로그램에서 문자열을 정의하는 것도 일반적입니다. 여기서 %Q{}은(는) 큰따옴표처럼 작동하고, %q{}은(는) 작은따옴표처럼 작동합니다.
7단계 – 줄바꿈과 긴 문자열
문자열을 다룰 때 문자열에 줄바꿈이나 캐리지 리턴을 넣고 싶은 상황이 있습니다. 다음과 같은 이스케이프 문자 \n (줄바꿈) 및 \r (캐리지 리턴)을 도입하여 이를 수행할 수 있습니다.
다음 예제를 살펴보세요:
|
1 2 |
hello_world = "the quick\nbrown fox\njumps over\nthe lazy dog" puts hello_world |
문자열 리터럴이 혼란스러워 보이죠? 가독성을 높이기 위해 다시 정리해 보겠습니다:
|
1 2 3 4 5 6 7 |
hello_world = "the quick\n" + "brown fox\n" + "jumps over\n" + "the lazy dog" puts hello_world |
줄바꿈 문자를 수동으로 선언하는 대신 다음과 같은 구조를 사용할 수도 있습니다:
|
1 2 3 4 5 6 |
hello_world = "the quick brown fox jumps over the lazy dog" puts hello_world |
이 방법에서는 문자열이 모든 공백을 보존합니다. 하지만 이로 인해 출력이 깔끔하지 않게 됩니다. 이를 해결하려면 추가 공백을 제거하세요:
|
1 2 3 4 5 |
hello_world = "the quick brown fox jumps over the lazy dog" |
공백 문제는 해결되었지만, 코드의 가독성이 떨어집니다. 이 문제는 heredoc(여러 줄 문자열 리터럴을 뜻하는 용어)을 구현하여 해결할 수 있습니다. 업데이트된 코드는 다음과 같습니다:
|
1 2 3 4 5 6 7 8 |
hello_world = <<-END the quick brown fox jumps over the lazy dog END puts hello_world |
Ruby v2.3 이상부터는 squiggly heredoc 구문이라는 또 다른 기능을 사용할 수 있습니다. 이 구문은 문자열의 앞쪽 공백을 제거합니다. squiggly heredoc을 표현하려면 하이픈( -)을 물결표( ~):
|
1 2 3 4 5 6 7 8 |
hello_world = <<~END the quick brown fox jumps over the lazy dog END puts hello_world |
Step 8 – 문자열 복제
어떤 상황에서는 문자열을 여러 번 반복해야 할 수도 있습니다. Ruby에서는 다양한 방법으로 문자열을 복제할 수 있습니다.
그러한 기법 중 하나는 * 연산자를 사용하는 것입니다. 일반적으로 숫자를 다룰 때는 곱셈 연산자로 사용됩니다. 하지만 문자열을 다룰 때는 이 연산자가 문자열 복제 연산자가 되어, 단일 문자열을 필요한 만큼 반복합니다. 반복 횟수는 정수여야 합니다.
다음 예제에서는 Boris 텍스트가 5번 반복됩니다:
|
1 |
print "Boris" * 5 + "\n" |
이 기능을 사용하면 멋진 ASCII 아트를 만들 수 있습니다. 다음 예제를 확인해 보세요:
|
1 2 3 |
puts "=" * 15 puts "| hello world |" puts "=" * 15 |
마치며
프로그래밍에서 문자열은 필수적입니다. 이 가이드에서는 Ruby에서 문자열을 다루는 방법을 설명했습니다. 문자열을 생성하고 연결, 줄바꿈 처리, 따옴표 처리 등 다양한 연산을 수행하는 방법을 배웠습니다. 또한 문자열 보간(interpolation)을 사용하여 변수 값을 문자열에 더 잘 통합하는 방법도 배웠습니다. 문자열 복제 연산자를 사용하면 단일 문자열을 여러 번 반복할 수도 있습니다.
Ruby 자체만으로도 훌륭한 프로그래밍 언어이지만, 종종 Rails 프레임워크와 결합되어 사용됩니다. Ruby on Rails은 오픈 소스 웹 앱 프레임워크입니다. 다음에서 설치 방법을 자세히 알아볼 수 있습니다: Ubuntu에서의 Ruby on Rails 설치. 하지만 Ruby는 다음과 같은 다른 앱과도 함께 사용할 수 있습니다: MySQL 및 PostgreSQL.
즐거운 컴퓨팅 되세요!












































댓글
아직 댓글이 없습니다. 첫 번째로 작성해 보세요.