Java

· Java
에러 발생java.lang.IllegalStateException: **Duplicate key 'key로 저장하려는 값'** (attempted merging values ~~) 오늘도 만난 에러,, 뜯어봐야 알겠지만 대충 봐도 key 값이 중복되어 발생한 에러다.  에러 원인에러가 발생한 부분을 찾아보니 아래와 같았다. Map memberMap = memberInfoRepository.findByMemberIds(memberIds).stream() .collect(Collectors.toMap(Member::getMemberId, member -> member)); 여기서 Collectors.toMap() 호출 시 중복되는 key 값이 존재하는 것이 에러의 원인이었다. memberId를 ..
· Java
개발을 하며 MySQL의 Timestamp가 이상하게 조회되는 상황에 맞닥뜨렸다. 발생한 이슈와 원인, 해결한 방법 순서대로 기록해둔다. 이슈 발생 간단하게 정리하면 데이터 조회 시 특정 일자의 하루 동안 저장된 데이터를 조회해야 했고, 이를 위해서 특정 일자의 시작 시간(yyyy-MM-dd 00:00:00)과 끝 시간(yyyy-MM-dd 23:59:59)을 Timestamp 타입으로 만들었다. 예를 들어 일자별 회원가입 현황을 데이터테이블로 산출하려고 한다. 조회 시에는 JPQL을 사용했고, 테스트 용으로 아주 간단하게만 구현해두었다. /** * 일자별 회원가입 현황 * @param * @return */ public List getDailySignUp(Integer start, Integer leng..
· Java
Integer ArrayList을 int 배열로 변환하는 방법에 대해 알아보자. 사실 자꾸 까먹어서 기록해둔다. String 타입의 List를 배열로 변환할 때 toArray()를 사용하면 된다. List list = new ArrayList(); list.add("a"); list.add("b"); list.add("c"); // 1. toArray() - 배열 선언과 동시에 할당 String[] arr = list.toArray(new String[0]); // ["a", "b", "c"] // 2. toArray() - 배열 선언 후 값 할당 String[] arr2 = new String[list.size()]; list.toArray(arr2); // ["a", "b", "c"] 하지만 int형..
· Java
오늘은 ORM에 대해 정리해본다. ORM(Object Relational Mapping)이란? 데이터들이 프로그램이 종료되어도 사라지지 않고 어떤 곳에 저장되는 개념을 영속성(Persistence)이라고 한다. Java에서는 데이터의 영속성을 위한 JDBC를 지원해주는데, 이는 매핑 작업을 개발자가 일일히 수행해야 하는 번거로움이 있다. SQL Mapper와 ORM은 JDBC 프로그래밍의 복잡함이나 번거로움 없이 간단한 작업만으로 데이터베이스와 연동되는 시스템을 빠르게 개발할 수 있도록 기능을 제공해주는 Persistence Framework 종류이다. SQL Mapper SQL Mapper는 Object와 SQL의 필드를 매핑하여 데이터를 객체화 하는 기술이다. 객체와 테이블 간의 관계를 매핑하는 것이..
· Java
Java로 개발을 시작하기도 전부터 'JVM에 대해서는 잘 알고 있어야 한다'는 이야기를 들었었다. 특정 운영체제 종속적이지 않고, 직접 메모리를 관리해주는 등 JVM이 중요한 이유도 함께 들었던 기억이 있다. 오늘 드디어 이 JVM에 대해 간단히 정리를 해본다. JVM(Java Virtual Machine) JVM은 Java Virtual Machine, 즉 자바 가상 머신의 약자로 자바 프로그램 런타임 환경을 제공하는 소프트웨어이다. 자바 애플리케이션을 클래스 로더를 통해 읽어 들여, 자바 API와 함께 실행하는 역할을 한다. Java와 OS 사이에서 중개자 역할을 수행해 Java가 OS에 구애받지 않고 실행되도록 한다. 또한, Garbage Collection, 즉 프로그램 메모리 관리도 하며 최적..
· Java
특정 구간의 코드 실행 시간을 알고 싶은 경우가 있다. 대부분 개발 중 어느 부분이 느린지 알아내야하는.. 경우다. 이 때 사용할 수 있는 Java 함수 하나 알아보자. Java에서 특정 구간의 코드 실행 시간이 얼마나 소요되는지 알고 싶을 때는 System.currentTimeMillis() 함수를 사용하면 된다. 이 함수는 현재 시간을 받아오는 System 함수로, 실행 시간을 측정하고 싶은 코드의 시작 구간과 종료 구간에 각각 해당 함수를 사용해 시간을 받아오고, 두 시간 사이의 차이를 계산하면 된다. 함수명에서 알 수 있듯이 ms 단위의 시간 차를 결과값으로 얻을 수 있다. 만약 값을 초(s) 단위로 변환하고 싶다면 System.currentTimeMillis()/1000 을 사용하면 되고, 초(..
· Java
HashMap에서 특정 key가 존재하는지를 확인해야 할 때가 있다. 이 때는 2가지 방법이 있다. Map.containsKey() Map.get() 하단에서 설명하겠지만 두 가지 방법 중 첫번째 방법인 Map.contatinsKey() 메서드를 사용하는 것을 추천한다. 우선 차례로 알아보자. 1. Map.containsKey() Map의 containsKey() 메서드는 파라미터로 입력 받은 값과 일치하는 key가 있으면 true를, 없으면 false를 리턴한다. public boolean containsKey(Object key) import java.util.HashMap; import java.util.Map; public class CheckExistKeyInHashMap { public sta..
· Java
지금까지 List를 생성할 때 대부분 new ArrayList()를 사용했었다. 회사에서 다른 분들의 코드를 보다가 Arrays.asList()를 이용한 부분이 있었고 참고해서 사용했는데, 차이점을 정확히 알고 싶어 정리하고자 한다. 1. 다른 class, 다른 return type 다른 class : new ArrayList()와 Arrays.asList()는 다음과 같이 class가 다르다. // new ArrayList() import java.util.ArrayList; // Arrays.asList() import java.util.Arrays; new ArrayList()는 ArrayList를 Arrays.asList()는 Arrays의 정적 클래스인 ArrayList를 리턴한다. 아래는 Ar..
· Java
HashMap과 HashSet을 사용하며 두 가지의 차이점에 대해 정리하고 싶었다. 간단하게 정리해보자. HashMap vs HashSet 차이점 1. 정의 HashMap : Map Interface의 구현체로 HashTable과 유사한 자료구조로 데이터를 저장한다. HashSet : Set Interface의 구현체로, 내부적으로 HashMap을 사용해 데이터를 저장하기 때문에 HashTable과 유사한 자료구조로 데이터를 저장한다고 할 수 있다. 2. 데이터 저장 형태 HashMap : key-value 형태로 데이터를 저장한다. 각 value들이 key에 mapping되어 있다. HashSet : 객체 그 자체를 저장한다. key 값으로는 삽입되는 객체 자체를, 내부 구현 코드에서 필드로 선언한 객..
· Java
이전 글에 이어서 이번 글에서는 접근 제어자에 대해 정리해보고자 한다. 접근제어자(access modifier) 멤버변수 또는 클래스에 사용되며 해당하는 멤버변수 또는 클래스를 외부에서 접근하지 못하도록 제한하는 역할을 한다. 클래스나 멤버변수, 메서드, 생성자에 접근 제어자가 지정되어 있지 않다면 default임을 의미한다. 종류 접근 제어자 같은 클래스 같은 패키지 자손 클래스 전체 private O X X X default O O X X protected O O O X public O O O O 그렇다면 접근 제어자를 사용하는 이유는 무엇일까? 이유에는 크게 2가지가 있다. 외부로부터 데이터를 보호하기 위해 외부에는 불필요하고, 내부적으로만 사용되는 부분을 감추기 위해 이것을 데이터 감추기(data..
토발자
'Java' 카테고리의 글 목록