패키지 / 클래스 / 함수에서 적용되는 개년
패키지 안에서 변수, 함수, 클래스들이 하나의 스코프
함수 / 클래스 안에서 변수, 함수들이 하나의 스코프특징)
외부에서는 내부 멤버를 참조 연산자(.)로 참조 가능
동일 스코프 내에서 멤버 공유
하위 스코프에서 상위 스코프 멤버 재정의
변수(속성), 함수, 클래스 앞에 붙여 제한
패키지
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
}
}
초기화와 동시에 수행
클래스를 생성과 동시에 구문이 수행됨
var a = 클래스명(초기화).apply { 수행할 구문 }
마지막 구문 반환
이미 인스턴스가 만들어진 후 인스턴스의 속성, 함수를
스코프 내에서 사용할 때 유용
a.run { 수행할 구문 }
run 기능과 동일
with(a){ 수행할 구문 }
apply 와 같은 기능
main 에서의 속성과 ㅎ마수의 속성 이름이 같을 때, 구분하기 위해 'it' 을 사용해 구분
a.also {
...
it.price -= 5000
...
}
run 과 같은 기능
main 에서의 속성과 ㅎ마수의 속성 이름이 같을 때, 구분하기 위해 'it' 을 사용해 구분
var a = 클래스명(초기화).apply { 수행할 구문 }