패키지 / 클래스 / 함수에서 적용되는 개년

패키지 안에서 변수, 함수, 클래스들이 하나의 스코프
함수 / 클래스 안에서 변수, 함수들이 하나의 스코프

특징)
외부에서는 내부 멤버를 참조 연산자(.)로 참조 가능
동일 스코프 내에서 멤버 공유
하위 스코프에서 상위 스코프 멤버 재정의

접근제한자

변수(속성), 함수, 클래스 앞에 붙여 제한

패키지

public		어떤 패키지에서도 접근 가능
internal	같은 모듈 내에서 접근 가능
private		같은 파일에서 접근 가능

클래스

public		클래스 외부에서도 접근 가능
private		클래스 내부에서만 접근 가능
protected	클래스 자신, 상속받은 클래스에서 접근 가능

스코프 함수

클래스에서 생성한 인스턴스 → 스코프 함수를 통해 따로 작업 가능
인스턴스에서의 참조 연산자 사용 없이 구문 작성 가능
속성이나 함수를 좀 더 깔끔하게 불러 사용할 수 있다
→ main 함수와 별도의 스코프에서 작업 수행
→ 코드 단순화

fun main() {

    val price=99999

    var a = Book("코틀린", 10000).apply {
        name = "[초특가] " + name
        discount()
//        price -= 5000
    }

    a.run {
        println(name)
        println("$price")
    }

    with(a){
        println(name)
        println("$price")
    }

    a.also {
        it.price -= 5000
    }

    a.let {
        println(it.name)
        println("${it.price}")
    }

}

class Book(var name: String, var price: Int) {
    fun discount() {
        price -= 2000
    }
}

apply

초기화와 동시에 수행

클래스를 생성과 동시에 구문이 수행됨

var a = 클래스명(초기화).apply { 수행할 구문 }

run

마지막 구문 반환
이미 인스턴스가 만들어진 후 인스턴스의 속성, 함수를
스코프 내에서 사용할 때 유용

a.run { 수행할 구문 }

with( 인스턴스 )

run 기능과 동일

with(a){ 수행할 구문 }

also

apply 와 같은 기능
main 에서의 속성과 ㅎ마수의 속성 이름이 같을 때, 구분하기 위해 'it' 을 사용해 구분

a.also { 
    ...
    it.price -= 5000
    ...
}

let

run 과 같은 기능
main 에서의 속성과 ㅎ마수의 속성 이름이 같을 때, 구분하기 위해 'it' 을 사용해 구분

var a = 클래스명(초기화).apply { 수행할 구문 }
profile
iOS 개발 공부

0개의 댓글