패키지

package com.sunny.example

//패캐지 명시하지 않을시 default 패키지로 묶임

패키지 사용 import

import com.sunny.example

스코프

변수, 함수, 클래스가 위치하는 범위

패키지, 클래스, 함수 내부로 구분된다.

패키지 내 변수, 함수를 선언할수 있다.

하위 스코프에서는 같은 이름의 변수를 생성할수 있다.

접근제한자 in Package

public : 기본값. 어떤 패키지에서도 접근 가능

internal : 같은 모듈 내에서만 접근 가능

private : 같은 파일 내에서만 접근 가능

접근제한자 in Class

public : 기본값. 클래스 외부에서 늘 접근 가능

private : 클래스 내부에서만 접근 가능

protected : 클래스 자신과 상속받은 클래스에서 접근 가능

 

고차함수

함수를 클래스에서 만들어낸 인스턴스 처럼 취급하는 방법

함수를 패러미터로 넘길수 있다.

결과값으로 반환 받을수 있다.

 

fun main(){

    b(::a) //고차함수 형태를 패러미터로 넘길시 :: 을 앞에 붙여주어야함.

}

fun a (str: String) { }

fun b (function : (String)->Unit) { //Unit은 반환형이 없다는 의미

    function("문자열")

람다함수

val c: (String)->Unit = {str -> println("$str 람다함수")}

b(c) //람다함수는 ::을 붙이지 않아도 됨.

 

//람다함수를 여러 구문으로 사용시

val calculate : (Int, Int) -> Int /*반환타입*/= { a,b ->

    println(a)

    println(b)

    a+b // 마지막 구문이 Int형으로 반환됨.

}

 

//패러미터가 없는 람다함수

val a:() -> Unit = {println("패러미터가 없어요")}

 

//패러미터가 하나인 경우 it을 사용함

val c:(String) -> Unit = {println("$it 람다함수")}

스코프 함수

함수형언어를 쉽게 사용할수 있도록 기본제공하는 함수

클래스에서 생성한 인스턴스를 스코프함수에 전달하면 인스턴스의 속성이나 함수를 좀 더 깔끔하게 호출 할 수 있다.

스코프함수 apply

인스턴스 생성 후 초기화 시 주로 사용.

<Before>

fun main(){

    var a = Book("코틀린 기초", 10000);

    a.name = "[초특가]" + a.name

    a.discount()

}

class book(var name: String, var price: Int){

    fun discount(){

    price -= 2000;

    }

}

<After>

fun main(){

    var a = Book("코틀린 기초", 10000).apply{

        name =  "[초특가]" + name

        discount()

    }

}

class book(var name: String, var price: Int){

    fun discount(){

    price -= 2000;

    }

}

스코프함수 run

람다함수 처럼 마지막 구문이 반환됨.

이미 인스턴스가 생성된 후 인스턴스내에서 참조없이 변수,함수 사용시 편리함

a.run{

    println("상품명: ${name}, 가격: ${price}원")

}

스코프함수 with

run과 동일한 기능을 가짐.

run에서는 참조 연산자를 사용하지만, with는 패러미터로 인스턴스를 받음.

with(a) {

    println("상품명: ${name}, 가격: ${price}원")

}

스코프함수 also/let

처리가 끝나면 인스턴스를 반환 : apply / also

처리가 끝나면 최종값을 반환 : run / let

스코프 내 같은 이름의 변수나 함수가 있을때 사용한다. apply 대신 also, run 대신 let

마치 패러미터로 인스턴스를 넘긴것 처럼 it을 통해 인스턴스의 변수와 함수를 호출할 수 있다.

fun main(){

    var price = 5000

    var a = Book("코틀린 기초", 10000).apply{

        name =  "[초특가]" + name

        discount()

    }

    a.run{

        println("상품명: ${name}, 가격: ${price}원") // 결과 5000

    }

    a.let{

        println("상품명: ${it.name}, 가격: ${it.price}원") // 결과 8000

    }

}

 

 

+ Recent posts