conventions
.으로 상/하위 패키지 구분- 패키지 선언 : package 키워드와 함께 패키지 이름을 기술, 맨 위에 위치
- 소문자로 작성
- 회사 도메인의 역순으로 작성
- 마지막에는 프로젝트 이름을 붙여줌
package com.example.tlftest.utils
import*: all
package com.example.main
import com.example.utils.Person
import com.example.utils.*
접근 지정자(Visibility Modifier), scope
internal:default(java)- default :
public
| 지정자 | 같은 클래스 | 서브클래스 | 같은 모듈 | 외부 |
|---|---|---|---|---|
public |
✅ | ✅ | ✅ | ✅ |
private |
✅ | ❌ | ❌ | ❌ |
protected |
✅ | ✅ | ❌ | ❌ |
internal |
✅ | ✅ | ✅ | ❌ |
Top-level 함수/변수
- 최상단에 선언
- global 개념
private val apiKey = "Secret"
Object
object- 단 하나만 존재하는 객체
- 프로그램 전체에서 오직 하나만 생성
- 인스턴스화 없이 프로퍼티와 메서드 호출 가능(static)
.연산자로 호출- 대문자 시작
object MathUtil {
fun add(a: Int, b: Int) = a * b
fun square(x: Int) = x * x
}
fun main() {
println(MathUtil.add(3, 5))
println(square(5))
}
companion object
- ClassMethod
- 일반 클래스 안에 object 기능 추가
- 클래스 내부 정의
- 클래스명으로 접근 가능
- 클래스 공유
class A {
companion object {
fun bar() {
println("Companion object called")
}
}
}
fun main() {
A.bar()
}
class User private constructor(val nickname: String) {
companion object {
fun newSubscribingUser(email: String) =
User(email.substringBefore('@'))
fun newFacebookUser(accountId: Int) =
User(getFacebookName(accountId))
}
}
fun main(args: Array<String>) {
val subscribingUser = User.newSubscribingUser("bob@gmail.com")
val facebookUser = User.newFacebookUser(4)
println(subscribingUser.nickname)
}
C
Contents
