제네릭 클래스나 메서드 내부에서 사용할 타입을 외부에서 지정하는 방법이다. 원하는 자료형이 입력되지 않았을때 컴파일 타임에 에러를 발생시켜 안정성을 높일수 있다. 자바에서의 제네릭 코틀린의 제네릭을 알아보기 전에 자바에서의 제네릭 사용법부터 알아보자. 제네릭 선언 // 제네릭 클래스 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..
확장 코틀린의 확장 기능을 통해 기존 클래스의 함수(메서드) 및 프로퍼티를 확장 정의하여 사용할 수 있다. 확장 불가 클래스(final) 또는 짧은 범위에서 특정 클래스의 기능을 추가/수정할 경우 유용하다. 호출 시점에 부가 비용이 발생하지 않는다. 확장 함수 (Extension function) [확장 하려는 대상 클래스].함수명() 형식으로 정의한다. 코틀린의 최상위 객체인 Any에 확장 함수를 정의하면 모든 객체에서 사용 가능하다. 확장 함수의 경우 내부에서만 사용할수 있는 private, protected 멤버에는 접근하지 못한다. 확장 함수와 클래스 멤버 함수의 이름이 같은경우 멤버 함수의 우선순위가 더 높기때문에 클래스 내의 멤버 함수가 호출 된다. class Person(val name: S..
가시성 제한자 클래스, 오브젝트, 인터페이스, 생성자, 함수, 프로퍼티(setter)는 가시성 제한자를 가질수 있다. getter의 경우 항상 프로퍼티와 같은 가시성 제한자를 가진다. private, protected, internal, public 네개의 제한자가 존재하며 기본적으로 public 가시성을 가진다. 패키지 함수, 프로퍼티, 클래스, 오브젝트, 인터페이스는 최상위 레벨로 선언 가능하다. 제한자 범위 public 제한자 설정 안할시 기본적으로 적용됨. protected 최상위 레벨 선언에서는 사용 못함. internal 같은 모듈 내부에서 접근 사능함. private 같은 패일 내에서만 접근 가능함. package person private fun walk() { // 같은 파일 내에서만 접..
코틀린(Kotlin) | 추상 클래스 추상 클래스는 하나 이상의 추상 메서드(구현체가 없는 메서드)를 가진다. 추상 클래스는 객체를 생성할 수 없다. 추상 클래스를 상속하여 모든 추상 메서드를 구현하여야만 객체를 생성 할 수 있다. 코틀린에서 추상 클래스란 abstract클래스 내부에 abstract멤버를 하나 이상 가진 클래스를 의미한다. open키워드를 따로 추가하지 않아도 된다. abstract class Animal { abstract fun bark() fun eat() { println("animal is eating") } } class Dog : Animal() { override fun bark() { println("bow wow") } } fun main() { val animal =..