IMCAT.DEV
로그인 가입
Ruby 중급 객체지향

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. 정리

  • 객체지향 프로그래밍은 소프트웨어 개발에 있어 필수적인 패러다임입니다.
  • 클래스와 객체의 개념을 이해하고, 상속과 다형성을 활용할 수 있어야 합니다.
  • 캡슐화를 통해 데이터 보호와 코드의 유지보수성을 높일 수 있습니다.

다음에 학습하면 좋은 주제: 추상화와 인터페이스, 모듈과 믹스인, 디자인 패턴.