본문 바로가기

kotlin

(7)
헥사고날 아키텍처 정리 및 예제 일반적인 계층화 아키텍처의 문제점 저 같은 경우 예전에는 습관적으로 Controller, Service, Repository를 작성하고, 이것을 표현(프레젠테이션) 계층, 비즈니스 로직 계층, 영속화(퍼시스턴스) 계층이라고 생각하고 사용했습니다. 하지만 일반적인 계층화 아키텍처에는 몇 가지 중요한 이슈가 있다고 생각합니다. 표현 계층은 하나뿐인가? 사실 애플리케이션을 호출하는 시스템은 다양할 수 있습니다. 자주 사용되는 HTTP 호출이 있을 수 있고, 또는 웹소켓을 통한 호출 및 기타 다양한 프로토콜이 될 수 있습니다. 영속화 계층이 하나뿐인가? 표현 계층에 대한 문제와 유사합니다. 사용하는 DB가 MySQL, Oracle과 같은 RDBMS일수도 있고, 빠른 검색 및 샤딩을 위한 NoSQL이 될 수 있..
Jackson 라이브러리 Annotation 총정리 출처 : https://www.baeldung.com/jackson-annotations Jackson Annotation Examples | Baeldung The core of Jackson is basically a set of annotations - make sure you understand these well. www.baeldung.com 예제 코드 : https://github.com/vljh246v/TIL/blob/main/Kotlin/study/src/test/kotlin/com/jaehyun/kotlin/study/jackson/custom/TestClassTest.kt GitHub - vljh246v/TIL: Today I learned Today I learned. Contrib..
[JUnit] 파일 & 리소스 (/src/test/resources) 가져오기 * JUnit5 사용 1. 시나리오 * 테스트 중 파일을 읽거나 테스트 중인 정보를 파일에 써야 할 때가 있음 * 디렉토리의 파일을 읽는 방법이 필요함 2. File I/O 사용 * 가장 간단한 방법은 java.io.File 클래스의 인스턴스의 getAbsolutePath() 메소드를 호출하여 선택한 디렉터리를 읽는 방법 @Test fun useFileIo() { val path: String = "src/test/resources" val file: File = File(path) val absolutePath = file.absolutePath println(absolutePath) assertTrue(absolutePath.endsWith(path)) } * 출력 결과는 아레와 같다. /Users/..
[JUnit] Dynamic Tests * JUnit5 사용 1. Dynamic Test란? * @Test 주석이 달린 표준 테스트는 컴파일 시간에 정의되는 static 한 테스트이다. * Dynamic Test는 런타임 중에 생성되는 테스트 * @TestFactory 주석이 달린 팩토리 메소드에 의해 생성 * 팩토리 메소드는 DynamicTest 인스턴스의 Stream, Collection, Iterator를 반환해야 함 * @BeforeEach / @AfterEach 와 같은 생명주기 관련 어노테이션을 지원하지 않음 2. Dynamic Test 예제 * @TestFactory method는 dynamic test라는 것을 명시해준다. * dynamic test는 컬렉션을 반환함 * 이름, 실행 두 부분으로 나뉨 @TestFactory fu..
[JUnit] 객체 타입 체크 * JUnit5 사용 * 반환된 객체의 타입을 체크해야할 경우가 있다. 1. 시나리오 * 나뭇잎 타입에따라 나무를 분류한다. * 올바른 유형을 반환하는지 검사할 필요가 있다. class TestClass { fun sortTree(name: String): Tree { val deciduous = listOf("Beech", "Birch", "Ash", "Whitebeam", "Hornbeam", "Hazel & Willow") val evergreen = listOf("Cedar", "Holly", "Laurel", "Olive", "Pine") return if(deciduous.contains(name)) { Deciduous(name) } else if(evergreen.contains(name)..
[JUnit] JUnit에서 현재 실행 중인 테스트 이름 가지고 오기 * JUnit5 사용 * TestInfo 객체를 테스트에 주입 가능 1. 개별 테스트 @Test fun givenNumbers_whenOddCheck_thenVerify1(testInfo: TestInfo) { println("displayName = " + testInfo.displayName) val number = 5 assertTrue(TestClass().oddCheck(number)) } * 테스트 이름을 표시하기 위해 인터페이스 TestInfo의 displayName 프로퍼티를 사용 displayName = givenNumbers_whenOddCheck_thenVerify1(TestInfo) 2. Parameterized 테스트 var testInfo: TestInfo? = null @Be..
[Kotlin] 함수 정의와 호출 함수 정의와 호출 3장에서 다루는 내용 컬렌션, 문자열, 정규식을 다루기 위한 함수 이름 붙인 인자, 디폴트 파라미터 값, 중위 호출 문법 사용 확장 함수와 확장 프로퍼티를 사용해 자바 라이브러리 적용 최상위 및 로컬 함수와 프로퍼티를 사용해 코드 구조화 3.1. 코틀린에서 컬렉션 만들기 숫자로 이루어진 집합 val set = hashSetOf(1, 7, 53) 리스트와 맵 val list = arrayListOf(1, 7, 53) val map = hashMapOf(1 to "one", 7 to "seven", 53 to "fifty-three") 여기서 to는 언어가 제공하는 특별한 키워드가 아니라 일반 '함수' 라는 점에 유의하자 위에서 만든 객체의 클래스 >>> println(set.javaCla..