java

JAVA

[Java] ArrayList 와 HashMap

자바 컬렉션 내 가장 많이 사용하는 자료구조 중 ArrayList 와 HashMap 이 있다. 사용하면서도 용도를 제대로 이해하지 않고 사용하는 것 같아 성능 및 사용 사례에 대해 정리해보려한다. ArrayList 와 HashMap 1. ArrayList - 구조 : 내부적으로 데이터를 배열 형태로 저장하며 요소를 추가하거나 제거할 때 크기를 동적으로 조정한다. - 접근 방법 : 인덱스를 통해 접근. - 사용 사례 : 순서가 중요하거나 혹은 인덱스를 통한 빠른 접근이 필요할 때 사용한다. - 크기 조정을 해야하는 경우 내부적으로 배열을 재할당하고 기존 요소를 새 배열로 복사해야하기 때문에 많은 양의 데이터를 추가하거나 삭제하는 경우 성능 저하가 발생할 수 있다. 2. HashMap - 구조 : 키-값 쌍..

JAVA

[Java] LocalDateTime 과 Instant

프로젝트 진행 중에 데이터를 생성한 시간과 업데이트한 시간에 대한 필드를 정의하며 타입에 대한 고민이 들었다. LocalDateTime 만을 고려하고 있다가 Instant 라는 타입을 처음 알았기 때문이다. 해서 그에 대해 정리를 해보려한다. LocalDateTime 과 Instant 이 둘은 자바 8부터 도입된 날짜와 시간을 표현하는 데에 사용된다. 1. LocalDateTime - 시간대 정보를 포함하지 않으며 단순히 연, 월, 일, 시 등의 지역 날짜와 시간을 나타낸다. - 로컬 서버의 날짜와 시간을 나타내며 그것이 어느 시간대에 속하는 지는 명시하지 않는다. - 날짜, 시간 등을 더하고 빼는 등의 연산이 간단하다. - 시간대에 민감하지 않고 지역적인 서비스에 적합하다. 2. Instant - UT..

Web

[Spring] 예외 코드 Enum 으로 관리하기

지난번 사이드 프로젝트를 할 때 커스텀한 예외 클래스를 따로 개별적으로 관리하여 한 눈에 보기 힘들고 중복되는 코드가 많아 가독성이 떨어진다는 느낌을 받았다. 그래서 이번에는 enum 으로 예외 코드를 관리해보기로 하였다. 자바의 Enum 타입이란 ? 공식 문서에 따르면 자바에서 Enum 타입은 고정된 상수들의 집합을 나타내는 특별한 데이터 타입으로, 변수는 미리 정의된 값들 중 하나와 같아야 한다. 또한, 상수들은 쉼표로 구분되며 대문자로 표기한다. public enum Day { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY } 또한 상수에 대한 의미있는 값을 미리 부여하여 활용할 수 있는데, 이렇게 하면 Enum 상수가 단순한 식별자..

JAVA

[JAVA] 체크 예외와 언체크 예외

평소 체크 예외와 언체크 예외의 용도를 생각하지 않고 사용했던 것 같아 정리를 해본다. 체크 예외(Checked Exception)와 언체크 예외(Unchecked Exception) 1. 체크 예외 ( Checked Exception ) - 컴파일러가 예외를 확인하므로 컴파일 타임에 예외를 발생시킨다. - 예외를 처리하기위해 try-catch 블록이나 throws 를 사용해야 한다. ex> IOException, FileNotFoundException public class CheckedExceptionExample { public static void main(String[] args) { try { File file = new File("nonexistent.txt"); FileInputStream..

JAVA

[이펙티브자바] Item1. 생성자 대신 정적 팩터리 메서드를 고려하라

이펙티브 자바 책을 읽으며 내 생각을 바탕으로 정리하며 이해하기 위함이다. 생성자와 정적 팩터리 메서드 1. 생성자 클라이언트가 클래스의 인스턴스를 얻는 전통적인 수단은 public 생성자이고, 예시는 아래와 같다. public class Car { private final String type; public Car(String type) { // ★ public 생성자 this.type = type; } @Override public String toString() { return "Car type: " + type; } public static void main(String[] args) { Car car = new Car("Sports"); System.out.println(car); // Car ..

JAVA

[Java] Access Level 에 관하여

Access Level 을 protected 로 설정하는데 왜 protected 로 설정하는지 protected 로 설정했을 때의 접근 영역이 어딘지 헷갈려 정리를 해보려한다. Access Level 의 필요성 접근 레벨을 가장 흔하게 적용하는 예는 아래와 같이 기본생성자를 만들 때이다. 보안상의 문제로 public 을 쓰지 않는다면 왜 private 을 사용하지 않는가에 대한 의문을 하지 못했던 것 같다. @NoArgsConstructor(access = AccessLevel.PROTECTED) // ★ 접근 레벨 설정 public class Member { .. } 우선, public 이 아닌 이유는 외부에서의 무분별한 생성을 막기위해서이고 private 이 아닌 이유는 JPA의 프록시 객체를 생성해..

Web

[Spring] 동시성 이슈와 synchronized 에 관하여

재고 관리 로직을 통해 동시성 이슈에 대해서 정리해보자. 공유 자원과 임계 영역(Critical Section) 그리고 Race Condition 먼저, 스레드의 공유 자원에 대해 생각해보자. 스레드가 여럿일 경우 스레드는 힙 영역에 있는 모든 데이터를 공유한다. 힙에는 모든 객체와 객체의 속한 필드들이 저장되며 스레드에서 접근이 가능하다. 그렇다면 임계 영역(Critical Section)은 무엇일까 ? 이는, 공유 자원에 액세스하고 이에 대한 쓰기 작업을 수행하는 코드 세그먼트를 말한다. 예시는 아래와 같다. Item 클래스와 해당 클레스의 멤버 변수들은 힙에 할당된 공유 자원으로 모든 스레드에서 접근이 가능하고, 공유 자원의 값을 변경하는 코드 세그먼트를 보여준다. 마지막으로, Race Condit..

JAVA

[Java] stream.map() 동작 및 예제

자바 8 이상부터 가능한 Stream 기능 중, map 에 대한 내용이다. map() 동작 및 예제 1. .stream().map(Function

limnj
'java' 태그의 글 목록