#7 [Kotlin] 오버라이딩, 접근 제한자, 클래스와 함수 종류

정상준·2022년 10월 28일
0

kotlin

목록 보기
7/26
post-thumbnail

📝접근 제한자

접근 제한자란 클래스의 멤버를 외부의 어느 범위까지 이용하게 할 것인지 결정하는 키워드이다.

접근 제한자최상위에서 이용클래스 멤버에서 이용
public모든 파일에서 가능모든 클래스에서 가능
internal같은 모듈 내에서 가능같은 모듈 내에서 가능
protected사용 불가상속 관계의 하위 클래스에서 가능
private파일 내부에서만 이용클래스 내부에서만 이용

📝코틀린의 클래스 종류

데이터 클래스
데이터 클래스는 data키워드로 선언하며 자주 사용하는 데이터를 객체로 묶어 준다.

package com.example.androidlab


data class DataClass(val name : String, val email : String, val age : Int){
    lateinit var address : String

    constructor(name : String, email : String, age : Int , address : String):
        this(name,email,age){
            this.address = address
        }
    }

fun main(){
    val obj1 = DataClass("joung","a",25,"seoul")
    val obj2 = DataClass("joung","a",25,"busan")
    print("${obj1.equals(obj2)}")
}

결과 : true

데이터 클래스의 equals() 함수는 주 생성자의 멤버 변수가 같은지만 판단

오브젝트 클래스

오브젝트 클래스는 익명 클래스를 만들 목적으로 사용한다. 익명 클래스는 이름이 없는 클래스이기 때문에 선언과 동시에 객체를 생성해야 한다. 그렇지 않으면 이후 객체를 생성할 방법이 없다.

package com.example.androidlab


open class Super {
    open var data = 10
    open fun some(){
        println("$data")
    }
}

val obj = object: Super(){
    override var data = 20
    override fun some(){
        println("$data")
    }
}


fun main(){
    obj.data = 30
    obj.some()
}

결과 : 30

컴패니언 클래스 (Java Static 대체)

컴패니언 클래스는 멤버 변수나 함수를 클래스 이름으로 접근하고자 할 때 사용한다. 일반적으로 클래스의 멤버는 객체를 생성해서 접근해야 하지만 컴패니언 클래스는 객체를 생성하지 않고 클래스 이름으로 특정멤버를 이용할 수 있다.

package com.example.androidlab


class MyClass{
    companion object{
        var data = 10
        fun some() {
            println(data)
        }
    }

}

fun main(){
    MyClass.data = 20
    MyClass.some()
}

결과 : 20

람다 함수

람다 함수는 익명 함수 정의 기법으로 함수를 간단하게 정의할 때 이용하며 람다식이라고도 한다.

함수 선언 형식

fun 함수명(매개변수) { 함수 본문}

fun sum(no1 : Int, no2 : Int) : Int {
            return no1 + no2
}

람다 함수 선언 형식

{매개변수 -> 함수 본문}

val sum = {no1 : Int , no2 : Int -> no1 + no2} //선언

sum(10,20) //호출

매개변수 없는 람다 함수

{-> println("function call")}
{println("fuction call")} // -> 생략가능

타입 별칭 - typealias

typealias는 타입의 별칭을 선언하는 키워드로 함수 뿐 아니라 데이터 선언할 때도 사용한다.

typealias MyFunType = (Int , Int) -> Boolean

fun main(){
   val someFune : MyFunType = {no1 : Int, no2: Int -> no1 > no2}
}

MyFunType을 별칭으로 선언했으며 이제 이 MyFunType으로 선언한 변수에는 타입에 맞는 함수를 대입해야 한다.

고차 함수

고차 함수란 함수를 매개변수로 전달받거나 반환하는 함수를 의미한다.

fun hofFun(arg : (Int) -> Boolean): () -> String{
        val result = if(arg(10)){
             "valid"
}else {
          "invalid"
}
   return {"$result"}
}

fun main(){
    val result = hofFun({no0 -> no >0})
    println(result())
}
profile
안드로이드개발자

0개의 댓글