엘비스 연산자코틀린에서는 NullPointerException을 방지하기 위해 기본적인 자료형은 null이 될 수 없도록 되어있습니다.fun plus(n: Int?): Int { .. } null을 사용하기 위해서는 자료형 뒤에 ? 를 붙여야 합니다. 이는 null을 허용한 파라미터임을 명시합니다.그리고 null인 경우에 추가로 예외 처리를 작성해주어야 합니다.?.Elvis 연산자는 코틀린에서 null 일 수도 있는 값을 간편하게 처리하는데 유용합니다.fun plus(n:Int?):Int{ return n?.toInt()?:-1} ?. 뒤에 있는 메서드는 n이 null이 아닐 때만 실행이 됩니다. ?:fun plus(n:Int?):Int{ return n?.toInt()?:-1} ?:은 n이 ..
init, constructor생성자는 새로운 인스턴스를 만들 때 호출하는 함수입니다.코틀린에서 생성자는 init과 constructor 2가지 함수를 통해 초기화할 수 있습니다.init 생성자init 함수는 매개변수가 없고 반환되는 값이 없는 함수입니다.생성자를 통해 인스턴스가 만들어질 때 호출되는 함수로 검증이나 특별한 로직을 수행할 때 사용할 수 있습니다.@Table(name = "users")@Entityclass User( var name: String, val age: Int?, @OneToMany(mappedBy = "user", cascade = [CascadeType.ALL], orphanRemoval = true) val userLoanHistory: MutableList = m..
코프링을 제대로 사용하기 위해서는 코틀린의 Scope Functions을 자유롭게 사용할 줄 알아야 한다고 생각하여,한 번 제대로 정리해 보고자 작성하였습니다. Scope Functions먼저, 스코프 함수 let을 어떻게 사용하는지 보겠습니다.letdata class Person(var name: String, var age: Int, var city: String) { fun moveTo(newCity: String) { city = newCity } fun incrementAge() { age++ }}fun main() { Person("Alice", 20, "Amsterdam").let { println(it) it.moveTo("London") ..
엘비스 연산자코틀린에서는 NullPointerException을 방지하기 위해 기본적인 자료형은 null이 될 수 없도록 되어있습니다.fun plus(n: Int?): Int { .. } null을 사용하기 위해서는 자료형 뒤에 ? 를 붙여야 합니다.이는 null을 허용한 파라미터임을 명시합니다.추가적으로 null인 경우에 예외 처리를 작성해주어야 합니다. ?.엘비스 연산자는 코틀린에서 null 일 수도 있는 값을 간편하게 처리하는데 유용합니다.fun plus(n:Int?):Int{ return n?.toInt()?:-1} ?. 뒤에 있는 메서드는 n이 null이 아닐 때만 실행이 됩니다. ?:fun plus(n:Int?):Int{ return n?.toInt()?:-1} ?:은 n이 null..
인덱스를 타지 않는 쿼리1. function or operation querySELECT * FROM employee WHERE UPPER(name) = 'AHN'; SELECT * FROM employee WHERE YEAR(worked_at) = 2023; SELECT * FROM employee WHERE age + 1 = 100; 인덱스 컬럼에 함수 또는 연산을 수행하는 경우 데이터베이스는 인덱스를 사용하지 못합니다. 이유:인덱스는 Key의 순서대로 정렬되어 있습니다.이를 함수나 연산을 통해 인덱스에 변환을 수행하면, 기존 인덱스와의 순서가 불일치하는 문제가 생겨 인덱스를 통해 탐색을 하지 못합니다. 2. Like문 검색에서 와일드카드의 위치SELECT * FROM employee WHERE na..
왜 지름길은 깨진 창문과 같을까?깨진 창문 이론어떤 것이 멈춘 것처럼 보이고, 망가져 보이고, 관리되지 않는다고 여겨지면 인간의 뇌는 이를 더 멈추고, 망가뜨리고, 관리하지 안 해도 된다고 생각하게 된다. (Philp Zimbardo)망가진 자동차와 안 망가진 자동차를 주차해두고 실험해 본 결과 사람들은 망가져 있는 자동차를 더 망가트리거나 부품들을 도난했다. 반대로 안 망가진 자동차를 그대로 유지가 되는 결과가 있었다. 하지만, 안 망가진 자동차의 창문을 깨트리고 다시 실험을 했을 때, 바로 망가져버리는 결과가 있었습니다. → 이러한 실험 결과를 통해 알 수 있는 점은 사람은 심리적으로 망가져 있는 것을 보면 아닌 것에 비해 더 막 다루어도 된다고 생각하는 경향이 있다. 코드 작업과 깨진 창문과의 관계..
유스케이스 역할 살펴보기입력을 받는다.비즈니스 규칙을 검증한다.모델 상태를 조작한다.출력을 반환한다.유스케이스는 인커밍 어댑터로부터 입력을 받습니다.이 단계는 “입력 유효성 검증”을 하는 것이 아니라, Controller에서 받은 입력값을 유스케이스 서비스에 맞게 매핑하여 전달합니다. (SendMoneyRequest → SendMoneyCommand) 유스케이스는 비즈니스 규칙을 검증할 책임이 있으며, 비즈니스 규칙을 충족하면 유스케이스는 입력을 기반으로 모델의 상태를 변형합니다.일반적으로 도메인 객체의 상태를 바꾸고, 영속성 어댑터를 통해 구현된 포트로 이 상태를 전달하여 데이터베이스의 값을 변경하거나 저장합니다. (하나의 유스케이스는 여러 개의 아웃고잉 어댑터를 호출할 수 있습니다.)아웃고인 어댑터에..
스프링 부트를 기반으로 테스트 코드 작성 시 자주 등장하는 테스트 어노테이션의 사용 상황과 기능에 대해 정리하고자 합니다. @SpringBootTest 어노테이션Annotation that can be specified on a test class that runs Spring Boot Based tests. @SpringBootTest 어노테이션은 스프링 부트 기반 테스트 시에 사용하는 어노테이션이다. 다음과 같은 기능과 특징을 가지고 있습니다. 1. Uses SpringBootContextLoader as the default ContextLoader when no specific @ContextConfiguration(loader=...) is defined. 💬 특정 @ContextConfigu..