카테고리 없음

BoxLang의 클래스와 객체지향 프로그래밍 입문 (8강)

mystory55781 2025. 5. 16. 00:14

객체지향 프로그래밍이란?

객체지향 프로그래밍(Object-Oriented Programming, OOP)은 프로그램을 객체들로 나누어 설계하는 방법론입니다. 각 객체는 상태(데이터)와 동작(메서드)을 가지며, 객체들 간의 상호작용을 통해 프로그램이 동작합니다. OOP의 핵심 개념은 클래스, 객체, 상속, 캡슐화, 다형성입니다. BoxLang에서는 클래스와 객체를 통해 객체지향 프로그래밍을 쉽게 구현할 수 있습니다. 이번 강의에서는 BoxLang에서 클래스를 정의하고, 객체를 생성하는 방법을 배워봅니다.

클래스 정의하기

클래스(Class)는 객체를 생성하기 위한 템플릿입니다. 클래스는 속성과 메서드를 정의하며, 클래스를 통해 여러 개의 객체를 만들 수 있습니다. BoxLang에서는 class 키워드를 사용하여 클래스를 정의합니다.

기본적인 클래스 정의

먼저, 기본적인 클래스를 정의해 보겠습니다. 아래 예제는 사람을 나타내는 Person 클래스를 정의하는 방법입니다.

class Person {
    var name: String
    var age: Int

    func init(name: String, age: Int) {
        self.name = name
        self.age = age
    }

    func introduce() {
        print("안녕하세요, 저는 " & name & "입니다. 나이는 " & age & "살입니다.")
    }
}

위 예제에서 Person 클래스는 이름과 나이를 속성으로 가지고 있으며, 생성자 initintroduce라는 메서드를 포함하고 있습니다. init 메서드는 객체가 생성될 때 호출되며, 객체의 초기값을 설정하는 역할을 합니다.

객체 생성하기

클래스를 정의한 후에는 그 클래스를 기반으로 객체를 생성할 수 있습니다. 객체는 클래스의 인스턴스(instance)라고도 불리며, 객체를 생성할 때는 new 키워드를 사용하지 않고, 클래스를 직접 호출하여 생성합니다.

객체 생성 예시

앞서 정의한 Person 클래스를 사용하여 객체를 생성하고, 메서드를 호출하는 방법을 살펴보겠습니다.

var person1 = Person(name: "홍길동", age: 25)
person1.introduce()  // "안녕하세요, 저는 홍길동입니다. 나이는 25살입니다." 출력

위 예제에서는 홍길동이라는 이름과 25라는 나이를 가진 person1 객체를 생성하고, introduce 메서드를 호출하여 객체의 정보를 출력하고 있습니다.

클래스의 생성자 (Constructor) 이해하기

클래스의 생성자 init 메서드는 객체가 생성될 때 자동으로 호출되어, 객체의 초기 상태를 설정합니다. 생성자는 매개변수를 받아 객체를 초기화할 수 있습니다. BoxLang에서는 생성자가 특별히 정의되어 있지 않으면 기본 생성자가 제공됩니다.

생성자 사용 예시

다시 Person 클래스 예제를 살펴보겠습니다. 생성자는 객체를 초기화하는 데 필요한 중요한 역할을 합니다.

var person2 = Person(name: "김철수", age: 30)
print(person2.name)  // "김철수" 출력

여기서 person2는 생성자에 의해 "김철수"라는 이름과 30이라는 나이를 초기값으로 설정받습니다.

메서드 정의와 호출

클래스 안에 정의된 함수는 메서드(Method)라고 하며, 객체의 동작을 정의합니다. 메서드는 객체가 수행할 작업을 나타내며, 객체 내부의 데이터를 조작할 수 있습니다.

메서드 정의하기

앞서 살펴본 introduce 메서드는 Person 클래스의 메서드로, 객체의 정보를 출력하는 기능을 수행합니다. 메서드는 클래스 내에서 정의되며, 객체에서 호출됩니다.

class Person {
    var name: String
    var age: Int

    func init(name: String, age: Int) {
        self.name = name
        self.age = age
    }

    func introduce() {
        print("안녕하세요, 저는 " & name & "입니다. 나이는 " & age & "살입니다.")
    }

    func haveBirthday() {
        age = age + 1
        print("생일 축하합니다! " & name & "님은 이제 " & age & "살입니다.")
    }
}

위의 예제에서는 haveBirthday라는 메서드를 추가하여, 나이를 한 살 증가시키고, 그 값을 출력하도록 했습니다.

메서드 호출하기

메서드를 호출하려면 객체의 이름을 통해 접근할 수 있습니다. 예를 들어, person1 객체의 haveBirthday 메서드를 호출하면 나이가 증가합니다.

person1.haveBirthday()  // "생일 축하합니다! 홍길동님은 이제 26살입니다." 출력

이처럼 객체의 메서드를 호출하면, 객체의 속성값을 변경하거나 특정 작업을 수행할 수 있습니다.

상속 (Inheritance) 기초

상속은 객체지향 프로그래밍에서 중요한 개념 중 하나입니다. 상속을 사용하면 기존 클래스의 속성과 메서드를 다른 클래스가 물려받아 사용할 수 있습니다. BoxLang에서는 클래스를 상속하여 새로운 클래스를 만들 수 있습니다.

상속 예시

다음은 Person 클래스를 상속받아 Student 클래스를 정의하는 예제입니다.

class Student: Person {
    var grade: Int

    func init(name: String, age: Int, grade: Int) {
        self.grade = grade
        super.init(name: name, age: age)
    }

    func study() {
        print(name & "는 공부 중입니다.")
    }
}

Student 클래스는 Person 클래스를 상속받아, 학생의 학년을 나타내는 grade 속성과 study 메서드를 추가하였습니다. super.init는 부모 클래스의 생성자를 호출하는 역할을 합니다.

클래스와 객체지향의 중요성

객체지향 프로그래밍을 사용하면 코드의 재사용성, 확장성, 유지보수성을 높일 수 있습니다. BoxLang에서 클래스를 정의하고 객체를 생성하는 방법을 통해, 복잡한 문제를 작은 단위로 나누어 해결할 수 있습니다. 또한, 상속과 다형성을 활용하면 코드를 더욱 유연하게 만들 수 있습니다.

마무리 및 다음 강의 예고

이번 강의에서는 BoxLang에서 클래스와 객체지향 프로그래밍의 기본 개념을 배우고, 클래스를 정의하고 객체를 생성하는 방법을 익혔습니다. 객체지향 프로그래밍의 기본적인 개념을 잘 이해하고 활용하면, 코드의 재사용성을 높이고, 유지보수도 쉽게 할 수 있습니다.

다음 강의에서는 고급 객체지향 기법인터페이스, 다형성에 대해 다룰 예정입니다. 기대해 주세요!