학습
Ruby 제네릭과 타입
Ruby 제네릭과 타입 — 중급
제네릭과 타입
1. 도입 (왜 배워야 하는가)
프로그래밍에서 데이터의 타입은 매우 중요합니다. 특히 실무에서는 다양한 종류의 데이터가 서로 얽히고 섥히기 때문에, 올바른 타입을 사용하지 않으면 예기치 못한 오류가 발생할 수 있습니다. 제네릭은 이러한 문제를 해결하는 데 매우 유용한 도구입니다.
예를 들어, 쇼핑몰에서 다양한 상품을 관리할 때, 상품의 타입(의류, 전자기기 등)에 따라 다른 속성을 가질 수 있습니다. 만약 타입을 명확히 하지 않으면, 코드의 가독성이 떨어지고, 나중에 다른 개발자가 코드를 읽거나 수정할 때 큰 혼란을 겪게 됩니다.
제네릭을 사용하지 않으면, 타입 안전성을 잃게 되며, 프로그램의 안정성과 유지보수가 어려워지게 됩니다.
2. 핵심 개념 설명
제네릭 (Generics)
제네릭은 타입을 매개변수로 받을 수 있는 기능으로, 코드의 재사용성과 타입 안전성을 높여줍니다. 쉽게 말해, 다양한 타입의 데이터를 처리할 수 있는 '틀'을 만드는 것입니다.
예를 들어
제네릭을 사용하는 것은 마치 여러 크기의 상자를 만들어 놓고, 필요할 때마다 그에 맞는 크기의 물건을 넣는 것과 같습니다. 상자의 크기에 상관없이 물건을 넣을 수 있으며, 나중에 어떤 크기의 물건이 들어있더라도 상자는 무사하죠.
| 용어 | 설명 |
|---|---|
| 제네릭 | 타입을 매개변수로 받아 다양한 타입을 사용할 수 있게 해줌 |
| 타입 안전성 | 잘못된 타입으로 인한 오류를 컴파일 타임에 예방해줌 |
3. 기본 코드 예제
제네릭을 사용하는 간단한 예제를 살펴보겠습니다.
class Box
def initialize(value)
@value = value
end
def get_value
@value
end
end
# Box 클래스를 사용해 문자열과 정수를 담아보겠습니다.
string_box = Box.new("Hello")
integer_box = Box.new(123)
puts string_box.get_value # 출력: Hello
puts integer_box.get_value # 출력: 123
실행 결과
Hello
123
코드 한 줄씩 동작 설명
class Box: Box라는 클래스를 정의합니다.def initialize(value): 초기화 메서드를 통해 값을 받습니다.@value = value: 받은 값을 인스턴스 변수 @value에 저장합니다.def get_value: 값을 반환하는 메서드를 정의합니다.string_box = Box.new("Hello"): 문자열 "Hello"를 담는 Box 객체를 생성합니다.integer_box = Box.new(123): 숫자 123을 담는 Box 객체를 생성합니다.puts string_box.get_value: string_box에서 값을 가져와 출력합니다.puts integer_box.get_value: integer_box에서 값을 가져와 출력합니다.
4. 실전 활용 예제
예제 1: 쇼핑몰 장바구니
장바구니에서 다양한 타입의 상품을 저장할 때 제네릭을 사용할 수 있습니다.
class ShoppingCart
def initialize
@items = []
end
def add_item(item)
@items << item
end
def show_items
@items.each { |item| puts item }
end
end
cart = ShoppingCart.new
cart.add_item("티셔츠")
cart.add_item(200) # 가격
cart.show_items
예제 2: 데이터베이스 레코드
데이터베이스의 다양한 타입의 레코드를 다룰 때 제네릭을 사용할 수 있습니다.
class Record
def initialize(data)
@data = data
end
def display
puts @data.inspect
end
end
user_record = Record.new({ name: "홍길동", age: 30 })
user_record.display
5. 흔한 실수와 주의사항
실수 1: 잘못된 타입 사용
cart.add_item(["티셔츠", "바지"]) # 배열을 추가
cart.add_item("티셔츠") # 문자열을 추가
실수 2: 타입 변환 미비
price = "200"
cart.add_item(price.to_i) # 문자열을 숫자로 변환하지 않음
price = "200"
cart.add_item(price.to_i) # 문자열을 숫자로 변환 후 추가