학습
Scala 클래스와 객체 기초
Scala 클래스와 객체 기초 — 초급
클래스와 객체 기초
1. 도입 (왜 배워야 하는가)
Scala는 객체 지향 프로그래밍(Object-Oriented Programming, OOP) 언어로, 클래스와 객체는 이 언어의 핵심 개념입니다. 클래스는 객체의 설계도이며, 객체는 클래스의 인스턴스입니다. 이런 구조는 코드의 재사용성을 높이고, 프로그램을 더 조직적으로 만들 수 있게 해줍니다. 실무에서 복잡한 시스템을 개발할 때, 클래스를 활용하지 않으면 유지보수와 확장성이 떨어져 한정된 기능만을 수행하는 비효율적인 코드가 만들어질 수 있습니다.
예를 들어, 쇼핑몰 시스템을 개발한다면 '상품'이라는 개념을 객체로 모델링하지 않으면 상품의 특성이나 행동을 명시적으로 나타내기 어려워집니다. 이로 인해 코드의 가독성과 관리가 힘들어질 수 있습니다.
2. 핵심 개념 설명
- 클래스(Class): 객체를 생성하기 위한 청사진입니다. 클래스는 속성(필드)과 행동(메서드)을 정의합니다.
- 객체(Object): 클래스의 인스턴스입니다. 즉, 클래스에서 정의된 속성과 행동을 가진 구체적인 실체입니다.
비유하자면, 클래스는 '자동차의 설계도'이고, 객체는 '실제 자동차'라고 볼 수 있습니다. 설계도에는 자동차의 색상, 모양, 엔진의 종류 등이 명시되어 있지만, 실제 자동차는 이 설계도를 바탕으로 만들어진 것입니다.
| 용어 | 정의 |
|---|---|
| 클래스 | 객체의 설계도 |
| 객체 | 클래스의 인스턴스 |
| 속성 | 객체가 가지는 데이터 |
| 행동 | 객체가 수행할 수 있는 기능 |
3. 기본 코드 예제
아래는 간단한 클래스와 객체의 예제입니다:
// 자동차 클래스를 정의합니다.
class Car(val brand: String, val model: String) {
def drive(): String = {
s"$brand $model가 주행 중입니다."
}
}
// 자동차 클래스의 객체를 생성합니다.
val myCar = new Car("현대", "아반떼")
// 자동차를 주행합니다.
println(myCar.drive())
실행 결과:
현대 아반떼가 주행 중입니다.
class Car(...): 'Car'라는 클래스를 정의하고, 두 개의 속성 brand와 model을 초기화합니다.def drive(): 자동차가 주행할 때 호출되는 메서드를 정의합니다.val myCar = new Car(...): 'Car' 클래스의 인스턴스인 myCar를 생성합니다.println(myCar.drive()): myCar의 drive 메서드를 호출하여 결과를 출력합니다.4. 실전 활용 예제
쇼핑몰에서 장바구니를 구현할 때
class ShoppingCart {
private var items: List[String] = List()
def addItem(item: String): Unit = {
items = items :+ item
println(s"$item이 장바구니에 추가되었습니다.")
}
def viewCart(): List[String] = {
items
}
}
val cart = new ShoppingCart()
cart.addItem("사과")
cart.addItem("바나나")
println(cart.viewCart())
상황 설명: 장바구니에 상품을 추가하고, 현재 장바구니에 담긴 상품을 보여주는 클래스입니다.
학생 관리 시스템에서 학생 정보를 관리할 때
class Student(val name: String, val age: Int) {
def info(): String = {
s"학생 이름: $name, 나이: $age"
}
}
val student1 = new Student("홍길동", 20)
println(student1.info())
상황 설명: 학생의 이름과 나이를 속성으로 가진 클래스를 정의하고, 학생 정보를 출력하는 메서드를 구현합니다.
5. 흔한 실수와 주의사항
1. 객체 초기화 문제
잘못된 코드:
class Person {
var name: String
}
올바른 코드:
class Person(var name: String)
var 선언 시 초기값이 필요합니다.2. 메서드 호출 시 괄호 실수
잘못된 코드:
println(myCar.drive) // 괄호 없음
올바른 코드:
println(myCar.drive()) // 괄호 포함