🧱 루비(Ruby) 기초 체력 다지기: 변수, 자료형, 연산자 정복! (Part 2)

루비 세계에 오신 것을 다시 한번 환영합니다! 🎉 지난 Part 1: 루비와 첫 만남 & 개발 환경 준비에서는 루비가 어떤 언어인지 알아보고 개발 환경까지 성공적으로 세팅했었죠? 이제 본격적으로 루비 코드를 작성하기 위한 가장 기본적인 요소들을 배울 시간입니다!

이번 파트에서는 프로그래밍의 핵심 중의 핵심! 데이터를 담는 그릇인 변수(Variable), 데이터의 종류를 나타내는 자료형(Data Type), 그리고 기본적인 계산을 위한 연산자(Operator)에 대해 알아볼 거예요. 마치 요리를 배우기 전에 재료와 도구를 익히는 것처럼, 아주 중요한 기초 체력 단련 시간이라고 할 수 있습니다. 💪

겁먹지 마세요! 루비는 정말 친절하니까요. 😉 자, 그럼 쉽고 재미있게 시작해 봅시다!


🏷️ 데이터를 담는 마법 상자: 변수 (Variable)

프로그래밍에서는 숫자, 글자 등 다양한 데이터를 다루게 됩니다. 이 데이터들을 필요할 때마다 다시 사용하려면 어딘가에 저장해 둬야겠죠? 이때 사용하는 것이 바로 변수입니다. 변수는 마치 이름표(변수 이름)가 붙어있는 상자와 같아서, 원하는 데이터를 넣어두고 나중에 이름표를 불러와 내용물을 사용할 수 있어요.

변수 만들고 값 넣기 (선언과 할당)

루비에서 변수를 만드는 건 정말 쉬워요! 다른 언어처럼 복잡한 선언 과정 없이, 그냥 변수 이름을 정하고 `=` 기호 오른쪽에 저장할 값을 써주면 끝! 이걸 '변수에 값을 할당한다'고 말해요.


# 'name'이라는 변수에 "홍길동" 문자열을 저장(할당)
name = "홍길동"

# 'age'라는 변수에 25 숫자를 저장(할당)
age = 25

# 변수에 저장된 값을 화면에 출력
puts name  # 출력: 홍길동
puts age   # 출력: 25
  

변수에 저장된 값은 언제든지 다른 값으로 바꿀 수 있습니다.


score = 80
puts score  # 출력: 80

score = 95 # score 변수의 값을 95로 변경
puts score  # 출력: 95
  

💡 루비 변수 이름 규칙 (snake_case)

루비에서는 변수 이름을 지을 때 몇 가지 규칙과 관례가 있어요.

  • ✅ 변수 이름은 영어 소문자 또는 밑줄(_)로 시작해야 합니다. (숫자 시작 불가!)
  • ✅ 이름 중간에는 영어 소문자, 숫자, 밑줄을 사용할 수 있습니다.
  • (중요!) 여러 단어를 조합할 때는 밑줄(_)로 연결하는 snake_case(스네이크 케이스) 표기법을 사용하는 것이 루비의 일반적인 스타일입니다! 🐍

# 좋은 예시 (snake_case)
user_name = "루비"
first_name = "김"
my_age = 30

# 나쁜 예시 (다른 언어 스타일이거나 규칙 위반)
# userName = "자바스타일" # 카멜 케이스(camelCase)는 보통 루비에서 잘 안 써요.
# 1st_name = "오류"     # 숫자로 시작 불가
# my-age = 30      # 하이픈(-) 사용 불가 (뺄셈으로 인식)
  

깔끔하고 읽기 좋은 코드를 위해 루비 스타일 가이드(snake_case)를 따르는 습관을 들이는 것이 좋습니다!


🎭 데이터의 다양한 얼굴: 기본 자료형 (Data Types)

변수라는 상자에는 다양한 종류의 데이터를 담을 수 있어요. 루비는 이 데이터의 종류를 '자료형' 또는 '데이터 타입'이라고 부릅니다. 루비의 기본적인 자료형들을 만나볼까요?

  • 숫자 (Numeric):
    • Integer (정수): 소수점 없는 숫자 (예: 10, -5, 0)
    • Float (실수): 소수점 있는 숫자 (예: 3.14, -0.5, 10.0)
  • 문자열 (String): 글자들의 나열. 따옴표(" 또는 ')로 감싸서 표현해요.
    
    greeting = "안녕하세요!"
    language = 'Ruby'
    
    # ✨ 문자열의 강력한 기능: 문자열 보간 (String Interpolation)
    # 큰따옴표(") 안에서만 사용 가능해요! #{변수명} 형태로 변수 값을 문자열 안에 쏙!
    message = "저는 #{language}를 배우고 있어요. #{greeting}"
    puts message
    # 출력: 저는 Ruby를 배우고 있어요. 안녕하세요!
    
    # 작은따옴표는 문자열 보간이 안돼요!
    message_single = '저는 #{language}를 배우고 있어요. #{greeting}'
    puts message_single
    # 출력: 저는 #{language}를 배우고 있어요. #{greeting} (그대로 출력됨)
          
    🍯 꿀팁: 문자열 안에 변수 값을 넣어야 할 때는 큰따옴표와 #{} 를 사용하세요! 정말 편리해요.문자열은 길이 확인(.length), 대소문자 변경(.upcase, .downcase) 등 다양한 작업을 할 수 있는 메소드(기능)들을 가지고 있어요. 이건 나중에 더 자세히 배워요!
  • 불리언 (Boolean): 참(true) 또는 거짓(false) 값을 나타냅니다. 조건문에서 아주 중요하게 사용돼요. (두 값만 존재!)
  • 닐 (Nil): '값이 없음' 또는 '비어 있음'을 나타내는 특별한 값입니다. nil 하나만 존재해요. 다른 언어의 null과 비슷합니다.

어떤 변수에 어떤 타입의 데이터가 들어있는지 궁금하다면 .class 메소드를 사용해서 확인할 수 있어요.


count = 100        # Integer
price = 49.99      # Float
is_valid = true    # Boolean (TrueClass)
user_input = nil   # Nil (NilClass)
my_string = "루비" # String

puts count.class      # 출력: Integer
puts price.class      # 출력: Float
puts is_valid.class   # 출력: TrueClass
puts user_input.class # 출력: NilClass
puts my_string.class  # 출력: String
  
💡 루비는 동적 타입 언어!
C언어나 Java와 달리, 변수를 만들 때 타입을 미리 지정할 필요가 없어요. 루비가 변수에 할당되는 값에 따라 알아서 타입을 결정해 줍니다. 그래서 코드가 더 유연하고 간결해지는 장점이 있어요!

🧮 기본 계산은 루비에게! 산술 연산자

루비로 기본적인 수학 계산도 할 수 있어요. 우리가 흔히 아는 사칙연산 기호들을 사용하면 됩니다. 이런 기호들을 연산자(Operator)라고 불러요.


num1 = 15
num2 = 4

# 덧셈
sum = num1 + num2
puts "덧셈 결과: #{sum}"  # 출력: 덧셈 결과: 19

# 뺄셈
difference = num1 - num2
puts "뺄셈 결과: #{difference}" # 출력: 뺄셈 결과: 11

# 곱셈
product = num1 * num2
puts "곱셈 결과: #{product}" # 출력: 곱셈 결과: 60

# 나눗셈 (정수 / 정수 = 정수 결과!)
quotient = num1 / num2
puts "나눗셈 결과 (정수): #{quotient}" # 출력: 나눗셈 결과 (정수): 3

# 나눗셈 (실수 결과를 원하면?)
quotient_float = num1.to_f / num2 # .to_f 로 실수를 만들어주거나,
# quotient_float = 15.0 / 4    # 처음부터 실수로 계산!
puts "나눗셈 결과 (실수): #{quotient_float}" # 출력: 나눗셈 결과 (실수): 3.75

# 나머지
remainder = num1 % num2
puts "나머지 결과: #{remainder}" # 출력: 나머지 결과: 3

# 거듭제곱
power = 2 ** 3 # 2의 3제곱
puts "거듭제곱 결과: #{power}" # 출력: 거듭제곱 결과: 8
  

⚠️ 주의! 루비에서 정수끼리 나누면 결과도 소수점 이하를 버린 정수가 됩니다. 실수 결과를 원하면 숫자 중 하나 이상을 실수(.0)로 만들어주거나 .to_f 메소드를 사용해야 해요!

비교 연산자(>, <, == 등)나 논리 연산자(&&, ||) 등 더 많은 연산자들이 있지만, 오늘은 여기까지만 맛보기! 😉


🗣️ 사용자에게 말 걸기: 입력 받기 (`gets`)

프로그램이 사용자로부터 직접 정보를 입력받아야 할 때도 있겠죠? 이럴 때는 gets 메소드를 사용합니다.


puts "이름을 입력해주세요:"
name = gets

puts "안녕하세요, #{name}님!"
  

위 코드를 실행하고 이름을 입력한 뒤 엔터를 치면, 입력한 이름 뒤에 엔터(줄바꿈 문자)까지 포함되어 출력될 거예요. 예를 들어 '루비'라고 입력하면 "안녕하세요, 루비\n님!" 처럼요.

이 원치 않는 줄바꿈 문자를 제거하려면 .chomp 메소드를 gets 뒤에 붙여주면 됩니다!


puts "당신의 나이는 몇 살인가요?"
age_input = gets.chomp # gets로 받고 chomp로 뒤에 붙은 엔터 제거!

# 입력받은 것은 보통 문자열(String) 타입이에요. 숫자로 바꿔줘야 계산 가능!
age = age_input.to_i # .to_i 로 정수로 변환

puts "오, #{age}살이시군요! 내년이면 #{age + 1}살이 되시겠네요."
  
💡 gets로 받은 입력은 기본적으로 문자열(String) 타입이라는 점! 숫자로 사용하려면 .to_i(정수)나 .to_f(실수)로 변환해주는 것을 잊지 마세요!

🎮 오늘의 실습: 간단 자기소개 프로그램 만들기!

지금까지 배운 내용을 활용해서 사용자에게 이름과 나이를 입력받아 간단한 자기소개 메시지를 출력하는 프로그램을 만들어 봅시다!

요구사항:

  1. 사용자에게 이름을 묻고 입력받습니다.
  2. 사용자에게 나이를 묻고 입력받습니다.
  3. 입력받은 이름과 나이를 이용하여 "안녕하세요, [이름]님! [나이]살이시군요." 형식의 메시지를 출력합니다.

힌트: puts, gets.chomp, 변수, 문자열 보간(#{})을 사용해보세요!

👇 아래는 정답 코드 예시입니다. 직접 먼저 해보신 후에 확인해보세요! 😉


# 1. 이름 입력받기
puts "당신의 이름은 무엇인가요?"
user_name = gets.chomp

# 2. 나이 입력받기
puts "당신의 나이는 몇 살인가요?"
user_age_str = gets.chomp
# 나이는 숫자지만, 여기서는 그냥 문자열로 사용해도 괜찮아요.
# 만약 나이로 계산을 하려면 user_age = user_age_str.to_i 로 변환해야겠죠?

# 3. 자기소개 메시지 출력
puts "-----------------------------" # 구분선
puts "안녕하세요, #{user_name}님! #{user_age_str}살이시군요."
puts "루비의 세계에 오신 것을 환영합니다! 🎉"
puts "-----------------------------" # 구분선
  

💡 Part 2 핵심 요약

  • 변수: 데이터를 저장하는 이름표 붙은 상자. = 로 값을 할당. 이름은 snake_case!
  • 기본 자료형: 숫자(Integer, Float), 문자열(String), 참/거짓(Boolean), 없음(Nil).
  • 문자열 보간: 큰따옴표 안에서 #{} 를 사용해 변수 값을 쉽게 넣을 수 있음 (강추!).
  • 산술 연산자: +, -, *, / (정수 나눗셈 주의!), % (나머지), ** (거듭제곱).
  • 사용자 입력: gets로 받고 .chomp로 엔터 제거! 입력은 기본적으로 문자열 타입.
  • 타입 변환: .to_i (정수로), .to_f (실수로).

🚀 다음 단계로!

와우! 루비의 기본 재료와 도구인 변수, 자료형, 연산자까지 배우셨습니다! 🎉 아직은 간단한 것들이지만, 이게 모든 프로그래밍의 기초가 된답니다. 오늘 배운 내용들을 IRB에서 직접 이것저것 입력하고 실행해보면서 손에 익히는 것이 중요해요. 특히 변수 사용과 문자열 보간은 앞으로 계속 쓰게 될 거예요!

다음 Part 3: 코드의 흐름을 내 마음대로! (조건문, 반복문) 에서는 드디어 프로그램이 상황에 따라 다른 행동을 하거나, 특정 작업을 반복하도록 만드는 방법을 배울 거예요. 코드가 훨씬 더 똑똑해지는 마법을 기대해주세요! 😉