요약Date 와 LocalDateTime 은 날짜와 시간까지 포함.LocalDate 는 날짜까지만 나타냄.Date는 Timezone 정보가 UTC로 고정이지만, LocalXXX 는 Timezone과 무관하게 일시 정보만 표현한다.Timezone 정보를 포함하는 ZonedDateTime이 있다. Date 의 단점(우리 회사 이거 쓰고 있다.)Java 초기 버전부터 사용된 전통적 타입이다.시간대는 UTC로 고정이다.(협정 세계시)하지 "만" 여러 문제 때문에 권장되지 않는다.월이 0부터 시작이다.년도는 1900년부터 시작이다.먼 소린고 했더니,new Date(100,0,1) 라고 하면, 2000년 1월 1일이 된다.가독성도 떨어지고, 내부 메서드들도 직관적이지 않다. LocalDate 와 LocalDateT..
Java - Predicate 👶 Predicate란? 오늘 코드분석 도중 Predicate라는 인터페이스를 만났다. 초면이었다. Java 1.8부터 도입된 함수형 인터페이스이다. 제네릭 타입 하나를 매개변수로 전달받아 특정 작업 수행 후 boolean 타입을 반환하는 작업을 수행하게 한다. 🧭 함수형 인터페이스 = SAM Interface (Single Abstract Method) 함수형 인터페이스란, 하나의 추상 메소드를 갖고 있는 인터페이스를 말한다. Java8부터 지원된 람다는 함수형 인터페이스로 접근 가능. Predicate 외에도 Consumer, Supplier, Function, Comparator 등이 있다. 추가로, @FunctionalInterface 어노테이션을 사용한다. (없어도..
Arrays.asList(), List.of() 자바는 Array를 List로 변환하기 위해 Arrays.asList( array )를 사용한다. Java 9 부터는 List.of( array )라는 새로운 팩토리 메서드가 도입됐다. 차이점에 대해 알라bo자~ 변경 가능 여부 Arrays.asList()로 반환된 List는 변경이 가능하다. (Mutable) ArrayList를 반환하기 때문에 set이 구현돼있다. (java.util.ArrayList가 아닌 Arrays의 내부 클래스로, add와 remove는 없기 때문에, 크기는 변하지 않는다.) 하지만 List.of()로 반환된 메서드는 변경이 불가능하다. (Immutable) ListN이라는 타입을 반환하고, 이는 불변 객체이다. List list..
SOLID 원칙 객체지향 설계원칙 hckcksrl.medium.com 개요 SOLID는 객체지향 설계 5대 원칙으로, SRP(단일 책임 원칙) OCP(개방-폐쇄 원칙) LSP(리스코프 치환 원칙) ISP(인터페이스 분리 원칙) DIP(의존 역전 원칙) 을 말한다. 1. SRP - 단일 책임 원칙 (Single Responsibility Principle) 모든 클래스는 각각 하나의 책임만 가져야 한다. 클래스는 그 책임을 완전히 캡슐화해야 함을 말한다. 2. OCP - 개방-폐쇄 원칙 (Open Closed Principle) 확장에는 열려있고 수정에는 닫혀있어야한다. 기존의 코드를 변경하지 않으면서(Closed), 기능을 추가할 수 있도록(Open) 설계가 되어야 한다는 원칙을 말한다. 구현에 의존하기..
1. Atomic ... 클래스 Long 과 AtomicLong은 어떤 차이가 있을까? 개요 프로젝트를 진행하면서 HashMap을 이용해 Key-Value 형태로 된 InMemory DB를 직접 구현하던 도중, 유저의 정보를 저장할 때 Long Type으로 선언된 유저의 ID값을 증가시켜줘야 하는 경우가 생겼습니 simgee.tistory.com 앞서 멀티스레드 환경에서 동시성 이슈가 발생할 수 있기 때문에 synchronized, volatile 등을 쓴다고 언급한 바 있다. 그리고 AtomicLong이 약간 갑자기 등장한 감이 있는데 이에 대해 요점만 정리해보자. 자바에서는 AtomicInteger, AtomicLong, AtomicBoolean, AtomicReference 클래스를 제공한다. 이 ..
논 블로킹 알고리즘(Non-blocking Algorithms) 이 글은 원 저자 Jakob Jenkov의 허가로 포스팅된 번역물이다.원문 URL : http://tutorials.jenkov.com/java-concurrency/non-blocking-algorithms.html 동시성에서의 논 블로킹 알고리즘이란 쓰레드간의 공유된 상태(자원) parkcheolu.tistory.com 0. (1/2)에서의 낙관적 락에 대해... 앞서 언급한 컴페어 스왑을 통한 낙관적 락은 공유 자료구조에 알맞게 동작한다. 이 공유 자료구조는 단일 컴페어 스왑 연산에서 전체 자료구조가 새로운 자료구조로 교체될 수 있는 (swappable) 성질을 가진다. 그러나 전체 자료구조를 변경된 복제본으로 교체하는 일이 언제나 가..
논 블로킹 알고리즘(Non-blocking Algorithms) 이 글은 원 저자 Jakob Jenkov의 허가로 포스팅된 번역물이다.원문 URL : http://tutorials.jenkov.com/java-concurrency/non-blocking-algorithms.html 동시성에서의 논 블로킹 알고리즘이란 쓰레드간의 공유된 상태(자원) parkcheolu.tistory.com 동시성에서 스레드간 공유 상태(자원)로의 접근이 발생할 때... 블로킹과 논블로킹 알고리즘이 어떻게 동작하는지 알아보자. 1. 블로킹 동시성 알고리즘 Thread B가 lock한 데이터에 Thread A가 접근하면 blocked되어 대기한다. Thread B가 unlock을 해주면 대기 중이던 Thread A가 다시 lo..
1. synchronized, volatile 1-1. synchronized 자바에서 멀티스레드로 인해 동기화를 제어해야하는 경우가 있는데, 가장 흔히 아는 Synchronized 키워드에 대해 먼저 알아보자. Java의 동기화 Synchronized 개념 정리#1 Java의 동기화 -Synchronized 키워드의 사용Java를 프로그래밍 하다면 multi-thread로 인하여 동기화를 제어해야하는 경우가 생깁니다.그래서 흔히 Synchronized 키워드를 사용하는데요그냥 multi-thread로 동시 tourspace.tistory.com 이 블로그에 잘 나와있는데... 마지막 예시를 내 마음대로 수정해서 적용해보았다. public class SyncBlock { private Map map1 =..
0. 출처 [Java] JVM 구조와 메모리 영역 - Method, Heap, Stack Area 1. JVM 동작 과정 JVM은... 많이 알겠지만 Java Virtual Machine이고, 자바 바이트 코드를 OS에 맞게 해석해주는 역할을 한다. 또 메모리 관리도 담당한다. (GC는 Java 7부터 힙 영역의 객체들을 관리하는 역할을 한다.) 자바 코드가 JVM을 통해 실행되기 때문에 플랫폼에 구애받지 않는다는 것이 장점이라는 것도? 많이 알고 있을 것이다. 메모리 영역을 알아보려면, JVM이 자바 코드를 어떻게 OS에서 실행하는지 그 과정을 알아볼 필요가 있다. 자바 코드(.java 파일)는 컴파일러가 자바 바이트 코드인 .class 파일로 변환된다. .class 파일을 JVM의 클래스 로더에게 보..
0. 출처 [Java] 자바 static의 의미와 사용법 1. 정적(Static)이란? '고정된'이라는 의미를 가지고 있다. static 변수와 메서드를 만들 수 있는데, 다른 말로 정적 필드, 정적 메서드라고 하고, 합쳐서 정적 멤버라고도 한다. (클래스 멤버라고도 한다.) 이들은 객체(인스턴스)에 소속된 멤버가 아니라, 클래스에 고정된 멤버이다. 때문에 클래스 로더가 클래스를 로딩해서 메서드 메모리 영역에 적재할 때 클래스별로 관리된다. 따라서 클래스 로딩이 끝나는 즉시 사용이 가능해진다. Static영역에 할당된 메모리는 모든 객체가 공유하여 하나의 멤버를 어디서든 참조할 수 있는 장점이 있지만? Garbage Collector의 관리 영역 밖이기 때문에, 프로그램 종료시까지 메모리가 할당된 채로 ..