IMCAT.DEV
로그인 가입
Kotlin 입문 객체지향

Kotlin 기본 클래스 및 객체

Kotlin 기본 클래스 및 객체 — 초급

기본 클래스 및 객체

1. 도입 (왜 배워야 하는가)

Kotlin은 현대 애플리케이션 개발에서 널리 사용되는 프로그래밍 언어입니다. 클래스와 객체는 객체 지향 프로그래밍(OOP)의 핵심 개념으로, 이를 통해 코드의 재사용성과 유지보수성을 높일 수 있습니다. 실무에서 복잡한 시스템을 효율적으로 설계하고 구현하기 위해서는 이 개념들을 이해하는 것이 필수적입니다. 만약 클래스와 객체에 대한 이해가 부족하다면, 코드의 구조가 불명확해지고, 협업 시 다른 개발자와의 소통이 어려워질 수 있습니다. 또한, 버그 발생 시 문제를 파악하고 수정하는 데 어려움을 겪을 수 있습니다.

2. 핵심 개념 설명

  • 클래스: 객체의 설계도라고 생각할 수 있습니다. 클래스는 객체의 속성과 행동을 정의하는 청사진입니다. 예를 들어, '자동차'라는 클래스는 자동차의 속성(색상, 모델)과 행동(운전하기, 멈추기)을 포함합니다.
  • 객체: 클래스의 인스턴스입니다. 자동차 클래스에서 '내 차'라는 객체는 특정 색상과 모델을 가진 실제 자동차를 나타냅니다.
  • 관련 용어 정리

    용어설명
    클래스객체의 속성과 행동을 정의하는 설계도
    객체클래스로부터 생성된 실제 인스턴스
    속성객체가 갖는 특성 (예: 색상, 모델)
    행동객체가 수행할 수 있는 작업 (예: 주행하기)

    3. 기본 코드 예제

    아래는 간단한 자동차 클래스를 정의하는 코드입니다.

    // 자동차 클래스를 정의합니다.
    class Car(val color: String, val model: String) {
        // 자동차가 주행하는 행동을 정의합니다.
        fun drive() {
            println("$model($color) 자동차가 주행 중입니다.")
        }
    }
    
    // Car 클래스의 인스턴스를 생성합니다.
    val myCar = Car("빨강", "스포츠카")
    // 주행 메서드를 호출합니다.
    myCar.drive()

    실행 결과

    스포츠카(빨강) 자동차가 주행 중입니다.

    코드 한 줄씩 동작 설명

    1. class Car(val color: String, val model: String) { ... }: Car라는 클래스를 정의하고, 색상과 모델을 속성으로 가집니다.
    2. fun drive() { ... }: Car 클래스 내에 자동차가 주행하는 행동을 정의하는 메서드를 생성합니다.
    3. val myCar = Car("빨강", "스포츠카"): Car 클래스의 인스턴스인 myCar를 생성하고, 빨강 색상과 스포츠카 모델을 지정합니다.
    4. myCar.drive(): myCar 객체의 drive 메서드를 호출하여 주행 상태를 출력합니다.
    5. 4. 실전 활용 예제

      예제 1: 쇼핑몰에서 장바구니 구현

      장바구니에서 상품을 담고, 총 가격을 계산하는 기능을 구현합니다.

      class Product(val name: String, val price: Double)
      
      class ShoppingCart {
          private val items = mutableListOf<Product>()
      
          fun addProduct(product: Product) {
              items.add(product)
          }
      
          fun totalPrice(): Double {
              return items.sumOf { it.price }
          }
      }
      
      // 사용 예
      val cart = ShoppingCart()
      cart.addProduct(Product("사과", 1000.0))
      cart.addProduct(Product("바나나", 800.0))
      println("총 가격: ${cart.totalPrice()} 원")

      예제 2: 학생 관리 시스템

      학생 정보를 관리하는 클래스를 만들어 보겠습니다.

      class Student(val name: String, val age: Int)
      
      class StudentManager {
          private val students = mutableListOf<Student>()
      
          fun addStudent(student: Student) {
              students.add(student)
          }
      
          fun displayStudents() {
              for (student in students) {
                  println("이름: ${student.name}, 나이: ${student.age}")
              }
          }
      }
      
      // 사용 예
      val manager = StudentManager()
      manager.addStudent(Student("홍길동", 20))
      manager.addStudent(Student("김철수", 22))
      manager.displayStudents()

      5. 흔한 실수와 주의사항

      실수 1: 클래스 속성 접근

    6. 잘못된 코드:
    7.   class Car {
            val color: String
            fun drive() {
                println(color) // 초기화되지 않은 속성 접근
            }
        }
    8. 올바른 코드:
    9.   class Car(val color: String) {
            fun drive() {
                println(color) // 올바르게 초기화된 속성 접근
            }
        }

      실수 2: 객체 생성 시 매개변수 누락

    10. 잘못된 코드:
    11.   val myCar = Car("빨강") // 두 번째 매개변수 누락
    12. 올바른 코드:
    13.   val myCar = Car("빨강", "스포츠카") // 모든 매개변수를 제공

      6. 정리

    14. 클래스와 객체는 객체 지향 프로그래밍의 기본 개념으로, 코드의 구조와 재사용성을 높입니다.
    15. 클래스는 객체의 설계도, 객체는 그 설계도에 따라 생성된 실제 인스턴스입니다.
    16. 실생활 비유를 통해 쉽게 이해할 수 있으며, 코드 예제를 통해 활용 방법을 익힐 수 있습니다.
    17. 다음에 학습하면 좋은 주제:

    18. 상속 및 다형성
    19. 인터페이스와 추상 클래스
    20. 데이터 클래스와 코틀린의 고급 기능