루비로 시작하는 프로그래밍

일반인을 위해 프로그래밍을 가르쳐주는 튜토리얼.

2장. 글자

글자(Letters)

확인할 것 : letter, character 의미차이는? 각각 표현은 어떻게 해야?

우리는 수에 대한 모든 것을 배웠습니다만 글자, 단어, 글(text)는 어떨까요?

우리는 프로그래밍에서 글자를 모은 것을 문자열이라고 부릅니다.(글자를 모아서 플랫카드에 인쇄한 것을 연상하셔도 됩니다.) 저는 문자열을 빨간색으로 표기하겠습니다. 문자열은 다음과 같습니다.

'안녕.'
'루비는 멋져'
'5는 내가 좋아하는 수에요. 여러분은 뭐죠?'
'스누피가 발가락을 찧고서 #%^?&*@!라고 비명을 질렀어요.'

'     '
''


여러분이 보다시피, 문자열은 단순한 글자 뿐만이 아니라 마침표, 숫자, 기호, 공백을 포함할 수 있습니다. 위의 예에서 마지막 문자열은 아무것도 없습니다. 우리는 이것을 빈 문자열이라고 부릅니다.

우리는 수를 출력하기 위해  puts을 사용했습니다. puts을 사용해서 문자열을 출력해 봅시다.

puts 'Hello, world!'
puts ''
puts '그럼 안녕히!.'

#실행결과

Hello, world!

그럼 안녕히!

잘 되는군요. 이제 여러분이 직접 만든 문자열로 해보세요.
 

문자열 연산에 대해 알아봅시다. (String Arithmetic)

숫자에서 연산을 한 것과 동일하게 문자열에서 연산을 할 수 있습니다! 자. 여러분은 어쨌든 문자열을 더할 수 있습니다. 문자열 두개를 더해서 출력해 봅시다.

puts '저는' + '애플파이가 좋아요.'

#실행결과

저는애플파이가 좋아요.

이런! 제가 '저는'와 '애플파이가 좋아요.'사이에 띄어쓰기를 하는 것을 깜박했네요. 보통 공백은 중요하지 않습니다만 문자열에서는 중요합니다.(다음은 진실입니다. 컴퓨터는 여러분이 원하는 바는 할 줄 모르고, 오로지 여러분이 컴퓨터에게 말하는 것만 합니다.) 다시 해봅시다.

puts '저는 ' + '애플파이가 좋아요.'
puts '저는' + ' 애플파이가 좋아요.'

#실행결과

저는 애플파이가 좋아요.
저는 애플파이가 좋아요.

(이처럼, 공백을 어느 문자열에 넣었는지 중요하지 않습니다.)

문자열을 더할 수도 있지만, 곱할 수도 있습니다.(숫자로만 곱할 수 있지만 어쨌든) 다음을 보세요.

puts '깜박 ' * 4

#실행결과

눈을 한대 때려주세요

(농담입니다... 이건 실제로 이렇죠:)
#실행결과

깜박 깜박 깜박 깜박

이걸 생각하면 말이 됩니다. 결과적으로, 7*3은 7+7+7을 의미하고, '음메'*3은 '음메'+'음메'+'음메'를 의미합니다.
 

12 와 '12'의 차이점은 무엇일까요?

좀더 배우기 전에 우리는 수와 숫자의 차이를 이해해야 합니다. 12는 수이지만 '12'는 두 글자로 표현된 숫자입니다.

잠시 이걸 가지고 놀아 보죠.

puts  12  +  12
puts '12' + '12'
puts '12  +  12'

#실행결과

24
1212
12  +  12

자, 다음 것은 어떤가요? 어떤 결과가 나올지 한 번 예상해 보세요.

puts  2  *  5
puts '2' *  5
puts '2  *  5'

#실행결과

10
22222
2  *  5

이 예는 정말 이해하기 쉽죠. 그렇지만 어떻게 해야 문자열과 수를 같이 쓸 수 있는지 많이 신경쓸 필요는 없습니다, 이제 그런 경우를 만나게 됩니다.

문제를 풀어봅시다.

지금쯤 여러분은 동작하지 않는 경우를 시도할 수 있습니다. 그러고 싶지 않다면 다음 예를 보세요.

puts '12' + 12
puts '2' * '5'

#실행결과

#<TypeError: can't convert Fixnum into String>

음... 에러 메시지가 뜨는군요. 문제는 여러분이 수와 문자열을 더할 수 없고 문자열을 다른 문자열로 곱할 수 없다는 것입니다. 다음 예보다 더욱 더 말도 안되죠.

puts 'Betty' + 12
puts 'Fred' * 'John'

다음을 알 필요가 있습니다. 여러분은 프로그램에서 '돼지'*5 라고 할 수 있습니다. '돼지'라는 문자열 5세트를 모두 더하라는 뜻이죠. 그렇지만 5*'돼지'라고 할 수 없습니다. 이것은 5라는 수를 '돼지'만큼 보여주라..라는 의미가 되기 때문에 말이 안 되죠.

마지막으로, You're swell!을 출력하려면 어떻게 해야 할까요? 이렇게 하면 되겠죠?

puts 'You're swell!'

#실행결과 



자, 동작하지 않죠? 컴퓨터는 우리가 문자열로 무언가 하려고 한다고 생각합니다.(이게 텍스트 편집기에서 여러분을 위해 문법에 따라 색을 입히는 이유입니다.) 그러면 컴퓨터가 문자열안으로 들어가길 원한다는 점을 알게 하려면 어떻게 해야 알까요? 우리는 다음처럼 어퍼스트로피를 밖으로 빼야 합니다.

puts 'You\'re swell!'

#실행결과

You're swell!

역슬래쉬는 이스케이프(escape) 문자입니다. 다시 말해서, 여러분이 역슬래쉬와 다른 문자를 붙여 놓는다면 때때로 새로운 문자로 바뀝니다. 역슬래쉬가 빼주는 것은 어퍼스트로피와 역슬래쉬 자신입니다. (이점을 좀더 고려하면 이스케이프 문자는 반드시 항상 자신을 빼준다고 생각하세요.) 다음은 몇가지 예입니다.

puts 'You\'re swell!'
puts 'backslash at the end of a string:  \\'
puts 'up\\down'
puts 'up\down'

#실행결과

You're swell!
backslash at the end of a string:  \
up\down
up\down

역슬래쉬는 'd'를 빼줄 수 없습니다만 자신은 빠집니다. 그래서 위의 예제 중 마지막 두 문자열은 동일합니다. 코드에서는 같아보이지 않지만 여러분의 컴퓨터는 동일하게 여깁니다.

 

2장을 마무리하며

여러분, 질문이 있더라도 계속해서 읽으세요. 저는 여기서 모든 질문에 대한 답을 해줄 수 없답니다.

참고

댓글

댓글 본문
  1. 초보
    이해하기 쉽고 좋습니다 :)
  2. 처음
    감사합니다. :)