본문 바로가기
반응형

전체 글343

2025-02-05 (수) 🎯 오늘 배운 핵심 정리✅ ConstraintValidator의 initialize()는 한 번만 실행됨.✅ as, as?, is를 활용한 안전한 캐스팅 방법.✅ when을 사용한 타입 분기 처리.✅ Kotlin에서 정규식(Regex)을 활용한 URL 검증.✅ 백엔드에서 빈 문자열("")을 체크하도록 isValid() 개선.✅ Markdown에서 태그를 활용한 토글 기능.📌 1. ConstraintValidator에서 initialize()의 동작 원리initialize()는 검증기가 처음 생성될 때 한 번만 실행된다.@Url(type = ProjectOS.IOS) 같은 애너테이션을 적용하면 그 설정 값을 가져와 초기화할 수 있다.이후 isValid()가 호출될 때마다 검증이 수행됨.override.. 2025. 2. 5.
2025-02-04 (화) 📝 1. Private 필드 값을 설정하는 확장 함수기존의 setPrivateField 함수를 확장 함수로 리팩토링.apply → let으로 변경하여 코드 가독성을 개선.✅ 리팩토링된 코드fun O.setPrivateField(fieldName: String, value: T) { this::class.declaredMemberProperties .find { it.name == fieldName } ?.javaField ?.let { it.isAccessible = true it.set(this, value) }}📝 2. epochSecond 변환 시 LocalDateTime이 하루 차이 나는 문제원인:.. 2025. 2. 4.
2025-02-03 (월) Reflection동적으로 객체의 Property 와 Method 에 접근할 수 있는 방법Property: 멤버 변수 정보보통 객체의 Property, Method 에 접근할 때는 컴파일 과정에서 찾아내 해당 객체가 존재함을 보장하지만, 런타임 과정에서만 알 수 있거나 타입과 관계없이 객체를 다루어야 하는 경우가 있다.Json 직렬화 라이브러리: 어떤 객체든지 간에 Json 으로 변환할 수 있어야 함.Libraryjava.lang.reflect packageKotlin Class 는 컴파일 과정에서 자바 바이트 코드로 변환되기 때문에 Kotlin 에서도 java package 호환됨.kotlin.reflect packagejava 에 존재하지 않는 Property 나 Nullable 한 타입에 대한 Re.. 2025. 2. 3.
2025-01-22 (수) every { ... } 블록 내에서 사용된 객체가 mockk()로 생성된 객체가 아닐 때 발생every { KeyGenerator.next() } returns base.projectIdMissing mocked calls inside every { ... } block: make sure the object inside the block is a mockio.mockk.MockKException: Missing mocked calls inside every { ... } block: make sure the object inside the block is a mockKetGenerator.next() 가 정적 메서드라면 mockkStatic(KeyGenerator::class) 를 호출해야 함.중요 .. 2025. 1. 22.
2025-01-21 (화) Controller WebMvcTest IssueKotlin 진행@WebMvcTest(BusinessUserController::class) class AuthAnnotationTest @Autowired constructor( private val mockMvc: MockMvc ) : DescribeSpec({런타임 에러 발생 (일부 코드)Kotest 는 테스트 클래스를 인스턴스화 할 때 기본 생성자를 필요로 함.현재 AuthAnnotationTest 클래스의 생성자는 @Autowired constructor(mockMvc: MockMvc) 형태로 매개변수를 받고 있기 때문에 Kotest 에서 인스턴스를 생성할 수 없음.Warning: Kotest autoscan is enabled. This.. 2025. 1. 21.
2025-01-20 (월) 제네릭Generic 은 코드의 타입을 미리 지정하지 않고, 사용하는 시점에 타입을 결정하는 기능이다.타입 안정성 유지 및 유연한 재사용이 가능한 코드 작성 가능.제네릭을 사용할 경우O 가 정확한 객체 타입을 가지도록 강제할 수 있음.T 가 필드의 타입과 일치해야만 하도록 강제할 수 있음.컴파일 타입에서 타입 검증이 가능해 런타임 오류를 최소화함.예제obj 가 어떤 타입의 객체인지 알 수 없고, value 가 필드 타입과 일치하는지 보장할 수 없음.잘못된 타입이 들어와도 컴파일러가 체크하지 못하고, 런타임에서만 오류가 발생.제네릭을 사용하면, obj 와 value 가 올바른 타입인지 컴파일 시점에 확인할 수 있음.fun setPrivateField(obj: Any, fieldName: String, val.. 2025. 1. 20.
2025-01-16 (목) MutableList, mutableListOf()변경 가능한 리스트를 다룰 때 사용.MutableList인터페이스이므로, 자체적으로 객체를 생성할 수 없으며, 이를 구현한 클래스나 함수를 통해 인스턴스를 생성해야 함.add, remove, clear 등과 같은 수정 작업 지원.val list: MutableList = mutableListOf("a", "b", "c")list.add("d") // "d" 추가list.remove("b") // "b" 제거println(list) // [a, c, d]mutableListOf()인터페이스를 구현한 리스트 객체를 생성하는 함수.인스턴스 생성 시 요소를 초기값으로 바로 전달할 수 있음.val list = mutableListOf("a", "b", "c") /.. 2025. 1. 16.
2025-01-15 (수) firstOrNullKotlin 컬렉션에서 사용되는 함수.조건에 맞는 첫 번째 요소 반환 or 조건에 맞는 요소가 없을 경우 null 반환.Predicate 사용 가능: 람다를 전달하여 조건을 지정할 수 있음.후속 처리를 위해 널 체크나 엘비스 연산자 (?:) 를 사용할 수 있음.조건 없이 사용val list = listOf(1, 2, 3)val first = list.firstOrNull()println(first) // 출력: 1val emptyList = emptyList()val emptyFirst = emptyList.firstOrNull()println(emptyFirst) // 출력: null2. 조건과 함께 사용```kotlinval list = listOf(1, 2, 3, 4)val ev.. 2025. 1. 15.
2025-01-14 (화) sealed classsealed class 를 사용하여 하위 클래스의 유형을 제한하고, 안전하고 명확하게 관리하려는 목적.상속 가능한 클래스 계층을 제한할 때 사용함.특징제한된 상속: sealed class 를 상속할 수 있는 클래스는 같은 파일 내에서만 정의될 수 있다.when 문에서 모든 하위 클래스를 컴파일 시점에 확인할 수 있어 안전한 타입 검사가 가능하다.@HiddenOpenAPI(Swagger) 에서 해당 필드를 문서화하지 않고 숨기기 위해 사용함.비즈니스 로직에서 사용되지만 API 사용자에게 노출할 필요가 없는 내부 구현 세부 사항인 경우 어노테이션을 사용해 숨김.@JsonIgnoreJackson 라이브러리가 해당 필드를 JSON 직렬화/역직렬화 과정에서 무시하도록 함.API 요청 또는 응.. 2025. 1. 14.
728x90
반응형