Java/Java 문법 24

[JAVA] 그 날의 주차 구하기 (week of day)

저는 일관성 있는 데이터를 저장하기위해서, 주 간 어떤날을 입력하든 그 주의 특정 요일 날짜를 반환하는 로직이 필요했습니다. 이에 대한 해답을 자바 8 이후로 나온 날짜및 시간 작업 라이브러리 중, TemporalAdjuster 와 DayOfWeek Enum 클래스를 사용하였습니다. Code public final class DateUtil { private final LocalDate date; public static DateUtil of(final LocalDate date) { return new DateUtil(date); } public int getCompareDayOfWeekNumber(final DayOfWeek dayOfWeek) { return dayOfWeek.getValue() -..

Java/Java 문법 2023.01.12

[Java] Double to Long 형 변환

아래의 3가지 방법이 있는데, 다른 타입으로 명시적으로 변환하는 캐스팅 (long) a 가 별로 안좋을거라 생각했는데, 박싱 후 언방식하는 방식이 더 안좋을 거 같다는 생각이 들었슴당.. 생각난김에 짧은 기록 ㅎㅎ @Test void test() { double a = 12.23213; //명시적 형변환 assertThat((long) a).isEqualTo(12L); assertThat(1 / (long) a).isEqualTo(1 / 12L); //박싱 후 언방식 - 비추 assertThat(Double.valueOf(a).longValue()).isEqualTo(12L); //Math 함수의 사용 assertThat(Math.round(a)).isEqualTo(12L); }

Java/Java 문법 2022.12.27

[JAVA] 지역변수 vs 전역변수 (feat. java8 JVM Static Object Heap Area)

자바 지역변수 vs 전역변수 .. 이 글을 읽고있는 당신의 선택은!?!? 📗 고민의 시작은 이러했습니다. 단 하나의 메소드에서만 사용되는 지역변수를 전역변수로 뺀다면 메모리 낭비가 이루어지지않을까 ?? ➡️ 전역변수로 지정해줄때의 장점은 뭐지? 어떤상황에서 전역변수가 더 유용하게 사용되는거지?? 📝 요약 더보기 java 8 이후 static object 는 jvm 힙 메모리 영역에서 관리된다. 고로 garbage collector 의 영향을 받느다. 지역변수 vs 전역변수의 선택은 사용성에 집중하자. 메모리를 아끼기위해 지역변수로 선언했지만, 해당 메소드에 많은 생성과 파괴가 일어나면 io 자원을 많이 잡아먹게된다. 이런 상황에서 전역변수는 유용하다. 잘생각해보자! 자바 8 이후 static object..

Java/Java 문법 2022.09.26

추상클래스의 객체 생성 (추상클래스 인스턴스) - 추상클래스를 사용하는 이유

👏🏻 요약 더보기 객체생성을 하지 않아도 된다는 의도를 명확히 하기위해서 + 의도치않은 메모리 낭비를 막기위해 김영한님 강의를 보는 도중 상수 정보만을 가진 클래스를 만들었는데, 이 클래스가 상수 정보만을 담고있기때문에 객체생성을 막기위해 abstract class 로 선언을 하는 것을 보고 조금 의아해서 글을 남겨보고자 합니다. 김영한님 왈) 상수를 모아서 쓴거기 때문에 객체를 생성하면 안되겠죠? 그래서 abstract 로 객체 생성을 막아놓았습니다. //상수 데이터만 담은 class - 객체 생성하지 않기위해 추상클래스로 public abstract class ConnectionConst { public static final String URL = "jdbc:h2:tcp://localhost/~/t..

Java/Java 문법 2022.09.19

[Java] 스트림에서 오토박싱 (박싱, 언방식)이 일어나는 이유

스트림 병렬처리를 진행할 때, paraller Stream 이 순차적인 iterate(반복자) 보다 성능이 느리게 나오는 경우가 있습니다. ❓ 스트림 병렬처리의 성능이 낮게나오는 이유 중 하나로, 기본형(원시 타입) 특화되지 않은 스트림을 초러할 때 수반되는 오토박싱, 언방식 등의 오버헤드를 수반하기 때문이다. 라는 이유가 언급되었고, 그렇다면 스트림에서 왜 오토박싱이 일어나는지 잊어먹지 않기위해 정리합니다. 📗 요약 : 제네릭 때문에 자바 Stream 에서 내부적으로 오토박싱이(auto boxing) 일어나는 이유 📌 modern java in action 103 쪽을 보면 이유 1 👏🏻 함수형 인터페이스들에 제네릭 파라미터가 쓰여져있고, Java 에서 generice 은 참조형만 사용할 수 있다고 합..

Java/Java 문법 2022.09.16

[JAVA] record 불변 객체 타입 (feat Lombok @Value)

java 14에서 preview로 등장했고, java 16때 정식 기능으로 나온 기능입니다. 새로운 java Type 이며, 자바에서 불변객체를 만들기위해, 필요한 코드의 중복을 줄여주는 기능을 합니다. (👉 Lombok과 매우 비슷 := @Value) 기능 모든 프로퍼티를 포함한 생성자 제공 모든 프로퍼티에 private final 적용 모든 프로퍼티의 getter 메소드 생성 toString, equals, hashCode 메소드 생성 프로퍼티들에게 annotation을 붙일 수 있도록 허용 불변 객체 vs record 타입 vs @Value ✨[Record 타입을 사용하지 않은, 기존의 클래스] 불변 객체를 만들기 위해, 매개변수에 private final 을 붙힘 //Record를 사용하지 않은 ..

Java/Java 문법 2022.06.02

[JAVA8] Stream API란 - fiter /map /of 사용방법

JAVA Stream API JAVA stream 과 stream API는 다릅니다. java stream 은 java 에서 다루는, 입출력 흐름입니다. 우리가 코드에서 stream으로 사용하는 것이, Stream API입니다. // 컬렉션에서 스트림 생성 Stream stream = list.stream(); Stream API란, 컬렉션 또는 배열 인스턴스에 저장된 데이터를 가지고, 중간연산과 최종연산을 진행하기 좋은 구조로 배치시키는 복사본이라고 할 수 있습니다. Stream API 특징 스트림은 외부 반복을 통해 작업하는 컬렉션과 다르게, 내부 반복을 통해 작업을 수행합니다. 스트림은 재사용이 가능한 컬렉션과 다르게 단 1번만 사용할 수 있습니다. 스트림은 원본 데이터를 변경하지 않고, 복사해서 ..

Java/Java 문법 2022.05.24

private final VS private static final 왜 쓸까

private final VS private static final final final은 무언가를 제한하겠다는 의미 final은 재할당을 제한함 - 메모리의 재할당, 즉 값은 변할 수 있음 상수의 경우 재할당을 하지 못하면, 초기화값이 불변하기 때문에 값이 불변 static static은 값을 static(정적) 메모리 영역에 올리겠다는 선언 즉, 어디에서 호출해도, 모든 곳에서 데이터를 공유함 - 정적메모리 영여에 올려져있어 전역적으로 사용이 가능 [예시] public class MutableTest { private final Map mutableMap = new HashMap(); public void testFinal() { // 재할당 안됨 // mutableMap = new HashMap()..

Java/Java 문법 2022.03.10

ArrayList<Dto> Map value 값으로 정렬

Class public class test { private String name; private LinkedHashMap data; public EventSummary(String name){ this.login = login; events = new LinkedHashMap(); events.put("TotalData",0); } } 대에충 이런식의 클래스 ArrayList TestList 라는 리스트가 존재할때, 이 클래스안의 Map 안의 특정 키값으로 정렬을 하고 싶을때! test.stream().sorted((t1, t2) ->Integer.compare(e2.getData().get(key), e1.getData().get(key))).collect(Collectors.toList()); co..

Java/Java 문법 2022.01.16

[JAVA] 자바 문자열 다루기

1. 문자열을 구성하는 문자의 개수 세기 자바에서 문자열의 개수를 세기 위해선 replace를 이용하면 구할 수 있다. ex) 입력: 가가가bbbbcc# 출력: 가3b4c2#1 while(input.length()>0){ String a = input.substring(0,1); int totalsize = input.length(); input = input.replace(a,""); int nowsize = input.length(); result = (Integer.toString(totalsize-nowsize)); } 이런식으로 문자열을 replace로 공백으로 바꾼후 바뀐 사이즈로 계산할 수 있다. 2. 문자열 인덱스로 해당 문자 변환하기 이걸 쉽게쉽게 하기위해선, StringBuilder를 ..

Java/Java 문법 2022.01.07
반응형