본문 바로가기
카테고리 없음

코틀린에서의 객체지향 프로그래밍

by dev-woo 2023. 3. 26.
반응형

소개

안녕하세요! dev-woo 입니다. 오늘은 Kotlin에서 객체지향 프로그래밍에 대해 알아보려고 합니다. Kotlin은 JVM에서 실행되는 차세대 프로그래밍 언어로, 객체지향 프로그래밍 패러다임과 완벽하게 일치합니다.

객체지향 프로그래밍(OOP) 개념

OOP란 객체를 중심으로 하는 프로그래밍 패러다임입니다. 객체는 속성과 메서드를 포함하며, 다른 객체와 상호작용하며 애플리케이션을 만들어냅니다. 객체는 클래스에 의해 정의됩니다. 클래스는 객체의 속성과 메서드를 정의하여 객체를 만들기 위한 템플릿입니다.

OOP의 주요 장점은 코드 재사용성 향상, 유지보수성 향상, 코드 구성의 개념화, 코드의 가독성 향상 등입니다.

Kotlin에서 OOP

Kotlin은 객체지향 프로그래밍 패러다임을 완벽하게 지원합니다. 자바와 마찬가지로 클래스와 객체를 정의하며, 상속, 다형성 및 캡슐화를 제공합니다.

클래스와 객체

클래스는 class 키워드를 사용하여 정의할 수 있습니다. 아래는 Kotlin에서 클래스를 정의하는 방법입니다.

class Person {
    var name: String = ""
    var age: Int = 0

    fun greet() {
        println("Hello, my name is $name and I am $age years old.")
    }
}

위의 코드에서 Person 클래스는 nameage라는 두 개의 속성을 가지며, greet이라는 메서드를 정의하고 있습니다.

객체는 Person()과 같은 식으로 인스턴스화됩니다. 객체는 클래스의 속성과 메서드에 액세스 할 수 있습니다. 아래는 Kotlin에서 객체를 생성하는 방법입니다.

val person = Person()
person.name = "John"
person.age = 30
person.greet()

상속

Kotlin에서 클래스는 상속을 통해 다른 클래스에서 기능을 물려받을 수 있습니다. 상속 받으려면 : 키워드 다음에 기존 클래스를 지정하면 됩니다. 아래는 Kotlin에서 상속을 정의하는 방법입니다.

// Person 클래스를 상속받는 Student 클래스 정의
class Student : Person() {
    var grade: String = ""

    fun study() {
        println("$name is studying...")
    }
}

위의 코드에서 Student 클래스는 Person 클래스를 상속받고 있습니다. 새로운 grade 속성과 study() 메서드를 추가로 정의하고 있습니다.

다형성

Kotlin은 다형성도 지원합니다. 다형성이란 다른 클래스들이 같은 이름의 속성과 메서드를 가지고 있을 때, 같은 방식으로 이들에 접근하거나 이들을 조작하는 코드를 작성할 수 있게 해줍니다.

아래는 Kotlin에서 다형성을 구현하는 방법입니다.

// Person 클래스를 상속받는 Teacher 클래스 정의
class Teacher : Person() {

    fun teach() {
        println("$name is teaching...")
    }
}

// 다형성 구현
fun introduce(person: Person) {
    person.greet()
}

val person = Person()
val student = Student()
val teacher = Teacher()

introduce(person)
introduce(student)
introduce(teacher)

위의 코드에서 introduce() 함수는 Person 타입의 매개변수를 받습니다. 즉, Person, Student, Teacher 객체를 모두 introduce() 함수에 전달할 수 있습니다. 이를 통해 introduce() 함수에서 greet() 메서드가 사용되며, 다형성이 구현됩니다.

캡슐화

캡슐화는 객체의 속성과 메서드를 외부에서의 액세스로부터 보호하는 것입니다. Kotlin은 캡슐화를 위해 private, protected, internal 키워드를 제공합니다.

private 키워드는 해당 속성이나 메서드가 정의된 클래스 내부에서만 액세스 가능하도록 설정합니다. protected 키워드는 해당 속성이나 메서드가 정의된 클래스나 해당 클래스를 상속한 클래스 내부에서만 액세스 가능하도록 설정합니다. internal 키워드는 같은 모듈 내부에서만 액세스 가능하도록 설정합니다.

아래는 Kotlin에서 캡슐화를 구현하는 방법입니다.

class Person {
    private var name: String = ""
    private var age: Int = 0

    fun setName(name: String) {
        this.name = name
    }

    fun setAge(age: Int) {
        this.age = age
    }

    fun greet() {
        println("Hello, my name is $name and I am $age years old.")
    }
}

val person = Person()
person.setName("John")
person.setAge(30)
person.greet()

위의 코드에서 nameage 속성이 private로 선언되었으며, setName()setAge() 메서드를 통해 값을 설정할 수 있게 되었습니다.

결론

Kotlin은 JVM 상에서 실행되는 객체지향 프로그래밍 언어입니다. 클래스와 객체를 정의하며, 상속, 다형성, 캡슐화 등 객체지향 프로그래밍의 주요 개념을 모두 지원합니다. 이 모든 개념들을 통해 Kotlin을 이용하여 높은 가독성과 유지보수성이 뛰어난 코드를 작성할 수 있습니다.

반응형

댓글