파게로그

[OOP] OOP, Class and Objects 본문

콤퓨타 왕기초/Kotlin

[OOP] OOP, Class and Objects

파게 2021. 6. 10. 10:51

Kotlin Introduction to OOP

Kotlin은 함수형 프로그래밍과 객체지향형 프로그래밍을 모두 지원한다. higher-order functions, function types, lambdas를 지원하여 함수형 프로그래밍 스타일에서 일하는 좋은 환경을 제공한다. 덩달아 객체지향형 프로그래밍도 지원한다.

OOP에서는, 복잡한 문제는 객체를 생성함으로써 작은 문제로 쪼갤 수 있다. 이러한 객체는 두 개의 특성을 공유한다. state와 behavior이다. 예를 들면 다음과 같다.

 

예1) Lamp는 객체이다.
on 상태와 off 상태가 있다.
turn on 행위와 turn off 행위가 있다.

 

예2) Bicycle은 객체이다.
current gear, two wheels, number of gear 등의 상태가 있다.
braking, accelerating, changing gears 등의 행위가 있다.

 

OOP와 관련하여서 data encapsulation, inheritance, polymorphism 등을 학습할 것이다.

 

 

Kotlin Class

객체를 생성하기 전에, 클래스를 정의해야 한다. 클래스는 객체에 대한 청사진이라 할 수 있다. 따라서 하나의 클래스로부터 많은 객체가 생성될 수 있다. 클래스 정의를 위해서는, class 키워드가 사용된다.

 

class ClassName {
    // property
    // member function
    // ...
}

 

아까 제시한 Lamp를 예로 들면, 다음과 같다. Kotlin에서, property는 반드시 초기화되거나, 또는 abstract로 선언되어야 한다.

class Lamp {
    // property (data member)
    private var isOn: Boolean = false

    // member function
    fun turnOn() {
        isOn = true
    }

    // member function
    fun turnOff() {
        isOn = false
    )
}

 

한편, 클래스, 객체, properties, member functions 등은 visibility modifiers를 가진다. 예를 들어, isOn property는 오직 Lamp 클래스 내부에서만 그 값을 변경할 수 있는 것이다. 이러한 visibility modifiers의 목록은 다음과 같다.

https://kotlinlang.org/docs/visibility-modifiers.html#classes-and-interfaces

 

▪ private

visible (can be accessed) from inside the class only

▪ public

visible everywhere

▪ protected

visible to the class and its subclass

▪ internal

any client inside the module can access them

 

visibility modifier를 명시하지 않으면, 기본값으로 public이 설정된다. 위의 예시에서 isOn 속성은 private인 반면, turnOn()turnOff() 멤버 함수는 public이다.

 

 

Kotlin Objects

클래스가 정의되고 나면, 오직 객체의 구체적인 명세만이 정의된다. 메모리나 저장공간은 할당되지 않는다. 클래스 내부에 정의된 멤버들에 접근하고 싶다면, 객체를 생성해야만 한다.

 

fun main(args: Array<String>) {
    val lamp1 = Lamp()
    val lamp2 = Lamp()
}

 

멤버 변수나 멤버 함수에 대한 접근은 .을 사용한다는 점에서 Java와 동일하다. 물론 접근 제한자에 따라서 Exception이 발생할 수도 있다.

'콤퓨타 왕기초 > Kotlin' 카테고리의 다른 글

[OOP] Getters and Setters  (0) 2021.06.11
[OOP] Constructors  (0) 2021.06.10
[Basic] Tail Call, Tail Recursion  (0) 2021.06.10
[Basic] Default arguments and Named arguments  (0) 2021.06.09
[Basic] Infix Function Call  (0) 2021.06.09
Comments