프로그래밍 8

[Kotlin] 코틀린 MapStruct 적용 및 사용하기 (feat.gradle)

서버 작업을 하면 빈번하게 필요한 Model과 DTO 변환을 필드 선언만 해놓으면 자동으로 변환해주는 MapStruct를 Java 작업할때 많이 사용하는데요. Kotlin에서도 적용해보았습니다. Kotlin MapStruct 적용 build.gradle.kts 파일에 추가해줍니다. // build.gradle.kts plugins { kotlin("kapt") version "1.7.10" } subprojects { apply(plugin = "kotlin-kapt") dependencies { implementation("org.mapstruct:mapstruct:1.5.2.Final") kapt("org.mapstruct:mapstruct-processor:1.5.2.Final") kaptTest(..

backend/Kotlin 2022.09.02

[Kotlin] 코틀린 값 비교 - Equality Checks

Kotlin에서 == 연산자는 값이 같은지 비교하고, === 연산자는 참조값이 같은지 비교하는데 사용합니다. a == b 처럼 쓰면 아래처럼 컴파일 됩니다. if (a == null) b == null else a.equals(b) 아래 초 간단 예제를 봅니다. set, list 모두 동일한 결과이고 == 는 순서에 상관없이 set에 값이 같으면 true, === 는 객체 자체가 같은지 비교하니까 false로 나옵니다. list는 == 은 값의 순서가 같아야지 true, === 는 다른 객체니까 false로 나옵니다. fun main() { val book1 = setOf("book1","book2") val book2 = setOf("book1","book2") println(book1 == book2..

[Kotlin] 가변 컬렉션과 읽기 전용 컬렉션 구분하기

이펙티브 코틀린 책을 읽고 간단히 정리해본 것입니다. 아이템1. 가변성을 제한하라. - 가변 컬렉션과 읽기 전용 컬렉션 구분하기 중에서 읽기 전용 컬렉션 Iterable, Collection, Set, List 인터페이스 읽고 쓸수 있는 컬렉션 MutableIterable, MutableCollection, MutableSet, MutableList 인터페이스 - 읽기전용 인터페이스를 상속 받아, 변경을 위한 메서드만 추가. Iterable 과 MutableIterable 인터페이스 package kotlin.collections import kotlin.internal.PlatformDependent /** * Classes that inherit from this interface can be rep..

backend/Kotlin 2022.08.02

[Kotlin] 읽기 전용 프로퍼티 - val property

다음 내용은 이펙티브 코틀린 책을 읽고 간단히 정리해본 것입니다. 아이템1. 가변성을 제한하라. - 읽기 전용 프로퍼티(val) 중에서 읽기 전용 프로퍼티인 val에 대해 정리해보자. val a = 10 //a = 20 // 재할당 불가. val list = mutableListOf(1, 2, 3) // 읽기 전용 프로퍼티(val)로 선언되었어도 mutable 객체를 담고 있다면 내부적으로 변환 가능 list.add(4) print(list) //list = mutableListOf(5) //val 로 선언되었다면 재할당이 불가능 '프로퍼티를 읽을 수만 있다는 속성(읽기 전용)'과 '값이 변할 수 없는 것(가변성)'을 구분해서 생각해야한다. var 프로퍼티를 사용하는 val 프로퍼티는 var 프로퍼티가 ..

backend/Kotlin 2022.07.30

[Spring] WebClient DataBufferLimitException WebFlux 오류 해결

글 작성시의 버전 Springboot : 2.3 버전 / Spring webflux : 5.2 버전 문제 WebClient를 통해 데이터를 가져오는데 데이터의 용량이 너무 커서 메모리 버퍼사이즈가 초과해서 DataBufferLimitException: Exceeded limit on max bytes to buffer : 262144 에러가 발생했습니다. 해결 application memory 이슈를 피하기 위해 Codecs는 버퍼 데이터 사이즈를 제한을 두었습니다. 기본값으로 256KB이고, 만약 이 값이 충분하지 않을 경우에는 기본 코덱 설정값을 바꿔줘야합니다. WebClient를 build시 codec 설정을 넣어주면 되는데요. 특정사이즈(예 10MB)로 하고 싶다면? 10 * 1024 * 1024..

backend/Spring 2022.04.10

[IntelliJ] 사용하지 않는 import문 자동으로 삭제되도록 설정

사용하던 코드를 삭제한 경우 아래처럼 import문이 그대로 남아있는 경우가 있습니다. IntelliJ > Code > Optimize Imports 인 단축키 control + option + O(mac 키보드 기준)를 사용할 수도 있지만.. 자동으로 설정하기 위해 Preferences > Editor > General > Auto Import > Optimize Imports on the fly을 클릭해주면 됩니다. (단, 언어를 여러개 사용중이시라면 언어별 Editor별로 Optimize Imports on the fly에 체크!를 해야합니다.) Java Editor 를 사용중이시라면 Java 영역의 Optimize Imports on the fly에 체크! Kotlin Editor를 사용중이시라면..

[Python] Python 3.9 버전 'HTMLParser' object has no attribute 'unescape' 오류 해결

python 설치 후에 한동안 사용하지 않아 upgrade가 필요했나 봄. 문제 python 파일을 만들어 수행하려고 하니 'HTMLParser' object has no attribute 'unescape' 오류가 발생. 1초 해결. pip3 install --upgrade setuptools # pip3 install --upgrade setuptools Requirement already satisfied: setuptools in /usr/local/lib/python3.9/site-packages (54.1.2) Collecting setuptools Downloading setuptools-60.2.0-py3-none-any.whl (953 kB) |████████████████████████..

카테고리 없음 2022.01.03

[책] 패턴 그리고 객체지향적 코딩의 법칙

문우식 지음/한빛미디어 이 책을 읽으면서 나초보씨와 나고수씨의 오고가는 훈훈한 대화속에 알쏭달쏭한 패턴들이 자리잡혀 갑니다. 흔히 어떤 패턴을 공부하려면 제목 “싱글턴 패턴”은 이럴 때, 이렇게, 이런 방식으로 쓰인다라는 식으로 정리가 되어 있는 책들이 많은데, 소설처럼 대화에 코드내용을 묻어나게 하고, 적절한 C++코드와 나초보씨가 짠 코드를 우선 보여주고, 리팩토링을 하는 코드가 담겨져 있습니다. 리팩토링을 하면서 패턴을 적용하고, 나고수씨의 노하우도 알게 되고, 나초보에 해당하는 저는 얻을게 많은 것 같습니다. 물론 익숙하지 않은 C++코드이지만, 객체지향 언어를 하는 사람은 문안하게 때려 맞춰 볼 수 있고, 너무 어렵지 않게 그 속에서 어떻게 해결할 것인가를 같이 고민하게 합니다. 다만 패턴이다 ..