제네릭 제네릭은 컴파일 시점에 해당 타입을 확정짓지않고 런타임으로 유예시켜 다양한 타입을 받아들일 수 있도록 제공되는 문법입니다. 자바에서 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 클래스에 해당 함수가 들어있던 것처럼 보인다. ..
객체간에 변경할 수 없는(immutable) 데이터를 전달하는 것은 가장 흔하게 웹 어플리케이션을 개발하면서 만날 수 있는 작업입니다. Java 14 이전에는 boilerplate code 가 포함된 클래스를 만들어야 했으며 이는 사소한 실수와 복잡한 의도 등에 취약했습니다. Java14가 출시되면서 이제 record 키워드를 사용하여 이런 문제들을 해결할 수 있었습니다. Record record 키워드 사용하기 이전 대부분의 많은 상황에서 데이터를 전달하는 클래스는 데이터베이스에서 데이터를 꺼내와서 http 통신 너머의 유저에게 데이터를 전달하여 보여주는 역할을 하게 됩니다. 대부분 말씀하시는 DTO가 이런 역할로 볼 수 있습니다. 많은 경우 이러한 데이터를 변경하여 전달하기보다 해당 디비 raw 데이..
실드 클래스 하나의 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의 참조를 확인해보았을 때, 추가, 수정, 삭제 함수가 없다. -> 컬렉션 내부를 ..
switch 문을 사용하는 여러 예제들을 정리해보자! public enum RoomType { BILLA, OFFICETEL, APT; } 위 enum이 있을 때, switch문이 없는 경우 아래처럼 코드를 짤 수 있을 것입니다. public void exampleOfIf(RoomType roomType) { if (roomType == RoomType.APT) { System.out.println("아파트"); } else if (roomType == RoomType.BILLA) { System.out.println("일반주택"); } else if (roomType == RoomType.OFFICETEL) { System.out.println("오피스텔"); } } 위 처럼 코드를 짜는 경우는 보기도..