Computer >> 컴퓨터 >  >> 프로그래밍 >> Ruby

Ruby 클래스 작성 방법 완벽 가이드: 초보자도 이해하는 객체 지향 프로그래밍

Ruby에서 클래스란 무엇인가?

클래스는 객체 지향 프로그래밍(Object-Oriented Programming, OOP)의 기본 구성 요소로, 객체를 생성하기 위한 청사진(설계도)을 정의하는 역할을 합니다.

객체는 클래스의 산물입니다.

그렇다면 객체란 정확히 무엇일까요?

객체는 고유한 정체성과 자신만의 데이터를 지닌 개별적인 '실체'입니다.

예를 들어:

Book 클래스는 책을 생성하기 위한 설계도가 될 수 있습니다.

이 클래스는 모든 책이 공통으로 가지는 속성을 정의합니다:

  • 제목(title)
  • 저자(author)
  • 페이지 수(pages)
  • 그 외 기타 속성

책 한 권 한 권이 바로 개별적인 객체이며, Book 클래스 덕분에 이와 같은 객체를 얼마든지 만들 수 있습니다. 클래스를 만드는 핵심 이유가 바로 여기에 있습니다. 클래스는 Ruby 애플리케이션에서 재사용 가능한 설계도 역할을 하는 것입니다.

이제:

오늘 바로 OOP 코드를 작성할 수 있도록, 직접 클래스를 작성하는 방법을 배워보겠습니다.

Ruby 클래스 생성 방법

클래스를 생성하는 문법은 다음과 같습니다:

class Orange
end

주목할 점:

  • 클래스 이름은 반드시 대문자로 시작해야 합니다
  • class 키워드로 시작하고 end 키워드로 마무리합니다
  • 빈 클래스는 큰 쓸모가 없지만, 그래도 객체를 생성할 수는 있습니다

클래스를 만드는 다른 방법들(예: Class.new)도 존재하지만, 이러한 방식은 특수한 상황에서만 유용합니다.

하나의 클래스, 수많은 객체

클래스의 주된 용도는 메서드, 인스턴스 변수, 상수를 담는 컨테이너 역할을 하며, 이를 바탕으로 객체를 생성할 수 있는 설계도를 제공하는 것입니다.

new 메서드를 사용하면 객체를 생성할 수 있습니다.

다음과 같이 말이죠:

Orange.new

객체를 생성하는 과정을 '인스턴스화(instantiation)'라고 부르며, 생성된 객체를 해당 클래스의 '인스턴스(instance)'라고 합니다.

왜 굳이 객체를 만들어야 할까요?

생성되는 모든 객체는 서로 다르고 고유하기 때문입니다.

모든 객체는 저마다의 정체성을 가집니다.

예를 들어:

Orange 클래스로 생성한 각각의 오렌지 객체는 고유한 무게, 원산지, 품질 등을 따로 가지게 됩니다.

Ruby 클래스를 더 유용하게 만들기

인스턴스 메서드와 인스턴스 변수를 추가하기 시작하면 클래스가 훨씬 더 강력해집니다.

메서드란 클래스가 '할 수 있는 동작'을 의미합니다.

예를 들어:

오렌지를 짜면 주스를 얻을 수 있죠.

코드 예시입니다:

class Orange
  def squeeze
    puts "Here's your juice!"
  end
end

orange = Orange.new
orange.squeeze

이렇게 정의된 메서드는 객체에게 내리는 명령이 됩니다!

생성하는 모든 Orange 객체는 squeeze 메서드에 접근할 수 있으며, 이것이 클래스를 사용하는 대표적인 장점 중 하나입니다.

인스턴스 변수클래스가 알고 있는 정보입니다.

예시:

class Orange
  def initialize
    @juice_available = 100
  end

  def squeeze
    @juice_available -= 50
  end
end

인스턴스 변수는 @ 기호로 시작한다는 점에서 지역 변수와 구별됩니다. 또한 attr_accessor를 별도로 정의하지 않으면 클래스 외부에서는 접근할 수 없습니다.

이 객체는 어떤 클래스일까?

Ruby에서 객체를 다룰 때는 해당 객체가 어떤 클래스로부터 만들어졌는지 아는 것이 매우 유용합니다.

다음과 같이 확인할 수 있습니다:

"".class
# String

[].class
# Array

orange.class
# Orange (orange = Orange.new라고 가정)

왜 이것이 유용할까요?

메서드는 Ruby에서 실제로 모든 일을 수행하는 작은 엔진과 같습니다.

클래스를 알면 어떤 메서드를 사용할 수 있는지 파악할 수 있고(Google, ri, pry 등을 활용), 곧 그 객체가 무엇을 해줄 수 있는지 발견할 수 있다는 의미입니다!

클래스에 대해 더 배우기

클래스에 관한 한 이 글은 '빙산의 일각'에 불과합니다.

더 깊이 배우고 싶다면...

다음 주제들을 학습해 보세요:

  • Ruby initialize 메서드
  • attr_accessor, attr_reader, attr_writer
  • OOP에서의 상속(Inheritance)
  • 객체 지향 프로그래밍 전반

참고로 흥미로운 사실 하나, 클래스 자체도 객체입니다. 적어도 Ruby에서는요 🙂

정리

이번 글에서는 Ruby의 클래스가 무엇인지, 어떻게 생성하는지, 그리고 왜 유용한지 배웠습니다!

더 많은 분들이 이 글을 즐길 수 있도록 공유해 주시는 것도 잊지 마세요.

읽어주셔서 감사합니다.