Kotlin
-
코틀린 고급편 - 제네릭Kotlin/코틀린 고급편 2023. 12. 19. 15:52
1. 제네릭과 타입 파라미터 fun main() { /** * example01 */ val cage = Cage() cage.put(Carp("잉어")) // val carp: Carp = cage.getFirst() // Error: Type Mismatch // val carp: Carp = cage.getFirst() as Carp // 만약에 넣은게 금붕어였다면?! -> 런타임 에러 // Safe Type Casting과 Elvis Operator val carp: Carp = cage.getFirst() as? Carp?: throw IllegalArgumentException() // generic 활용 val cage2 = Cage2() cage2.put(Carp("잉어")) val car..
-
7. 마지막 세션Kotlin/실전! 코틀린과 스프링 부트로 ... 개발 2023. 8. 8. 20:29
추가 - 테스트와 영속성 컨텍스트 - 테스트 코드와 LazyInitializationException ㆍ테스트 코드에서 A 엔티티를 불러오고 B객체에 접근을 하면 영속성 컨텍스트가 종료되어 버려서 지연 로딩 객체를 초기화할 수 없게 될 경우 - 테스트 코드에서 영속성 컨텍스트를 쓰고 싶은 상황이 분명 있음! @Transactional fun saveUserAndLoanTwoBooks() { val newUser = User("A", 123) val books = bookRepository.saveAll(listOf(Book("책1", COMPUTER), Book("책2", COMPUTER))) books.forEach { book -> newUser.loanBook(book) } // UserLoanHi..
-
6. 네 번째 요구사항 추가하기 - QuerydslKotlin/실전! 코틀린과 스프링 부트로 ... 개발 2023. 8. 8. 20:07
37. Querydsl 도입하기 1. JPQL과 Querydsl의 장단점을 이해할 수 있다. 2. Querydsl을 Kotlin + Spring Boot 와 함께 사용할 수 있다. 3. Querydsl을 활용해 기존에 존재하던 Repository를 리팩토링 할 수 있다. JPQL은 무슨 단점이 있을까? - 문자열이기 때문에 '버그'를 찾기가 어렵다! - JPQL 문법이 일반 SQL와 조금 달라 복잡한 쿼리를 작성할 때마다 찾아보아야 한다. Spring Data JPA는 무슨 단점이 있을까? - 조건이 복잡한 동적쿼리를 작성할 때 함수가 계속해서 늘어난다. - 프로덕션 코드 변경에 취약하다. JPQL과 Spring Data JPA의 단점 정리! 1. 문자열로 쿼리를 작성하기에 버그를 찾기 어렵다. 2. 문..
-
5. 세 번째 요구사항 추가하기 - 책 통계Kotlin/실전! 코틀린과 스프링 부트로 ... 개발 2023. 8. 8. 10:34
32. 책 통계 보여주기 - 프로덕션 코드 개발 1. SQL의 다양한 기능들 ( sum, avg, count, group by, order by)을 이해한다. 2. 간결한 함수형 프로그래밍 기법을 사용해보고 익숙해진다. 3. 동일한 기능을 애플리케이션과 DB로 구현해보고, 차이점을 이해한다. 33. 책 통계 보여주기 - 테스트 코드 개발과 리팩토링 34. 다양한 SQL을 알아보자! - 살펴볼 SQL 종류 : sum / avg / count / group by / order by 35. 애플리케이션 대신 DB로 기능 구현하기 @Transactional(readOnly = true) fun countLoanedBook(): Int { // return userLoanHistoryRepository.findA..
-
4. 두 번째 요구사항 추가하기 - 도서 대출 현황Kotlin/실전! 코틀린과 스프링 부트로 ... 개발 2023. 8. 7. 10:03
25. 유저 대출 현황 보여주기 - 프로덕션 코드 개발 1. join 쿼리의 종류와 차이점을 이해한다. 2. JPA N + 1 문제가 무엇이고 발생하는 원인을 이해한다. 3. N + 1 문제를 해결하기 위한 방법을 이해하고 활용할 수 있다. 4. 새로운 API를 만들 때 생길 수 있는 고민 포인트를 이해하고 적절한 감을 잡을 수 있다. Controller를 구분하는 3가지 기준 1. 화면에서 사용되는 API 끼리 모아 둔다. - 장점 ㆍ화면에서 어떤 API가 사용되는 한 눈에 알기 용이하다 - 단점 ㆍ한 API가 여러 화면에서 사용되면 위치가 애매하다. ㆍ서버 코드가 화면에 종속적이다. 2. 동일한 도메인끼리 API를 모아둔다. - 장점 ㆍ화면 위치와 무관하게 서버 코드는 변경되지 않아도 된다. ㆍ비슷한..
-
3. 첫 번째 요구사항 추가하기 - 책의 분야Kotlin/실전! 코틀린과 스프링 부트로 ... 개발 2023. 8. 5. 10:39
21. 책의 분야 추가하기 1. Type, Status 등을 서버에서 관리하는 방법들을 살펴보고 장단점을 이해한다. 2. Test Fixture의 필요성을 느끼고 구성하는 방법을 알아본다 3. Kotlin에서 Enum + JPA + Spring Boot를 활용하는 방법을 알아본다. Object Modal Pattern - Test Fixture @Entity class Book( val name: String, val type: String, @Id @GeneratedValue(strategy = GenerationType.IDENTITY) val id: Long? = null, ) { init { if (name.isBlank()) { throw IllegalArgumentException("이름은 비..
-
2. Java 서버를 Kotlin 서버로 리팩토링Kotlin/실전! 코틀린과 스프링 부트로 ... 개발 2023. 8. 2. 14:47
11. Kotlin 리팩토링 계획 세우기 - 1. Domain ㆍ특징 : POJO, JPA Entity 객체 - 2. Repository ㆍ특징 : Spring Bean, 의존성 X - 3. Service ㆍ특징 : Spring Bean, 의존성 O, 비즈니스 로직 - 4. Controller / DTO ㆍ특징 : Spring Bean, 의존성 O / DTO의 경우 그 숫자가 많다. 12. 도메인 계층을 Kotlin으로 변경하기 - Book.java Caused by: java.lang.NoClassDefFoundError: kotlin/reflect/full/KClasses - kotlin class에 대해서 리플렉션을 못한다. - 해결방안 : gradle에 해당 dependencies 추가 imple..
-
1. 리펙토링 준비Kotlin/실전! 코틀린과 스프링 부트로 ... 개발 2023. 7. 31. 16:00
1. 도서관리 애플리케이션 이해하기 2. 테스트 코드란 무엇인가, 그리고 왜 필요한가?! 테스트 코드는 왜 필요한가?! - 1. 개발 과정에서 문제를 미리 발견할 수 있다. - 2. 기능 추가와 리팩토링을 안심하고 할 수 있다. - 3. 빠른 시간 내 코드의 동작 방식과 결과를 확인할 수 있다. - 4. 좋은 테스트 코드를 작성하려 하다보면, 자연스럽게 좋은 코드가 만들어 진다. - 5. 잘 작성한 테스트는 문서 역할을 한다. (코드리뷰를 돕는다.) 3. 코틀린 코드 작성 준비하기 plugins { id 'org.jetbrains.kotlin.jvm' version '1.6.21' } dependencies { implementation 'org.jetbrains.kotlin:kotlin-stdlib-j..