확장 함수 정의 방법String 클래스에 lastChar 라는 확장 함수를 추가하려면?package strings fun String.lastChar(): Char = this.get(this.length - 1)this수신 객체를 의미합니다String 클래스의 인스턴스에 대해 호출가능fun main() { println("Kotlin".lastChar()) } //n"Kotlin" 이 수신 객체가 되며lastChar 확장함수는String 의 일부처럼 호출이 가능하다.특징캡슐화확장함수는 캡슐화를 깨지 않는다private 와 protected 는 접근할 수 없다.호환성면자바나 코틀린 등의 언어와 관계없이 JVM 언어로 작성된 클래스에 적용이 가능하다.유연성기존 클래스의 코드 변경 없이 새로운 메서드를 추가..
GITHUB CLI 설치 필 윈도우 기준입니다. CHOCOLATEY 를 설치해두면 편하게 설치가능합니다. chocolatey 설치 Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1')) github cli 설치 choco install gh PowerShell 키셈 깃헙 로그인 gh au..
When 식에서 in 사용하기fun recognize(c: Char) = when (c) { in '0'..'9' -> "It's a digit!" in 'a'..'z', in 'A'..'Z' -> "It's a letter!" else -> "I don't know..." } fun main() { println(recognize('8')) } //It's a digit!when 식에서 in 을 사용해서 여러 범위를 한 분기로 저장이 가능합니다.비교가능한 클래스와 범위Comparable 인터페이스를 구현하는 클래스의 인스턴스를 사용하여 범위 생성가능함위 내용은 객체의 정렬관련한 내용이다.문자열의 알파벳 순서를 기준으로 범위를 만들고 in 으로 범위 내에 속하는지 검사한다.기존의 switch 문보다 더 ..
프로젝트 수행중 통합 테스트와 단위 테스트 간의 데이터베이스의 충돌이 발생하는 일이 생겼다.@Sql 을 이용하여 통합테스트에서 별도 테스트 데이터를 생성한 이후에@Rollback 을 시도하였지만별도로 초기화가 수행되지 않는 것 같다..이유는 솔직히 잘 모르겠다… 솔직히 파고들면 이건 끝도 없을거같아 일단 패스함..일단 테스트 후에 데이터베이스를 비우는 행위 자체는 일단 가능은 하다.Spring Boot 에서는@DirtiesContext 어노테이션을 사용해 테스트 후 Spring Application Context 를 재 로드 할 수 있다.테스트후에 사용된 데이터는 초기 상태로 돌아가게 되는 것이다.@SpringBootTest 의 경우 컨텍스트를 로드하게 이전에는 발생하지 않던 문제가 발생하는 것이 아닐까..
반환타입의 차이점EXECUTE() 는void 가 반환타입입니다.해당 메서드는 어떤 결과를 반환하는 것이 아니기에, 이후에 상황에 대한 검증이 어렵습니다Submit() 는Future 가 반환타입입니다.해당 메서드는 어떤 결과가 발생했는지 반환타입으로 받을 수 있기에, 상화에 대한 검증이 쉽습니다.작업 중의 예외처리에 관하여Execute() 작업이 실패하는 경우 그냥 에러가 발생하고 작업이 멈추게 됩니다.스레드에서 UncaughtExceptionHandler 가 발생함Submit()작업이 실패해도 Future 객체에 해당 예외 등의 관련한 정보가 일단 담기게 됩니다.이후 Future.get() 을 수행하게 된다면 그때 예외가 발생한다고 합니다.어떨 때 각자 사용하면 되느냐?submit 의 경우서비스 로직 등..
Map 에 대한 이터레이션fun main() { val binaryReps = TreeMap() for (c in 'A'..'F') { val binary = Integer.toBinaryString(c.code) // 'A'.code == 65 ==> 이진표현값으로 binaryReps[c] = binary // binaryReps.put(c, binary) } for ((letter, binary) in binaryReps) { println("$letter = $binary") } }자바에서의 TreeMap 과 구조가 거의 비슷합니다.해당 코드는 A ~ F 까지의 이진값을 맵구조에 저장합니다.트리맵은 map 구조의 키 에 정렬을 줄 수 있다는 장점이 있습니다리스트(List) 에 대한 이터레이션과 인덱..