전체 글
-
Spring Boot: Java에서 Kotlin으로 (2) - TDD,BDD,DDDSpring 2024. 7. 28. 23:53
개요얼마전 코테 대신 과제를 제출하는 회사가 있다는것을 알고 과제에 대해 리서치하기 시작했다.그리고 과제를 할때 항상 반드시 제출하라는것이 바로 테스트코드 였는데 기존에 개발할때는 API 를 개발하고 Postman 으로 Request 보낸뒤 잘 동작하면 끝~ 이라는식으로 개발을 많이 해왔었다.하지만 과제를 찾아보면서 테스트코드가 얼마나 중요한것인지 인지하게 되면서, 주도 개발 방법론에 대해서도 공부했는데, 이번 마이그레이션에도 도입하기전 리서치를 하려고한다. TDD (Test-Driven Development, 테스트 주도 개발)코드를 작성하기 전에 테스트 케이스를 먼저 작성하는 방식소프트웨어 품질을 높이고 코드 결함을 줄이는 것을 목표기본 원칙테스트 작성 후 코드 작성: 테스트 케이스를 작성한 후, 그..
-
Spring Boot: Java에서 Kotlin으로 (1) - Java vs KotlinSpring 2024. 7. 26. 21:03
Spring boot 2.7.x 버전은 2025년 2월 13일을 끝으로 지원이 종료 됩니다. 2025년 2월 종료일이 되기전까지 Spring boot 3.x 버전으로 넘어가야하는데 3.x 버전부터는 Java 버전을 17이상만 사용할 수 있어 기존 Spring boot 를 kotlin 으로 대체하던지 Java 버전을 17이상 올려야하는 양자택일의 상황이 펼쳐져있습니다. Java VS KotlinJava와 Kotlin은 둘 다 JVM (Java Virtual Machine) 언어로서, 주로 Spring Boot와 같은 프레임워크와 함께 백엔드 개발에 사용됩니다. 이 두 언어의 선택은 프로젝트의 요구사항과 개발 팀의 선호도에 따라 달라질 수 있습니다.Java 버전별 지원기간 Java LTS 버전 출시일 공..
-
kotlin) 어노테이션과 리플렉션kotlin 2024. 7. 24. 23:10
코틀린의 어노테이션@Retention어노테이션이 저장되고 유지되는 방식을 제어SOURCE : 어노테이션이 컴파일 때만 존재한다.BINARY : 어노테이션이 런타임 때도 있지만, 리플렉션을 쓸 수 없다.RUNTIME : 어노테이션이 런타임 때 존재하고, 리플레션을 쓸 수 있다.(기본값)@Retention(AnnotationRetention.RUNTIME) //어노테이션이 저장되고 유지되는 방식을 제어annotation class Shapepublic class TestAnnotation {}@Tartget어노테이션이 어디에 붙일지 선택할 수 있다. 종류가 많다.@Target(AnnotationTarget.FIELD, AnnotationTarget.ANNOTATION_CLASS) annotatio..
-
kotlin) 제네릭kotlin 2024. 7. 21. 15:35
제네릭과 타입 파라미터SafeType Casting 과 Elvis Operator추상 클래스 상속과 타입변환의 문제점fun main() { val cage = Cage() cage.put(Carp("잉어"))// val carp: Carp = cage.getFirst() //cage 에 잉어만 있지만, getFirst() 메소드를 호출하면 Animal 이 나온다. val carp : Carp = cage.getFirst() as Crap //Carp 으로 단순 형변환을 하면 되지만 이러면 위험한 코드가 되어버린다. cage.put(GoldFish("금붕어")) val goldFish : Carp = cage.getFirst() as Carp //만약에 cage 안에 넣은게 Car..
-
kotlin) 복잡한 함수형 크로그래밍kotlin 2024. 7. 20. 02:50
고차 함수와 함수 리터럴고차함수하나 이상의 함수를 인자로 받거나, 함수를 반환하는 함수고차 함수는 함수형 프로그래밍의 핵심 개념 중 하나로, Kotlin은 이를 언어 차원에서 지원고차 함수를 통해 코드를 더 유연하고 재사용 가능하게 만들 수 있음//고차함수 Xfun add(num1: Int, num2: Int): Int{ return num1 + num2}//op: (Int,Int) -> Int 를 통해 함수를 인자로 받음 , 고차함수 Ofun compute(num1: Int, num2: Int, op: (Int,Int) -> Int): Int{ return op(num1, num2)} 반환 타입에도 함수가 들어갈 수 있다.//Int,Int 를 받아 Int 함수를 반환하는 함수fun opGen..
-
kotlin) Kotlin 의 지연과 위임kotlin 2024. 7. 18. 23:10
lateinit과 lazy인스턴스화 시점과 프로퍼티 초기화 시점class Person( val name: String,) { val isKim: Boolean get() = this.name.startsWith("JS") //JS -> J* val maskingName: String get() = name[0] + (1 until name.length).joinToString("") { "*" }}fun main() { val person = Person("JS") //클래스 인스턴스화가 이루어지며, name 에 "JS"가 들어간다.}클래스 인스턴스화 시점:val person = Person("JS")에서 Person("JS")를 호출하는 시..
-
kotlin) 추가적으로 알아두어야 할 코틀린 특성kotlin 2024. 7. 13. 17:04
코틀린의 이모 저모1. Type Alias 와 as import개념 : 긴 이름의 클래스 혹은 함수 타입이 있을때 축약하거나 더 좋은 이름을 쓰고 싶을때 사용 Type Alias//기존 함수fun filterFruits(fruits: List, filter: (Fruit) -> Boolean): List {}//typealias 를 통해 미리 type 을 정해서 적용typealias FruitFilter = (Fruit) -> Booleanfun filterFruits(fruits: List, filter: FruitFilter): List {}data class UltraUperGuardianTribe( val name : String)//이름이 긴 클래스를 컬렉션에 사용할 때도 간단하게 줄일 수..
-
kotlin) 코틀린에서의 FPkotlin 2024. 7. 9. 23:04
코틀린에서 배열과 컬렉션을 다루는 방법1. 배열//Java int[] array= {100, 200};for(int i = 0; i 2. 코틀린에서의 Collection - List, Set, Map컬렉션을 만들어줄 때 불변인지, 가변인지를 설정해야 한다.가변 컬렉션 : 컬렉션에 element 를 추가 삭제할 수 있다.불변 컬렉션 : 컬렉션에 element 를 추가 삭제할 수 없다.* element : 콜렉션 내부에 저장되는 각각의 개별 항목코틀린에서 람다를 다루는 방법1. Java에서 람다를 다루기 위한 노력기존 Java 의 문제점'익명 클래스' 를 사용하는것은 복잡하다.다양한 Filter 가 필요할 수 있다.-> JDK8 부터 람다 (이름이 없는 함수) 등장 람다변수 -> 변수를 이용한 함수(변수1,..