JAVA: 282개의 글
mac 사용자들은 대부분 homebrew를 통해 jdk를 설치하지만 직접 다운로드하여 설정하는 방법을 알아 보겠습니다. https://jdk.java.net/archive/ 에서 원하는 버전의 jdk를 os에 맞게 다운로드 다운로드 받은 파일의 압축 해제 /Library/Java/JavaVirtualMachines/ 아래에 디렉토리 이동 sudo mv jdk-17.0.2.jdk /Library/Java/JavaVirtualMachines 터미널에서 java -version 명령어를 통해 설치 확인 아래와 같이 출력되면 설치 성공 openjdk version "17.0.2" 2022-01-18 OpenJDK Runtime Environment (build 17.0.2+8-86) OpenJDK 64-Bit ..
1. 빌더 패턴(Builder Pattern)을 사용해야 하는 이유 빌더 패턴 장점 필요한 데이터만 설정할 수 있음 유연성을 확보할 수 있음 가독성을 높일 수 있음 불변성을 확보할 수 있음 1. 필요한 데이터만 설정할 수 있음 예를 들어 User 객체를 생성하는데 age라는 parameter가 필요 없는 상황이라고 가정. 생성자나 정적 메소드를 이용하는 경우라면 우리는 age에 더미 값을 넣어주거나 age가 없는 생성자를 새로 만들어주어야 한다. // 1. 더미 값 User user = new User("테스트", 0, 181, 121); // 2. 생성자 또는 정적 메소드를 추가하는 방법 @NoArgsConstructor @AllArgsConstrctor public class User{ private..
Java9 ~ 12 디폴트 GC https://johngrib.github.io/wiki/java-g1gc/ G1GC G1GC: Garbage First Garbage Collector G1은 이름을 보면 짐작할 수 있듯, 쓰레기로 가득찬 heap 영역을 집중적으로 수집한다. G1은 큰 메모리를 가진 멀티 프로세서 시스템에서 사용하기 위해 개발된 GC이다. GC 일시 정지 시간을 최소화하면서, 따로 설정을 하지 않아도 가능한 한 처리량(throughput)도 확보하는 것이 G1GC의 목표이다. G1은 Java 9부터 디폴트 GC이다. G1은 실시간(real time) GC가 아니다. 일시 정지 시간을 최소화하긴 하지만 완전히 없애지는 못한다. G1은 통계를 계산해가면서 GC 작업량을 조절한다. 다음 상황..
StringUtils org.apache.commons.lang3.StringUtils 요약 Empty : Null, 공백문자("") Blank : Null, 공백문자(""), whitespace(" ") Empty StringUtils.isEmpty : Null 혹은 공백문자("") 이면 true 값 반환 StringUtils.isNotEmpty : Null 혹은 공백문자("") 이면 false 값 반환 StringUtils.isAnyEmpty : 문자들 중 Null 혹은 공백문자("") 있을 시 true 값 반환 StringUtils.isNoneEmpty : 문자들 중 Null 혹은 공백문자("") 있을 시 false 값 반환 StringUtils.isAllEmpty : 모든 문자열들이 Null 혹은..
@Getter, @Setter 필드에 @Getter/@Setter 을 붙이면, 해당 필드에 대한 기본 getter/setter 메소드를 생성해준다. 접근 제한자 AccessLevel @Getter/@Setter 에서의 접근 제한자 설정을 할 수 있다. 만약 생성되는 getter/setter 에 AccessLevel을 명시해주지 않으면 접근 제한자는 public이 된다. PUBLIC PROTECTED PRIVATE PACKAGE NONE MODULE @Getter/@Setter 는 필드가 아닌 클래스에도 사용할 수 있는데, 클래스에 사용할 경우 static이 아닌 전체필드에 getter/setter가 적용된다. 만약 특정 필드에서 @Getter/@Setter의 생성을 막고 싶다면 AccessLevel.NO..
ModelMapper ? 서로 다른 클래스의 값을 한 번에 복사하게 도와주는 라이브러리로, 어떤 Object (Source Object) 에 있는 필드 값들을 자동으로 원하는 Object (Destination Object) 에 매핑 시켜주는 라이브러리다. ModelMapper 공식 문서 주로 DTO와 같은 클래스로 데이터를 받은 후 원하는 클래스(Entity)에 넣어줄 때, Getter/Setter를 이용해 필드를 복사/붙여넣기하는 작업을 거친다. 이 때, 매핑해야할 필드가 다른 경우도 빈번하다. 즉, 다른 모델의 Object를 매핑해줘야하는 작업이 발생할 수 있다. 이런 단점들을 해결하기 위한 라이브러리이다. 세팅 의존성 추가 build.gradle implementation 'org.modelmap..
Stream. -Match 메소드 예제 allMatch() : 모든 요소들이 매개 값(Predicate)로 주어진 조건을 만족하는지 조사 anyMatch() : 최소한 한 개의 요소가 주어진 조건에 만족하는 지 조사 noneMatch() : 모든 요소들이 주어진 조건을 만족하지 않는지 조사 class Test { public static void main(String[] args) { int[] intArray = {2, 4, 6}; boolean allResult = Arrays.stream(intArray).allMatch(a -> a % 2 == 0); boolean anyResult = Arrays.stream(intArray).anyMatch(a -> a % 2 == 0); boolean non..
MultiValueMap 살펴보기 전에 Map에 대해 간단히 살펴보자. Map 의 종류 HashMap TreeMap LinkedHashMap HashMap Map의 기본 형식으로, key : value 를 한 쌍으로 데이터를 저장하며 중복된 키가 존재하지 않는다. Map에 있는 데이터는 키 값을 기준으로 가져온다. TreeMap HashMap 기능 + 자동 정렬 TreeMap은 데이터가 들어올 때마다 key 값에 따라 자동 정렬된다. LinkedHashMap HashMap 기능 + 입력 순서 보장 HashMap에 데이터를 C - B - A 순서로 했다면, 나중에 맵에 있는 모든 값을 출력할 때 C - B - A 순으로 출력된다는 보장이 없다. 하지만, LinkedHashMap은 이 문제를 해결해준다. M..
오름차순, 내림차순 등 정렬을 할 때 음수가 나와야 오름차순인지, 양수가 나와야 오름차순인지 항상 헷갈려서 기억하기 위해 잘 정리된 포스팅을 참고하여 남겼다. 2차원 배열을 바로 Arrray.sort()를 통해 정렬하려고 하면, 비교 기준이 구현되어 있지 않기 때문에 캐스팅에 실패했다는 java.lang.ClassCastException: I cannot be cast to java.lang.Comparable 오류가 발생한다. 그 해결책으로 Comparable,Comparator 인터페이스를 구현하여 정렬기준을 추가해 2차원배열 뿐만 아니라 객체비교할 때도 사용할 수 있다. int[][] arr = new int[][]{{5,10},{3,30},{1,50},{4,20},{2,40},{5,60}}; Ar..
Arrays.sort 오름차순 기본 오름차순 정렬 : 숫자 - 대문자 - 소문자 - 한글 순서로 정렬 import java.util.Arrays; public class Sort { public static void main(String[] args) { String[] str = {"a", "1", "가", "A", "3", "나"}; for(String s : str) {// 정렬 전 출력 System.out.print(s + " "); } System.out.println(); Arrays.sort(str);// 정렬 후 출력 for(String s : str) { System.out.print(s + " "); } } } a 1 가 A 3 나 1 3 A a 가 나 내림차순 한글 - 소문자 - 대문..