본문 바로가기

Kotlin5

DID 스터디 3회차(kotlin let/run/also/apply/with) DID 안드로이드 앱개발을 위해 kotlin 을 다시 공부하는 중이다. let 확장함수 코드를 보고 이전에 배웠던 let/run/apply/also/with 들을 다시 정리했다. 그전에 코틀린에서 많이 보이는 함수 패턴 중 하나를 간단히 살펴보자. 아래 func 함수는 두개의 인자를 받는다. 1. Int 타입의 age 2. Int 를 받아 Unit 을 리턴(Void 리턴) 하는 process(함수 타입) process 변수에 담길 함수는 전달받은 age 만 출력하는 단순한 로직이지만 확장성 있는 구조를 보여준다. preProcess 와 postProcess 를 계속 재활용하면서 process 부분만 새롭게 바꿀 수 있다. @Test fun test1() { // 코틀린에서 많이 보이는 패턴 func(34.. 2023. 3. 18.
fixture monkey BuilderGroups 이전 글에서 BuilderGroup 추가에 대해서 제대로 설명하지 않고 넘어가서 따로 정리했다. fun fixtureMonkeyBuilder( objectMapper: ObjectMapper = JsonMappers.OBJECT_MAPPER ): FixtureMonkeyBuilder = KFixtureMonkeyBuilder() .defaultGenerator(JacksonArbitraryGenerator(objectMapper)) .registerGroup(BuilderGroup::class.java) 위 코드 마지막줄에서 registerGroup 에 들어가는 BuilderGroup 클래스를 보자. 아래 코드를 보면 fixture 한개를 셋팅했다. RegisterProduct 객체를 fixture mo.. 2021. 12. 27.
코틀린 재귀호출 최적화(Tail-Call) 이전 글에서 자바로 꼬리재귀(TCO) 구현을 설명했다. 하지만 내용이 쉽지 않았는데 코틀린은 tailrec 키워드를 제공하면서 가독성 좋게 구현이 가능하다. @Test fun factorialTest() { print(factorial(5)) } tailrec fun factorial(num: Int, acc: Int = 1): Int = when (num) { 1 -> acc else -> factorial(num - 1, acc * num) } 일반 재귀 버전 fun factorial(num: Int): Int { if (num == 1) { return 1 } return num * factorial(num - 1) } 2021. 12. 16.
fixture monkey 로 예외 발생 테스트 fixture monkey 는 테스트 객체 라이브러리다. fixture 를 자동으로 만들어준다. 사용 예제를 하나 보자. 아래 Order 객체가 있다. import lombok.Data; @Data // lombok getter, setter public class Order { @NotNull private Long id; @NotBlank private String orderNo; @Size(min = 2, max = 10) private String productName; @Min(1) @Max(100) private int quantity; @Min(0) private long price; @Size(max = 3) private List items = new ArrayList(); @PastOr.. 2021. 12. 15.
form data 를 string으로 변환하기 content type application/x-www-form-urlencoded 으로 request body를 보낼 때 key=value 쌍 string 을 만들기 위한 코틀린 코드다. List 데이터 구조를 string 으로 만드는 encode 함수가 핵심이다. 추가적으로 item list를 FormData 로 만들어 flatten 시키는 부분도 있다. typealias FormData = List class FormDataTest { @Test fun formDataToString() { val baseFormData = getBaseForm() val itemFormData = listOf( Item("1", "food"), Item("2", "cloth") ).map { it.toFormDat.. 2021. 11. 15.