제네릭 제네릭은 컴파일 시점에 해당 타입을 확정짓지않고 런타임으로 유예시켜 다양한 타입을 받아들일 수 있도록 제공되는 문법입니다. 자바에서 Collection(List, Map, Set 등)을 활용해보셨다면 코틀린에서도 충분히 쉽게 다가올 수 있을 것입니다. 코틀린의 클래스는 자바와 마찬가지로 타입 파라미터를 가질 수 있습니다. class BlackdogGenerics(val t: T) { } 타입 파라미터란 위의 제네릭 클래스의 T 타입입니다. 위의 제네릭 클래스를 실행로직에서 활용해보겠습니다. 타입 아규먼트를 제공해주면 됩니다. fun main() { val blackdogGenerics = BlackdogGenerics("제네릭"); } 여기서 타입 아규먼트 선언은 생략할 수 있습니다. (타입추론)..
확장함수란 코틀린에서는 기존 클래스를 상속하거나 데코레이터 패턴 같은 디자인 패턴을 활용하지 않고도 클래스의 사용 목적을 확장할 수 있도록 기능을 제공합니다. 예를 들어, String 클래스를 예로 String 인스턴스의 맨 첫번째 요소를 가져오는 함수를 만들어두고 표준라이브러리에 추가하는 효과처럼 보이고 싶다면 fun String.getFirstWord() = this[0] fun main() { val str = "str"; println(str.getFirstWord()) } // s 이런식으로 마치 String 클래스에 이어서 getFirstWord라는 함수를 추가해두고 필요할 때 호출해서 사용할 수 있다. main 함수에서는 마치 이미 String 클래스에 해당 함수가 들어있던 것처럼 보인다. ..
실드 클래스 하나의 Parent 클래스가 있을 때, 이를 상속하는(인터페이스라면 구현하는) 다른 Child1, Child2, ... 클래스가 있다고 가정하면, 컴파일러는 현재 시점에서 어떤 클래스가 Parent를 상속하고 상속하지 않는지 알수가 없다. abstract class AbstractRoom { abstract val roomType: String abstract val title: String abstract fun tellStatus() } data class RoomApt(override val title: String) : AbstractRoom() { override val roomType: String = "아파트"; override fun tellStatus() { println("..
싱글톤이란 싱글톤 패턴에서 싱글톤, 즉 단하나의 인스턴스를 토대로 개발해나가는 디자인 패턴의 하나이다. 멀티스레드 환경에서도 안전하게 유일한 인스턴스를 가져야합니다. 싱글톤을 구현하는 방법은 굉장히 많습니다. 이러한 디자인 패턴은 한가지 언어에 국한되지 않고 다양하게 적용할 수 있기 때문에 싱글톤 패턴이라는 디자인 패턴을 보고싶은 분들의 경우에는 아래의 블로그 포스팅을 참조해주세요. https://sas-study.tistory.com/478 [Java Design Pattern] 자바 디자인패턴, Singleton 싱글톤 패턴 싱글톤 패턴 시스템 런타임이나 환경 셋팅에 대한 정보등 클래스 인스턴스가 여러개일 때 문제가 발생할 수 있는 요구사항이 있다. 이럴 경우 싱글톤 패턴을 활용한다면 인스턴스를 오직..
데이터 클래스 데이터 클래스는 데이터를 보관하거나 전달하기 위한 목적을 가진 객체를 설계할 때 활용할 수 있습니다.(DTO) class 키워드 앞에 data 를 선언하여 사용할 수 있습니다. data class Room(var roomType: String, var price: Int) 이렇게 data 키워드를 사용하게 되면 코틀린 컴파일러가 아래의 함수들을 자동으로 생성해줍니다. equals() hashCode() toString() componentN() copy() 기존 자바 개발자분들은 Spring Framework를 이용하여 웹 어플리케이션을 개발할 때, Lombok 라이브러리를 많이 이용하셨을텐데요. 거기에서 @Data 어노테이션과 비슷한 역할을 한다고 보시면 될 것 같습니다. 뿐만 아니라 J..
Kotlin Collection 1. Collection Types 코틀린은 자체적으로 기본 컬렉션 타입인 List, Set, Map을 제공하고 있습니다. 코틀린은 두가지 성격의 컬렉션을 제공합니다. - 가변 컬렉션(mutable) : 자바의 컬렉션처럼 가변적으로 삽입, 수정, 삭제 작업이 가능한 컬렉션 - 불변 컬렉션(immutable) : 자바의 unmodifiableList 처럼 해당 컬렉션의 인스턴스 뿐만아니라 내부 값까지도 불변하도록 처리하는 컬렉션 타입 2. 컬렉션 생성하기. Immutable List val roomTypeList = listOf("원룸", "투룸", "아파트", "오피스텔") - 해당 list의 참조를 확인해보았을 때, 추가, 수정, 삭제 함수가 없다. -> 컬렉션 내부를 ..
코틀린도 자바와 마찬가지로 enum 타입의 클래스를 제공한다. 자바와 동일하게 상수 클래스로써의 역할을 한다. 코드를 살펴보자 enum class PaymentStatus { UNPAID, PAID, FAILED, REFUNDED } 자바와는 다르게 enum 키워드 뒤에 class라는 키워드를 붙여주어야 한다. 이제 필드를 추가해보자. 해당 enum의 상수가 어떤 값인지를 나타내는 label 문자열 변수를 추가해보자. enum class PaymentStatus(val label: String) { UNPAID("미지급"), PAID("지급완료"), FAILED("지급실패"), REFUNDED("환불") } 해당 값을 출력해보자 fun main() { println(PaymentStatus.UNPAID...
코틀린의 class 타입은 기본적으로 final 입니다. final 키워드가 클래스에 붙게 되는 경우 해당 클래스는 상속을 이어갈 수 없는 클래스가 됩니다. 자바에서는 모든 클래스가 상속이 가능하며 final 키워드를 활용하여 추후 상속가능성을 닫는 구조였습니다. 하지만 kotlin은 class가 상속을 허용해주는 방향으로 발전해나갔으며 해당 키워드는 open 입니다. open class Dog { // 상속이 가능한 상태의 클래스 open var age: Int = 0 open fun bark() { println("멍멍") } } Dog 클래스의 필드, 함수들 또한 클래스와 마찬가지로 open 키워드를 통해 오버라이딩을 허용해주어야 합니다. 해당 Dog 클래스를 상속하는 ChildDog 클래스를 만들..