Animal { var name: String = “” var age: Int = 0 constructor (name: String, age: Int) { this.name = name this.age = age } fun introduce() { println(“이름은 ${name}이고, ${age}살 입니다.”) } } fun main() { val puppy = Animal(“아리”, 5) println(puppy.name) // 출력 결과는 “아리” println(puppy.age) // 출력 결과는 “5” puppy.introduce() // 출력 결과는 “이름은 아리이고, 5살 입니다.” }
클래스 class Animal { var name: String = “” var age: Int = 0 constructor (name: String, age: Int) { this.name = name this.age = age } fun introduce() { println(“이름은 ${name}이고, ${age}살 입니다.”) } } fun main() { val puppy = Animal(“아리”, 5) println(puppy.name) // 출력 결과는 “아리” println(puppy.age) // 출력 결과는 “5” puppy.introduce() // 출력 결과는 “이름은 아리이고, 5살 입니다.” }
인스턴스 변수 class Animal { var name: String = “” var age: Int = 0 constructor (name: String, age: Int) { this.name = name this.age = age } fun introduce() { println(“이름은 ${name}이고, ${age}살 입니다.”) } } fun main() { val puppy = Animal(“아리”, 5) println(puppy.name) // 출력 결과는 “아리” println(puppy.age) // 출력 결과는 “5” puppy.introduce() // 출력 결과는 “이름은 아리이고, 5살 입니다.” }
생성자 class Animal { var name: String = “” var age: Int = 0 constructor (name: String, age: Int) { this.name = name this.age = age } fun introduce() { println(“이름은 ${name}이고, ${age}살 입니다.”) } } fun main() { val puppy = Animal(“아리”, 5) println(puppy.name) // 출력 결과는 “아리” println(puppy.age) // 출력 결과는 “5” puppy.introduce() // 출력 결과는 “이름은 아리이고, 5살 입니다.” }
매서드 (함수) class Animal { var name: String = “” var age: Int = 0 constructor (name: String, age: Int) { this.name = name this.age = age } fun introduce() { println(“이름은 ${name}이고, ${age}살 입니다.”) } } fun main() { val puppy = Animal(“아리”, 5) println(puppy.name) // 출력 결과는 “아리” println(puppy.age) // 출력 결과는 “5” puppy.introduce() // 출력 결과는 “이름은 아리이고, 5살 입니다.” }
Animal { var name: String = “” var age: Int = 0 constructor (name: String, age: Int) { this.name = name this.age = age } fun introduce() { println(“이름은 ${name}이고, ${age}살 입니다.”) } } fun main() { val puppy = Animal(“아리”, 5) println(puppy.name) // 출력 결과는 “아리” println(puppy.age) // 출력 결과는 “5” puppy.introduce() // 출력 결과는 “이름은 아리이고, 5살 입니다.” }
인스턴스화 class Animal { var name: String = “” var age: Int = 0 constructor (name: String, age: Int) { this.name = name this.age = age } fun introduce() { println(“이름은 ${name}이고, ${age}살 입니다.”) } } fun main() { val puppy = Animal(“아리”, 5) println(puppy.name) // 출력 결과는 “아리” println(puppy.age) // 출력 결과는 “5” puppy.introduce() // 출력 결과는 “이름은 아리이고, 5살 입니다.” }
class Animal{ /* 중략 */ } class Bird(birdName: String, birdAge: Int) : Animal(name = birdName, age = birdAge) { var flySpeed: Int = 0 set(value) { if (value <= 50) { field = value } } fun fly() { println(“${flySpeed}속도로 날고있어요!”) } } fun main() { val puppy = Animal(“아리”, 5) puppy.introduce() // 출력 결과는 “이름은 아리이고, 5살 입니다.” val yeppy = Bird(“예피”, 3) yeppy.introduce() // 출력 결과는 “이름은 예피이고, 3살 입니다.” yeppy.flySpeed = 30 yeppy.fly() // 출력 결과는 “30속도로 날고있어요!” } -> 상속된 클래스
class Animal{ /* 중략 */ } class Bird(birdName: String, birdAge: Int) : Animal(name = birdName, age = birdAge) { var flySpeed: Int = 0 set(value) { if (value <= 50) { field = value } } fun fly() { println(“${flySpeed}속도로 날고있어요!”) } } fun main() { val puppy = Animal(“아리”, 5) puppy.introduce() // 출력 결과는 “이름은 아리이고, 5살 입니다.” val yeppy = Bird(“예피”, 3) yeppy.introduce() // 출력 결과는 “이름은 예피이고, 3살 입니다.” yeppy.flySpeed = 30 yeppy.fly() // 출력 결과는 “30속도로 날고있어요!” }
class Animal{ /* 중략 */ } class Bird(birdName: String, birdAge: Int) : Animal(name = birdName, age = birdAge) { var flySpeed: Int = 0 set(value) { if (value <= 50) { field = value } } fun fly() { println(“${flySpeed}속도로 날고있어요!”) } } fun main() { val puppy = Animal(“아리”, 5) puppy.introduce() // 출력 결과는 “이름은 아리이고, 5살 입니다.” val yeppy = Bird(“예피”, 3) yeppy.introduce() // 출력 결과는 “이름은 예피이고, 3살 입니다.” yeppy.flySpeed = 30 yeppy.fly() // 출력 결과는 “30속도로 날고있어요!” } -> getter/setter 함수
람다 표현식 - 람다 표현식은 함수를 작성하는 약식 문법을 제공 - 함수 유형을 다른 함수에 전달할 수 있다. val greeting = { name: String -> println(“안녕! 나는 ${name}야!”) } greeting(“아리") // 출력 결과 “안녕! 나는 아리야!”
고차함수 - 함수를 인자로 전달받거나 함수를 결과로 반환하는 함수 fun sum (a: Int, b: Int): Int = a + b fun calculate(a: Int, b: Int): Int = sum(a, b) println(“10 + 20 = ${calculate(10, 20)}”) // 출력 결과는 “10 + 20 = 30”
Compose 용어 정리! @Composable (컴포저블) 구성 가능한 함수를 호출하여 데이터를 UI요소로 반환하는 것입니다. 리컴포지션 (재구성) Compose가 데이터 변경사항에 따라 변경될 수 있는 컴포저블을 다시 실행한 다음 변경사항을 반영하도록 컴포지션을 업데이트하는 것입니다. State / MutableState 앱의 상태를 Compose에서 관찰 가능하거나 추적 가능한 상태로 설정할 수 있습니다. State -> 수정은 불가하고 읽기만 가능한 ‘ReadOnly’! MutableState -> 수정과 읽기 모두 가능!
(Composition) @Composable fun EditNumberField() { var inputValue by remember { mutableStateOf(“”)} TextField( value = inputValue.value, onValueChange = { inputValue.value = it }, }