fun main() {
val person = Person("person", 100)
println(person.name)
person.age = 10
println(person.age)
}
class Peron (
val name: String,
var age: Int
) {
init {
if (age <= 0) {
throw IllegalArgumentException("나이는 ${age}일 수 없습니다")
}
}
constructor(name: String): this(name, 1)
}
fun main() {
val person = Person("person", 100)
println(person.name)
person.age = 10
println(person.age)
}
class Peron (
name: String,
var age: Int
) {
init {
if (age <= 0) {
throw IllegalArgumentException("나이는 ${age}일 수 없습니다")
}
}
val name = name
get() = field.uppercase()
constructor(name: String): this(name, 1)
val isAdult: Boolean
get() = this.age >= 20
}
fun getUppercaseName(): String = this.name.uppercase()
val uppercase: String
get() = this.name.uppercase()
fun main() {
val person = Person("person", 100)
println(person.name)
person.age = 10
println(person.age)
}
class Peron (
name: String,
var age: Int = 1
) {
var name = name
set(value) {
field = value.uppercase()
}
init {
if (age <= 0) {
throw IllegalArgumentException("나이는 ${age}일 수 없습니다")
}
}
val isAdult: Boolean
get() = this.age >= 20
}
abstract class Animal(
protected val species: String,
protected open val legCount: Int,
) {
abstract fun move()
}
class Cat(
species: String
) : Animal(species, 4) {
override fun move() {
println("고양이가 걸어간다")
}
}
class Penguin(
species: String
) : Animal(species, 2) {
private val wingCount: Int = 2
override fun move() {
println("펭귄이 움직인다")
}
override val legCount: Int
get() = super.legCount + this.wingCount
}
interface Flyable {
fun act() {
println("파닥파닥")
}
fun fly()
}
interface Swimable {
fun act() {
println("어푸어푸")
}
}
class Penguin(
species: String
) : Animal(species, 2), Swimable, Flyable {
private val wingCount: Int = 2
override fun move() {
println("펭귄이 움직인다")
}
override val legCount: Int
get() = super.legCount + this.wingCount
override fun act() {
super<Swimable>.act()
super<Flyable>.act()
}
}
interface Swimable {
val swimAbility: Int
get() = 3 // 기본 값
fun act() {
println("어푸어푸")
}
}
class Penguin(
species: String
) : Animal(species, 2), Swimable, Flyable {
private val wingCount: Int = 2
override fun move() {
println("펭귄이 움직인다")
}
override val legCount: Int
get() = super.legCount + this.wingCount
override fun act() {
super<Swimable>.act()
super<Flyable>.act()
}
override val swimAbility: Int
get() = 3
}
open class Base(
open val number: Int = 100
) {
init {
println("Base Class")
println(number)
}
}
class Derived(
override val number: Int
) : Base(number) {
init {
println("Derived Class")
}
}
Java
- public : 모든 곳에서 접근 가능
- protected : 같은 패키지 또는 하위 클래스에서만 접근 가능
- default : 같은 패키지에서만 접근 가능
- private : 선언된 클래스 내에서만 접근 가능
Kotlin
- public : 모든 곳에서 접근 가능
- protected : 선언된 클래스 혹은 하위 클래스에서만 접근 가능(Kotlin에서는 패키지를 namespace를 관리하기 위한 용도로만 사용하고 가시성 제어에는 사용되지 않는다.), 파일 최상단에는 사용 불가능하다(클래스에만 사용 가능).
- internal : 같은 모듈(한번에 컴파일되는 Kotlin 코드)에서만 접근 가능
class Car (
internal val name: String,
_price: Int
) {
var price = _price
private set
}
참고