본문 바로가기
728x90

java39

[ Java ] Optional 개념 및 올바른 사용법 알아가기 Intro 개발을 하다 보면 가장 많이 발생하는 에러 중 하나인 NullPointException을 자주 만나게 되는데,해당 에러를 피하기 위해 null을 체크하는 로직을 추가합니다. //mkey = Id 값 입니다. 해당하는 데이터가 없으면 null 입니다.MemberVO findUser = memberRepository.findById(mKey);//만약 findUser 결과 값이 null이면 NullPointException이 발생합니다.findUser.getUserNm();//--------------------------------------------------------------------------------if(findUser != null){//NullPointException을 방지.. 2024. 6. 10.
[ Java ] OutOfMemoryError(With 힙덤프) 에러 분석해보기 안녕하세요🤚 오늘은 실무에서 프로젝트 진행 중 Heapdumponoutofmemoryerror 가 발생해서해당 에러의 개념과 실전 예제 코드를 통해서 알아보겠습니다 😄    Heapdumponoutofmemoryerror 옵션은 Java 애플리케이션이 메모리 부족(OutOfMemoryError)오류가 발생했을 때 발생합니다. Java는 개체를 Heap(힙) 공간에 생성하고이 생성 위치에 대한 주소를 가지고 Object Reference(개체 참조)하는  방식으로 사용합니다. 개체를 생성하는 과정에서 Heap 공간에 개체를 할당하기 위한 공간이 부족한 경우 발생하는데,이 경우 가비지 컬렉터는 새로운 개체를 생성할 수 있는 공간을 확보할 수 없습니다. 드물게 가비지 컬렉션을 수행하는데 과도한 시간이소비되.. 2024. 5. 29.
[ Java ] java.util.stream.IntStream 주요 메서드 정리 오늘은 토이 프로젝트 생성하면서 테이블 생성 테스트 코드 작성할 때활용했던 java.util.stream.IntStream에 대해 포스팅해 보겠습니다😄  주요 메서드 정리 및 개념에 대해 다루고 실전 예제 코드를 통해서 각 메서드에 장단점을 알아보는 시간을 가지겠습니다 ❗ IntStream - 소개 IntStream은 Java 8에서 도입된 Stream API의 일부분으로,'int' 기본형에 특화된 스트림입니다. Stream API는 Java에서 함수형 프로그래밍 스타일을 사용하여 데이터 처리를 할 수 있도록 도와주고IntStream은 'Stream' 와는 다르게 오토박싱/언박싱의 오버헤드가 없기 때문에 성능적으로 유리합니다. IntStream은 여러 가지 방법으로 다음과 같이 생성해서 사용할 수 있습.. 2024. 5. 23.
[ JPA ] Java Persistence Query Language(JPQL , 객체 지향 쿼리 언어)(2) Intro 객체 지향 쿼리 언어에 대한 포스팅을 이어가 보겠습니다. 이전 포스팅에서 페이징 처리 함수까지 알아봤습니다. JPQL 문법에 대해 알아보시는 분들은 아래 포스팅을 참고해 주시면 도움이 될 거 같아서 올려보겠습니다. [ JPA ] Java Persistence Query Language(JPQL , 객체 지향 쿼리 언어)(1) Intro JPA는 엔티티 객체를 중심으로 개발하기 때문에 검색 쿼리 실행하면 테이블 대상이 아닌 엔티티 객체를 대상으로 요청을 보내야 한다. 하지만 모든 데이터베이스 데이터를 객체로 변환해서 drg2524.tistory.com 집합과 정렬 집합 함수와 정렬 기능은 SQL문 작성할 때 사용할 수 있는 함수들을 별도의 처리 과정 없이 사용할 수 있다. 예를 들어서 집합 함수.. 2024. 4. 11.
[ JPA ] 값 타입(Value Object) Intro JPA의 데이터 타입을 분류하면 엔티티 타입과 값 타입(Value Object)으로 구분할 수 있다. 엔티티 타입은 @Entity 애노테이션으로 정의하는 객체, @Entity를 붙여서 관리하던 클래스들이다. 이 타입들은 PK값으로 관리가 되기 때문에 데이터가 변해도 식별자로 지속적으로 추적이 가능하고 관리도 편리하다. 예를 들면 Member 테이블인 즉, 회원 엔티티가 있으면 회원의 주소 및 나이 값을 변경해도 식별자로 인식이 가능하다. 그에 반해 값 타입은 자바 기본 타입과 래퍼 클래스, 문자열처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체다. 식별자가 없고 값만 있으므로 변경 시 추적이 불가하다. 만약 int 타입의 값이 10이 있다고 가정해 보면 10이라는 값을 100으로 변경하면 .. 2024. 3. 29.
[ JPA ] 즉시 로딩과 지연 로딩(FetchType.LAZY or EAGER) Intro 이전 포스팅에서 프록시(Proxy)에 대한 글을 작성했습니다. 프록시(Proxy)는 이번 포스팅에서 즉시 로딩(EAGER)과 지연 로딩(LAZY)을 구현하는데 중요한 개념인데, 일단 원리는 미뤄두고 즉시 로딩(EAGER)과 지연 로딩(LAZY)에 대한 개념에 대해 먼저 알아보자. 예제 테이블로 Member와 Team이 있다고 가정해보자. Member를 조회할 때 Team도 함께 조회해야 할까? 비즈니스 로직에서 단순히 멤버 로직만 사용하는데 함께 조회하면, 아무리 연관관계가 걸려 있다고 해도 손해이다. JPA에서는 데이터를 조회할 때 즉시 로딩(EAGER)과 지연 로딩(LAZY) 두 가지 방식이 있다. 이 두 가지 방식을 간단하게 설명하면 즉시 로딩(EAGER)은 데이터를 조회할 때 연관된 데.. 2024. 3. 26.
728x90