학습
Ruby 객체지향 프로그래밍 (OOP) 기초
Ruby 객체지향 프로그래밍 (OOP) 기초 — 중급
객체지향 프로그래밍 (OOP) 기초
1. 도입 (왜 배워야 하는가)
객체지향 프로그래밍(OOP)은 프로그래밍의 중요한 패러다임 중 하나로, 소프트웨어 설계와 유지보수에 큰 영향을 미칩니다. 실무에서는 복잡한 시스템을 관리하고, 코드의 재사용성을 높이며, 협업을 원활하게 하기 위해 OOP의 개념이 필수적입니다.
만약 OOP를 모른다면, 코드를 구조적으로 작성하기 어려워지고, 변경에 취약한 코드가 만들어질 수 있습니다. 이는 유지보수 비용을 증가시키고, 팀원 간의 협업에서 혼란을 초래하게 됩니다. OOP를 통해 이해하기 쉽고, 수정하기 쉬운 코드를 작성할 수 있습니다.
2. 핵심 개념 설명
OOP의 핵심 개념은 크게 클래스, 객체, 상속, 다형성, 캡슐화입니다. 각각을 정의하고 실생활 비유로 설명하겠습니다.
| 용어 | 정의 | 실생활 비유 |
|---|---|---|
| 클래스 | 객체를 생성하기 위한 설계도 | 자동차의 설계도 |
| 객체 | 클래스의 인스턴스, 실제로 존재하는 것 | 실제 자동차 |
| 상속 | 기존 클래스의 속성과 메소드를 물려받는 것 | 부모가 자식에게 물려주는 재산 |
| 다형성 | 같은 메소드가 다른 객체에서 다르게 동작 | 같은 이름의 노래가 다른 가수가 부르는 것 |
| 캡슐화 | 데이터를 숨기고 인터페이스로 접근하도록 하는 것 | 비밀번호로 잠긴 금고 |
3. 기본 코드 예제
가장 기본적인 객체 생성과 메소드 호출의 예를 보겠습니다.
class Car
attr_accessor :color, :model
def initialize(color, model)
@color = color
@model = model
end
def display_info
"차량 모델: #{@model}, 색상: #{@color}"
end
end
my_car = Car.new("빨강", "소나타")
puts my_car.display_info
실행 결과:
차량 모델: 소나타, 색상: 빨강
class Car:Car라는 이름의 클래스를 정의합니다.attr_accessor :color, :model:color와model속성을 읽고 쓸 수 있게 합니다.def initialize(color, model): 객체가 생성될 때 호출되는 초기화 메소드입니다.@color = color: 인스턴스 변수@color에 매개변수color의 값을 저장합니다.def display_info: 차량 정보를 출력하는 메소드를 정의합니다.my_car = Car.new("빨강", "소나타"):Car클래스의 인스턴스를 생성합니다.puts my_car.display_info:display_info메소드를 호출하여 차량 정보를 출력합니다.
4. 실전 활용 예제
1. 쇼핑몰 장바구니 구현
장바구니에 상품을 추가하고, 총합을 계산하는 클래스를 구현합니다.
class ShoppingCart
attr_accessor :items
def initialize
@items = []
end
def add_item(item)
@items << item
end
def total_price
@items.sum { |item| item[:price] }
end
end
cart = ShoppingCart.new
cart.add_item({ name: "티셔츠", price: 20000 })
cart.add_item({ name: "바지", price: 30000 })
puts cart.total_price
실행 결과:
50000
ShoppingCart 클래스는 장바구니를 나타내며, 상품을 추가하고 총 가격을 계산하는 메소드를 가지고 있습니다.2. 동물 클래스와 상속
동물 클래스를 만들고, 개와 고양이 클래스를 상속받아 구현합니다.
class Animal
def speak
"소리를 냅니다."
end
end
class Dog < Animal
def speak
"멍멍!"
end
end
class Cat < Animal
def speak
"야옹!"
end
end
dog = Dog.new
cat = Cat.new
puts dog.speak
puts cat.speak
실행 결과:
멍멍!
야옹!
Animal 클래스를 상속받은 Dog와 Cat 클래스는 각각 다른 소리를 냅니다.5. 흔한 실수와 주의사항
실수 1: 초기화 메소드 오타
# 잘못된 코드
class Car
def initialize(color, model)
@color = color
@model = model
end
end
my_car = Car.new("빨강") # ArgumentError 발생
ArgumentError: 매개변수 수가 맞지 않음.실수 2: 인스턴스 변수 접근 오류
class Car
def display_info
"차량 모델: #{@model}, 색상: #{@color}" # 초기화에서 정의되지 않음
end
end
nil이 출력됩니다.6. 정리
다음에 학습하면 좋은 주제: 추상화와 인터페이스, 모듈과 믹스인, 디자인 패턴.