GDSC HUFS 3기/Android with Kotlin Team 4

[4팀] Section 7 - (1) : Kotlin - Object Oriented Programming

devDonghyun 2021. 10. 5. 15:14

이 글은 udemy 강의를 참고하여 작성하였습니다.

작성자 : 안동현

개발환경은 Windows, Android Studio입니다.

 

1. Kotlin의 함수


 fun  키워드를 사용하여 함수를 선언하며, 괄호() 안에는 함수의 매개 변수를 넣어줍니다.

마지막에는 반환 타입을 명시해줍니다. 생략하면 자동으로 Unit 타입이 적용됩니다.

// Kotlin 함수 선언

fun 함수명(매개변수명:타입): 반환 타입 {...}

 

 함수의 매개변수에는 var이나 val 키워드사용할 수 없습니다.

val이 자동으로 적용되며, 함수 안에서 매개변숫값을 변경할 수 없습니다.

fun cannotChangeParam(num: Int) {
	num = 100  // Error!
}

 

2. Kotlin은 객체지향 프로그래밍 언어 : OPP


 

OOP : Object Oriented Programming

-> 클래스를 선언하고 객체를 생성 멤버를 이용하는 객체지향 프로그래밍

 

안드로이드 앱은 SDK가 제공하는 클래스를 상속받아 개발하므로 주로 클래스를 다뤄서 개발합니다.

 


OOP의 특징 : 캡슐화, 다형성, 상속

 

* 캡슐화 : Capsulizatio

  객체의 속성(data fields)행위(메서드, methods)하나로 묶고, 실제 구현 내용 일부를 외부에 감추어 은닉함.

 

* 다형성 : Polymorphism

   같은 모양의 코드가 다른 기능을 하도록 만들 수 있는 특징 (Override 등)

 

* 상속 : Inheritance

  자식 클래스가 부모 클래스의 멤버를 물려받는 것

 

 


클래스 선언

 

 Java에서는 멤버가 없고, 선언부만 있는 클래스는 의미가 없습니다.

그러나, Kotlin에서는 클래스의 생성자를 본문이 아닌 선언부에 작성할 수 있어서

본문이 없는 클래스도 의미가 있습니다.

class CustomClass { }

 

아래의 예제 코드에서 캡슐화, 다형성, 상속을 모두 확인할 수 있습니다!

잘 찾아보세요~ 🥰

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val soldier1 = Soldier()
        soldier1.getStatus()
    }
}

class Soldier {
    val name = "John"
    val rank = "Private"
    val missing = true
    val dob = 1988

    fun getStatus() {
        var status = "$rank"
        if (missing) {
            status = "$status, SOLDIER IS MISSING"
        } else {
            status = "$status, READY FOR DUTY"
        }
        Log.i(tag: "STATUS", status)
    }
}

 

 

3. Kotlin - Getter, Setter


 Kotlin에서는 변수를 만들어주기만 해도, getter와 setter를 내부적으로 생성해줍니다.

또한, Kotlin에서는 기본적으로 Scope(범위)public으로 설정됩니다.

그래서 public 키워드는 생략해줘도 됩니다. 

 

class CustomClass {
	val immutable: String, // val : private field + public getter
	var mutable: Int       // var : private field + public getter + public setter
}