프로퍼티 자바에서는 필드의 개념으로 접근하지만 코틀린에서는 프로퍼티 개념으로 사용한다. 프로퍼티 = 필드 + 접근자 코틀린에서 접근자를 명시하지 않을경우 자동으로 생성해준다. class Person { val name = "park jin" var age = 31 var isMarried = false } fun main() { val person = Person() println("person name is ${person.name}") println("person age is ${person.age}") println("person is married ${person.isMarried}") } 커스텀 접근자 접근자에서 계산과 같은 동작을 해야한다면 직접 작성 가능하다. var [ : 타입] [= ] ..
발단 오브젝트가 함수형 인터페이스면 접두어로 인터페이스 파입을 가진 람다를 생성할 수 있다하여 따라해봄. @FunctionalInterface interface FunctionalInterface { fun apply() } fun main() { val f = FunctionalInterface { println() } // error?? } 그런데 생성이 안되고 에러가 발생함.. 뭐지?? 함수형 인터페이스를 잘못 선언했나 해서 기존에 있는 클래스를 가지고 다시 시도해봄. fun main() { val r = Runnable { println("run!") } r.run() // run! } 이건 잘됨;;; 뭐지?? 그래서 Runnable을 코틀린으로 가져와 다시 시도해봄 @FunctionalInter..
중첩 클래스 클래스 안에 또 다른 클래스를 중첩해서 사용할 수 있다. 중첩된 클래스는 외부 클래스의 멤버를 접근할 수 없다. 자바의 정적 중첩 클래스와 느낌이 비슷하다...? class Outer { private val outerMember = 10 fun outerFunc() = println("outer function call!!") class Nested { // 외부 클래스 접근 불가 // pinrtln(outerMember) // outerFunc() fun nestedFunc() = print("nested function call!!") } } fun main() { // 자바의 중첩 스태틱 클래스와 같다 Outer.Nested().nestedFunc() // nested function..
제네릭 클래스나 메서드 내부에서 사용할 타입을 외부에서 지정하는 방법이다. 원하는 자료형이 입력되지 않았을때 컴파일 타임에 에러를 발생시켜 안정성을 높일수 있다. 자바에서의 제네릭 코틀린의 제네릭을 알아보기 전에 자바에서의 제네릭 사용법부터 알아보자. 제네릭 선언 // 제네릭 클래스 public class GenericJava { private T value; // 제네릭 메서드 public static void genericMethod(T t) { System.out.println(t); } public static void main(String[] args) { // String으로 지정 GenericJava genericJava = new GenericJava(); genericJava.value ..
데이터 클래스 자바에서 TO나 VO와 같이 아무런 동작은 하지않고 오로지 데이터를 나르는 역할을 하는 클래스가 존재함. 위의 클래스들은 IDE를 통해 만들거나 외부 라이브러리(lombok)로 컴파일 타임에 만든다. 코틀린에서는 외부 라이브러리를 사용하지 않고 data class라는 클래스를 제공한다. import java.time.LocalDateTime data class Person(val name: String, val age: Int, val birthDay: LocalDateTime) 데이터 클래스는 아래와 같은 멤버를 컴파일 타임에 자동으로 생성한다. 1. equals(), hashCode() 2. toString() - Person(name=park jin, age=31, birthDay=2..
object 자바에서 객체를 생성시 클래스를 정의한후 new키워드를 이용해 객체를 생성해야한다. 코틀린도 위와 같지만 object키워드를 사용하면 바로 객체를 생성할 수 있다. 일반 객체처럼 .(dot)을 이용해서 프로퍼티 및 메서드에 접근 가능하다. 클래스와 다르게 생성자(constructor)가 존재하지 않는다. object Person { val name = "park jin" var age = 31 fun printInfo() { println("name : $name, age: $age") } } fun main() { Person.printInfo() // name : park jin, age: 31 Person.age = 0 //Person.name = "" // error Person.pr..