Language/Java 50

[JPA] 값 타입, 임베디드 타입

JPA의 데이터 타입 분류 1. 엔티티 타입 @Entity로 정의하는 객체 데이터가 변해도 식별자로 지속해서 추적이 가능하다 예) 회원 엔티티의 키나 나이 값을 변경해도 식별자로 인식 가능 2. 값 타입 int, Integer, String 처럼 단순히 값으로 사용하는 자바 기본타입이나 객체 식별자가 없고 값만 있으므로 변경시 추적 불가 예) 숫자 100을 200으로 변경하면 완전히 다른 값으로 대체 3. 기본값 타입 자바 기본 타입 (int , double) 래퍼 클래스 (integer, Long) String 임베디드 타입 (embedded type, 복합 값 타입) 컬렉션 값 타입 (Conllection value type) 참고 : 자바의 기본 타입은 절대 공유되지 않는다 int a = 20; i..

Language/Java 2022.11.22

프록시와 연관관계 관계

프록시란? 대리자라는 뜻으로, 클라이언트가 사용하려고 하는데 실제 대상인 것처럼 위장해서 클라이언트의 요청을 받아주는 역할을 말한다. 프록시는 실제 대사인 것처럼 위장함으로서 이를 사용하는 클라이언트는 구체 클래스를 알 필요가 없어진다. 또한 프록시 클라이언트의 요청을 받아서 원래 요청 대상에게 바로 넘겨주는 게 아닌, 다양한 부가기능을 지원할 수 있다. 여기서 원래 요청하려는 대상 즉, 최정적으로 요청을 위임받아 처리하는 실제 오브젝트를 타깃 이라한다. 프록시의 조건 클라이언트의 요청을 대리로 수행해주는 모든 객체가 프록시 인것은 아니다. 객체가 프록시가 되려면 클라이언트는 요청을 보낸 대상이 타깃인지 프록시 인지 구분을 할 수 없어야한다. 즉, 타깃과 프록시는 같은 인터페이스를 확장해야한다. (CGL..

Language/Java 2022.11.16

Eclipse Svn 설치

어제는 Eclipse에 Azure 설치를 해보았는데 오늘은 Svn를 설치해보도록 할것이다 https://jungkeung.tistory.com/213 Install New Software -> Work with http://community.polarion.com/projects/subversive/download/eclipse/6.0/update-site/ 작성 -> Name : Svn 작성 후 Add 클릭 -> Name 밑에 있는 Svn 두개다 체크 후 Next 눌러준 2. 라이선스 확인 후 Filnsh -> Restart 클릭하면 끝이다. 자세한 내용은 아래 블로그를 참고 해서 하면 좋을거 같다 http://lmc.cs.kookmin.ac.kr/readmore/eclipse-svn

Language/Java 2022.10.28

Eclipse에 Azure 설치 하기

Eclipse마다 Java를 지원해주는 최소의 버진이 있다. Eclipse 4.17 이후로부터는 최소 Java 11 버전을 이용해야 하며 Java 8 이전 버전을 사용하려면 Eclipse 4.16 이전 버전을 사용해야 한다. 나는 4.24 버전이 java 1.8을 지원해주는 줄 알고 계속 구글링을 해보면서 시간을 날렸다.. 아래의 사이트는 Eclipse을 다운로드할 수 있으며 최신 버전부터 이전 버전까지 다운로드가 가능하다 https://www.eclipse.org/downloads/packages/release Eclipse에 Azure 설치 전에 https://learn.microsoft.com/ko-kr/azure/developer/java/fundamentals/java-support-on-azu..

Language/Java 2022.10.27

엔티티의 생명주기

엔티티는 4단계의 생명 주기 비영속 (new/transient) 영속 (managed) 준영속 (datached) 삭제 (removed) 영속성 관리 비영속 (new/transient) 비영속 상태는 객체를 새로 생성한 상태이다. JPA와 전혀 관계없이 객체만 생성한 상태이다. Member member = new Member(1L,"test"); //member는 비영속 상태 영속 상태가 아니므로 당연히 영속성 컨텍스트에 의해 관리되지 않으며, 1차 캐시, 변경감지등의 기능이 적용되지 않는다. 영속 (managed) 영속성 컨텍스트에 의해서 관리되어지는 상태이다. 생성한 객체를 em.persist()를 통해 영속성 컨텍스트에 저장하거나, 혹은 em.find()를 통해 DB에서 엔티티를 조회하면 영속성 컨..

Language/Java 2022.10.10

긴 매개변수 목록

어떤 함수에 매개변수가 많을수록 함수의 역할을 이해하기 어려워진다 그 함수는 한가지 일을 하고 있는게 맞는가? 불필요한 매개변수는 없는가? 하나의 레코드를 뭉칠 수 있는 매개변수 목록은 없는가? 어떤 매개변수를 다른 매개변수를 통해 알아낼 수 있다면, “매개변수를 질의 함수로 바꾸기”를 사용할 수 있다 기존 자료구조에서 세부적인 데이터를 가져와서 여러 매개변수로 넘기는 대신,”객체 통째로 넘기기”를 사용할 수 있다 일부 매개변수들이 대부분 같이 넘겨진다면, “매개변수 객체 만들기”를 적용할 수 있다 매개변수가 플래그로 사용된다면, “플래그 인수 제거하기”를 사용할 수 있다 여러 함수가 일부 매개변수를 공통적으로 사용한다면 “여러 함수를 클래스 묶기”를 통해매개변수를 해당 클래스의 필드로 만들고 매서드에 ..

Language/Java 2022.08.15

긴 함수(2)

조건문 분해하기(Decompose Conditional) 여러 조건에 따라 달라지는 코드를 작성하다보면 종종 긴 함수가 만들어지는 것을 목격할 수 있다. “조건” 과 “액션” 모두 “의도”를 표현해야한다 기술적으로는 “함수 추출하기”와 동일한 리팩토링이지만 의도만 다를 뿐이다. 리팩토링 (전) private Participant findParticipant(String username, List participants) { Participant participant = null; if (participants.stream().noneMatch(p -> p.username().equals(uesrname))) { participant = new Participant(uesrname); participant..

Language/Java 2022.08.14

[리팩토링] 긴 함수

임시 변수를 질의 함수로 바꾸기 (Replace Parameter with Query) 함수의 매개변수 목록은 함수의 다양성을 대변하며, 짧을수록 이해하기 좋다. 어떤 한 매개변수를 다른 매개변수를 통해 알아낼 수 있다면 중복 매개변수라 생각할 수 있다. 매개변수에 값을 전달하는 것은 함수를 호출하는 쪽의 책임이다. 가능하면 함수를 호출하는 쪽의 책임을 줄이고 함수 내부에서 책임지도록 노력한다. 임시 변수를 질의 함수로 바꾸기와 함수 선언 변경하기를 통해 이 리팩토링을 적용한다. 예시 participants.forEach(p -> { long count = p.homework().values().stream() .filter(v -> v == true) .count(); double rate = coun..

Language/Java 2022.08.06

Optional

Optional 이란? 오직 값 한 개가 들어있을 수도 없을 수도 있는 컨테이너 NullPointerException 개발하면서 가장 많이 괴롭히는 예외 중 하나가 NPE(NullPointerException) 이다. 이를 피하기 위해서는 어떤 방법이 있었을까? Test t = null; System.out.println("t = " + t.v); // NPE 발생 //예외 처리 로직 if( t == null) { System.out.println("Test is NULL"); } else { System.out.println(" t = " + t.v); } NPE를 해결하기 위하여 위와 같이 if...else 문으로 null을 검사하는 예외 처리 로직을 추가해야한다. 하지만 이 방법으로는 null값을 ..

Language/Java 2022.07.02

Java8 Stream

Stream 이란? 컬렉션, 배열등에 대해 저장되어있는 요소들을 하나씩 참조하며 반복적인 처리를 가능하게 하는 기능이다. Stream을 이용한다면 불필요한 for문과 그 안에서 이루어지는 if문 등의 분기 처리를 쓰지 않고도 깔끔하게 직관적인 직관적인 코드로 변형할 수 있다. Stream API 사용법 Stream API는 데이터, Stream생성(), 중개연산()...종료연산(); 구조로 사용된다. Stream 특징 데이터를 담고 있는 저장소 (컬렉션)이 아니다 Funtnional in nature 스트림이 처리하는 데이터 소스를 변경하지 않는다 스트림으로 처리하는 데이터는 오직 한번만 처리한다 무제한일 수도 있다(Short Circuit 메소드를 사용해서 제한할 수 있다 중개 오퍼레이션은 근본적으로 ..

Language/Java 2022.07.02