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의 클래스가 무엇인지, 어떻게 생성하는지, 그리고 왜 유용한지 배웠습니다!
더 많은 분들이 이 글을 즐길 수 있도록 공유해 주시는 것도 잊지 마세요.
읽어주셔서 감사합니다.