Menu
Coddy logo textTech

학생 추가

Coddy Ruby 여정의 로직 및 흐름 섹션에 포함된 레슨 — 56개 중 49번째.

공유된 student_records 해시에 새로운 학생을 등록하는 add_student 메서드를 정의하세요.

중복을 거부하는 것이 유일한 분기이며, 학생이 이미 존재하면 이를 알리고 덮어쓰지 않고 반환합니다.

challenge icon

챌린지

쉬움

파일 상단에 student_records = {}를 유지하세요. 그런 다음 다음을 수행하는 add_student(name, age, courses) 메서드를 정의하세요:

  1. 만약 name이 이미 student_records의 키로 존재한다면, Student '<name>' already exists.를 출력하고 반환합니다.
  2. 그렇지 않으면 name 아래에 { age: age, grades: [], courses: courses }를 저장하고 Student '<name>' added.를 출력합니다.

파일 하단에서 테스트 블록을 다음으로 교체하세요:

add_student("Alice", 20, ["Math", "Physics"])
add_student("Bob", 22, ["Biology", "Chemistry"])
add_student("Alice", 21, ["Art"])
puts student_records.inspect

예상 출력 결과는 다음과 같습니다:

Student 'Alice' added.
Student 'Bob' added.
Student 'Alice' already exists.
{"Alice"=>{:age=>20, :grades=>[], :courses=>["Math", "Physics"]}, "Bob"=>{:age=>22, :grades=>[], :courses=>["Biology", "Chemistry"]}}

메서드는 감싸고 있는 스크립트의 지역 변수를 볼 수 없으므로, 메서드가 읽고 업데이트할 수 있도록 student_records$student_records(전역 변수)로 선언하세요. 메서드 내부에서도 해당 이름을 사용하세요.

치트 시트

전역 변수($variable_name)를 사용하여 메서드가 자신의 스코프 밖에서 정의된 변수에 접근하고 수정할 수 있도록 합니다:

$student_records = {}

def add_student(name, age, courses)
  if $student_records.key?(name)
    puts "Student '#{name}' already exists."
    return
  end
  $student_records[name] = { age: age, grades: [], courses: courses }
  puts "Student '#{name}' added."
end

주요 사항:

  • 변수 앞에 $를 붙여 전역 변수로 만듭니다 (메서드 내부에서 접근 가능)
  • .key?(name)을 사용하여 해시에 이미 키가 포함되어 있는지 확인합니다
  • return을 사용하여 중복을 처리한 후 메서드를 조기에 종료합니다

직접 해보기

$student_records = {}

# TODO: def add_student(name, age, courses), 중복 방지 처리,
# { age:, grades: [], courses: } 형태로 저장, 추가됨/이미 존재함 메시지 출력

add_student("Alice", 20, ["Math", "Physics"])
add_student("Bob", 22, ["Biology", "Chemistry"])
add_student("Alice", 21, ["Art"])
puts $student_records.inspect
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

로직 및 흐름의 모든 레슨