Kotlin162 [Java] Java 14부터 추가된 Record 타입과 Kotlin의 Data Class 비교 목차 들어가기 전에 자바 14부터 코틀린의 Data 클래스와 유사한 Record라는 클래스가 추가되어 자바 16에서 정식으로 지원되기 시작했다. 그동안 자바에서 DTO 등의 클래스를 만들 때는 Lombok의 도움을 받아 @Data 어노테이션을 붙이는 경우가 많았지만 Record 클래스가 추가되어 이러한 필요성이 줄어들게 되었다. 하지만 자바의 Record 클래스와 코틀린의 Data 클래스는 비슷하지만 다른 점이 있다. 이에 대해 정리해본다. Record 클래스의 기본 구조와 사용법 Record 클래스는 아래와 같은 구조로 선언된다. public record Member( String account, String name, int age ) { ... } 클래스 명 뒤에 소괄호로 메소드의 파라미터를 지정하.. 2023. 6. 14. [Kotlin] 백준 14943 : 벼룩 시장 문제 링크 14943번: 벼룩 시장 벼룩시장에서 사람들이 벼룩을 사고 판다. 놀랍게도 각 사람들이 사려고 하는 벼룩의 합과 파는 벼룩의 합은 같다. 벼룩을 사거나 파는 사람들은 서로 일렬로 길게 서 있으며, 인접한 가게 사이 www.acmicpc.net 문제 해설 각 사람들이 사려고 하는 벼룩의 합과 파는 벼룩의 합이 같다는 점이 문제 풀이에 큰 도움이 된다. 벼룩을 가장 저렴하게 배달하려면 결국 가장 가까운 사람들에게 벼룩을 배달해야 한다. 문제에서 양수는 벼룩을 파는 사람, 음수는 벼룩을 사는 사람이라는 조건이 있다. 사려고 하는 벼룩의 합이 파는 벼룩의 합과 같고, 벼룩을 가장 저렴하게 배달하려면 가장 가까운 사람에게 배달해야 하기 때문에 시작점에서 출발하여 각 지점의 모든 벼룩을 배달할 벼룩에 추.. 2023. 5. 15. [Kotlin] 백준 1700 : 멀티탭 스케줄링 문제 링크 1700번: 멀티탭 스케줄링 기숙사에서 살고 있는 준규는 한 개의 멀티탭을 이용하고 있다. 준규는 키보드, 헤어드라이기, 핸드폰 충전기, 디지털 카메라 충전기 등 여러 개의 전기용품을 사용하면서 어쩔 수 없이 각종 전 www.acmicpc.net 문제 해설 OS의 페이징 기법을 모티브로 한 문제인 것 같다. 멀티탭 구멍의 개수는 메모리의 크기를, 각 전기용품은 메모리에 적재되는 페이지라고 볼 수 있다. 페이징 기법을 위한 페이지 교체 알고리즘은 FIFO, LRU, LFU 등 다양한 종류가 있는데, 이 문제에서 사용할 알고리즘은 OPT(Optimal) 알고리즘이다. OPT 알고리즘은 아래와 같이 동작한다. 이미 메모리에 페이지가 적재되어 있으면 다음 페이지로 넘어간다. 메모리에 페이지가 적재되어.. 2023. 5. 4. [Java/Kotlin] 필드(Field)와 프로퍼티(Property)는 무슨 차이가 있을까? 목차 들어가기 전에 처음 코틀린에 대해 공부하기 시작하면서 프로퍼티에 대한 내용을 다룰 때 좀 혼란스러운 느낌이 있었다. 자바 클래스의 필드를 이야기하는 것 같다가도 조금 다른듯한 느낌이었기 때문이다. 그래서 당시에는 그냥 어차피 비슷한 개념이고, 언어마다 명칭이 다른가보다 하면서 코틀린 클래스의 프로퍼티 = 자바 클래스의 필드의 느낌으로 인식하고 사용했다. 그러다가 최근에 객체지향의 사실과 오해(조용호 저)에 대한 스터디를 진행하면서 프로퍼티라는 단어가 나와서 이야기를 조금 했었는데, 비슷한 개념인 것은 맞지만 다른 점이 있다는 이야기를 들어서 확실하게 정리해야겠다는 생각이 들었다. 필드(Field)와 프로퍼티(Property) 결론부터 말하자면 프로퍼티는 객체가 갖는 상태와 같은 속성이고, 필드는 프.. 2023. 5. 2. [Kotlin] 백준 27435 : 파도반 수열 2 문제 링크 27435번: 파도반 수열 2 첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, N이 주어진다. (1 ≤ T ≤ 1,000, 1 ≤ N ≤ 1018) www.acmicpc.net 문제 해설 [Kotlin] 백준 9461 : 파도반 수열의 확장 버전 문제이다. 이전 문제는 입력값이 최대 100이었기 때문에 DP로 충분히 해결할 수 있는 문제였지만, 이 문제는 입력값이 최대 1018이나 되기 때문에 DP로 풀게 되면 시간초과가 발생한다. 따라서 파도반 수열의 성질을 이용하여 풀어야 한다. 파도반 수열에 대해 다음과 같이 피보나치 Q-행렬과 유사한 행렬(이하 Q-행렬)이 존재한다. $$Q=\begin{bmatrix}0&1&0\\0&0&1\\1&1&0\\\e.. 2023. 4. 27. [JPA] Service 계층에서 DataIntegrityViolationException을 처리하기 목차 문제의 배경 JPA 예제를 작성하면서 회원 등록 기능을 구현할 때 전화번호를 유일한 값으로 지정하고 싶었다. 그래서 DB 상에서 전화번호를 유일키로 지정하고 이미 등록된 전화번호를 등록하려고 하면 IllegalArgumentException을 발생시켜서 요청값이 잘못되었다는 것을 알려주려고 했다. 이를 위해 무결성 제약조건을 위배하면 발생하는 DataIntegrityViolationException을 try-catch로 잡아내서 새로운 IllegalArgumentException를 발생시키려고 했는데 try-catch에서 DataIntegrityViolationException을 잡아내지 못하는 상황이었다. 문제 상황의 코드 MemberService.kt @Service class MemberSer.. 2023. 4. 25. [Kotlin] 백준 27450 : 플래그 대사 좀 그만 말해요 문제 링크 27450번: 플래그 대사 그만 좀 말해요 “해치웠나?” 악의 단체의 리더 한별이는 자신의 부하들이 “해치웠나?”라는 말을 들을 때마다 강해지는 것을 보고 이를 악용해 부하들을 강화시켜 세계를 정복하려고 한다. 부하들은 좌우 www.acmicpc.net 문제 해설 가장 기본적인 풀이 방법은 한별이가 각 위치에서 "해치웠나?"를 외칠때마다 외침의 영향을 받는 부하들의 강함을 증가시켜 주는 것이다. 하지만 \(N\)과 \(K\)가 각각 최대 50만이기 때문에 이 방법을 사용하면 각 위치에서 1번의 연산만 수행하더라도 1250억번의 연산을 수행하게 되어 시간 초과가 발생한다. 이 문제를 좀 더 효율적으로 해결하기 위해서는 누적 합을 응용하는 방법을 사용할 수 있다. 어떤 지점 \(p\)에서 \(i\.. 2023. 4. 23. [Kotlin] Java와 Kotlin, 그리고 Lombok 목차 Java에서의 Lombok 자바에서는 기본적으로 클래스의 Getter, Setter, 생성자를 비롯한 기본적인 메소드나 Builder 패턴 등의 디자인 패턴을 개발자가 직접 작성하거나 IDE의 도움을 받아 작성해야 한다. 그런데 클래스에 새로운 필드를 추가하거나 기존 필드를 삭제하면 기존의 코드에도 영향을 주게 되어 굉장히 번거롭다. 이러한 번거로움을 Lombok이 등장하면서 덜어주게 되었다. 추가하고자 하는 기능에 대한 어노테이션만 추가해 놓으면 코드를 작성할 땐 클래스의 필드에 변경이 일어나더라도 전혀 신경 쓰지 않고 사용할 수 있게 된 것이다. 이러한 편의성으로 인해 자바를 이용한 개발에서 Lombok은 뗄 수 없는 관계라고 볼 수도 있을 것이다. Kotlin과 Lombok 코틀린은 클래스의 .. 2023. 4. 21. 이전 1 2 3 4 5 6 7 8 ··· 21 다음