웹사이트 검색

Ruby에서 데이터 유형을 변환하는 방법


소개

생성하는 각 프로그램에는 여러 데이터 유형이 포함되지만 일반적으로 동일한 데이터 유형 내에서 작업을 수행한다는 점을 염두에 두어야 합니다. 즉, 숫자에 대한 수학을 수행하거나 문자열을 결합하게 됩니다.

키보드, API 응답 또는 데이터베이스와 같은 외부 소스에서 데이터를 가져오는 경우가 있으며 이를 사용하려면 데이터를 변환해야 합니다. Ruby는 한 데이터 유형에서 다른 데이터 유형으로 값을 변환하는 여러 가지 방법을 제공합니다. 이 자습서에서는 문자열을 숫자로, 객체를 문자열로, 문자열을 배열로 변환하고 문자열과 기호를 변환합니다.

문자열을 숫자로 변환

Ruby는 문자열을 숫자로 변환하는 to_ito_f 메서드를 제공합니다. to_i는 문자열을 정수로 변환하고 to_f는 문자열을 float로 변환합니다.

"5".to_i       # 5
"55.5".to_i    # 55
"55.5".to_f    # 55.5

이를 시연하기 위해 두 개의 숫자를 입력하고 합계를 표시하는 작은 프로그램을 만드십시오. 다음 코드를 사용하여 adder.rb라는 새 Ruby 프로그램을 만듭니다.

print "What is the first number? "
first_number = gets.chop

print "What is the second number? "
second_number = gets.chop

sum = first_number + second_number

print sum

프로그램을 실행하면 예상치 못한 답변처럼 느껴질 수 있는 결과를 얻을 수 있습니다.

  1. ruby adder.rb
Output
What is the first number? 5 What is the second number? 5 55

이 프로그램은 55의 합이 55라고 말합니다. 그것이 옳지 않다는 것을 알지만 컴퓨터가 기술적으로 잘못된 것은 아닙니다. 프로그램은 두 개의 숫자를 입력하라는 메시지를 표시했지만 키보드에 입력했습니다. 5 번호를 보내지 않았습니다. 문자 5를 보냈습니다. 즉, 프로그램은 두 입력을 모두 문자열로 인식하고 \5\\5\ 문자열을 함께 추가하면 새 문자열 < 코드>55.

이를 방지하려면 두 문자열을 모두 숫자로 변환하십시오. to_f 메서드를 사용하여 두 숫자를 부동 소수점 수로 변환하도록 프로그램을 수정합니다.

print "What is the first number? "
first_number = gets.chop

print "What is the second number? "
second_number = gets.chop

# convert strings to numbers
first_number = first_number.to_f
second_number = second_number.to_f

sum = first_number + second_number

print sum

프로그램을 다시 실행하십시오.

  1. ruby adder.rb

이번에는 출력이 달라집니다.

Output
What is the first number? 5 What is the second number? 5 10.0

55를 다시 입력하면 10.0이 됩니다.

to_ito_f 메서드는 문자열이 숫자가 아닐 때 몇 가지 흥미로운 동작을 합니다. 예를 들어:

"123-abc".to_i
Output
123

이 예에서 문자열 \123-abc\를 정수로 변환하면 정수 123이 됩니다. to_i 메서드는 첫 번째 숫자가 아닌 문자에 도달하면 중지됩니다. Ruby 웹 개발자는 15-sammy-shark와 같은 URL을 생성하여 이를 악용합니다. 여기서 15는 레코드를 조회하기 위한 내부 ID이지만 sammy-shark는 내부 ID입니다.는 URL에 텍스트 설명을 제공합니다. Ruby가 15-sammy-sharkto_i가 있는 정수로 변환하면 결과는 15이고 -sammy-shark 부분이 잘려서 버려집니다. 그런 다음 정수를 사용하여 데이터베이스에서 레코드를 검색할 수 있습니다.

다음은 방심할 수 있는 정수 동작의 또 다른 예입니다.

"abc".to_i
Output
0

이 예제에서 to_i 메서드는 0을 반환합니다. 문자열의 어떤 문자도 변환할 수 없었기 때문입니다. 이로 인해 원하지 않는 동작이 발생할 수 있습니다. 사용자가 프로그램에 \abc\를 입력하고 해당 값을 정수로 변환하고 일부 숫자를 해당 값으로 나누면 0으로 나눌 수 없기 때문에 프로그램이 중단됩니다.

Ruby는 이 변환을 수행하는 다른 방법을 제공합니다. 대신 IntegerFloat 메서드를 사용하여 데이터를 변환할 수 있습니다.

Integer("123")
Output
123

Integer 메서드에 변환할 수 없는 값을 전달하면 Ruby에서 오류가 발생합니다.

Integer("123abc")
Output
ArgumentError: invalid value for Integer(): "123abc"

그런 다음 오류를 처리하고 사용자에게 더 나은 데이터를 제공하도록 요청하는 메시지를 제공할 수 있습니다. 이 접근 방식은 덜 편리하지만 데이터가 강제되지 않기 때문에 데이터 무결성이 향상될 수 있습니다.

다음으로 다른 유형의 데이터를 문자열로 변환하는 방법을 배웁니다.

데이터를 문자열로 변환

Ruby는 다른 유형을 문자열로 변환하는 to_s 메서드를 제공합니다.

25.to_s                    # "25"
(25.5).to_s                # "25.5"
["Sammy", "Shark"].to_s    # "[\"Sammy\", \"Shark\"]"

프로그램 출력을 생성할 때 종종 데이터를 문자열로 변환합니다.

운동 후 사람의 일일 칼로리 소모량을 추적하고 싶다고 가정해 보겠습니다. 이 진행 상황을 사용자에게 보여주려고 합니다. 즉, 문자열과 숫자 값을 동시에 출력하게 됩니다.

다음 콘텐츠가 포함된 calculators.rb라는 파일을 만듭니다.

user = "Sammy"
calories = 100

print "Congratulations, " + user + "! You just burned " + calories + " calories during this workout."

이 프로그램에서 이름과 칼로리를 하드 코딩하고 있지만 실제 프로그램에서는 데이터베이스나 API와 같은 다른 소스에서 해당 값을 검색합니다.

다음 프로그램을 실행합니다.

  1. ruby calories.rb

이 프로그램을 실행하면 다음과 같은 오류 메시지가 나타납니다.

Output
... TypeError: no implicit conversion of Integer into String (TypeError)

루비는 칼로리 변수를 나머지 출력에 추가하도록 허용하지 않습니다. 왜냐하면 그것은 정수이기 때문입니다. 칼로리 데이터가 제어할 수 없는 곳에서 올 수 있기 때문에 따옴표를 붙여서 문자열로 변경할 수 없습니다. 대신 나머지 출력에 연결할 수 있도록 칼로리 데이터를 문자열로 변환해야 합니다.

to_s 메서드를 사용하여 칼로리를 문자열로 변환하도록 출력 줄을 수정합니다.

user = "Sammy"
calories = 100

print "Congratulations, " + user + "! You just burned " + calories.to_s + " calories during this workout."

프로그램을 다시 실행하면 예상한 결과를 얻을 수 있습니다.

Output
Congratulations, Sammy! You just burned 100 calories during this workout.

또 다른 옵션은 객체를 자동으로 문자열로 변환하는 Ruby의 문자열 보간 기능을 사용하는 것입니다.

대신 문자열 보간을 사용하도록 프로그램의 출력 라인을 다시 작성하십시오.

print "Congratulations, #{user}! You just burned #{calories} calories during this workout."

프로그램을 다시 실행하십시오. 문자열 보간 방법을 사용하여 동일한 출력을 확인할 수 있습니다.

Ruby 객체는 모두 자체 to_s 구현을 제공하며 이는 출력에 적합할 수도 있고 적합하지 않을 수도 있습니다. 찾고 있는 출력을 얻기 위해 고유한 코드를 작성하거나 데이터 형식을 지정하는 다른 방법을 조사해야 할 수 있습니다.

참고: Ruby 개체는 디버깅에 유용한 inspect 메서드도 제공합니다. inspect 메서드는 to_s와 동일하게 작동합니다. 종종 개체와 해당 데이터의 문자열 표현을 반환합니다. 프로덕션 앱에서는 inspect를 사용하지 않지만 코드를 작성하는 동안 변수를 볼 때 puts와 함께 사용할 수 있습니다.

다음으로 문자열을 배열로 변환하는 방법을 배웁니다.

문자열을 배열로 변환

문자열이 있는 경우 split 메서드를 사용하여 문자열을 배열로 변환할 수 있습니다.

"one two three".split
Output
["one", "two", "three"]

split 메서드에 인수로 전달하여 구분 기호로 사용할 문자를 지정할 수 있습니다.

쉼표로 구분된 상어 문자열을 포함하는 data_import.rb라는 프로그램을 만듭니다. 프로그램은 데이터를 가져와 배열로 변환하고 정렬한 다음 각 요소를 화면에 출력합니다.

data = "Tiger,Great White,Hammerhead,Whale,Bullhead"

# Convert data to an array by splitting on commas
sharks = data.split(",")

# Sort the sharks alphabetically
sharks = sharks.sort!

# Print out the sharks by iterating through the array
sharks.each{|shark| puts shark }

프로그램을 실행합니다:

  1. ruby data_import.rb

결과는 다음과 같습니다.

Output
Bullhead Great White Hammerhead Tiger Whale

Ruby의 배열은 강력한 데이터 구조입니다. 이것은 그것들을 사용하여 데이터를 처리하는 한 가지 방법을 보여줍니다.

마지막으로 문자열과 기호 사이를 변환하는 방법을 배울 수 있습니다.

문자열과 기호 간 변환

기호를 표시할 수 있도록 기호를 문자열로 변환하고 싶을 수도 있고 해시에서 무언가를 조회하는 데 사용할 수 있도록 문자열을 기호로 변환하려는 경우도 있을 것입니다.

Ruby의 to_s 메서드는 기호에서도 작동하므로 기호를 문자열로 변환할 수 있습니다.

:language.to_s
Output
"language"

심볼을 표시해야 하고 표시 방식을 변환하려는 경우에 유용합니다. 예를 들어, 다음 프로그램은 :first_name 기호를 사용하여 사람이 더 읽기 쉬운 \First name\ 문자열로 변환합니다.

string = :first_name.to_s

# replace underscore with a space and capitalize
string = string.gsub("_"," ").capitalize

문자열을 기호로 변환하려면 다음과 같이 to_sym 메서드를 사용하십시오.

"first_name".to_sym
Output
:first_name

\First name\ 문자열을 :first_name 기호로 변환하려면 모든 문자를 소문자로 만들고 공백을 밑줄로 바꿉니다.

string = "First name"

# replace spaces with underscores and convert to lowercase
string = string.gsub(" ","_").downcase

# Convert to symbol
symbol = string.to_sym 

사람에게 친숙한 형식으로 화면에 기호를 표시하거나 키에 대한 기호를 사용하는 해시에서 문자열을 사용하여 키를 조회하는 등 이러한 변환을 수행하려는 경우를 찾을 수 있습니다.

결론

이 자습서에서는 기본 제공 메서드를 사용하여 몇 가지 중요한 기본 데이터 형식을 다른 데이터 형식으로 변환하는 방법을 보여 주었습니다. 이제 숫자를 문자열로, 문자열을 배열로 변환하고 기호와 문자열 간에 변환할 수 있습니다.

Ruby의 데이터 유형을 계속 탐색하려면 다음 자습서를 살펴보십시오.

  • Ruby에서 문자열로 작업하는 방법\n
  • Ruby에서 배열로 작업하는 방법\n