분류 전체보기

    개인적인 알고리즘 문제 풀이 팁 기록

    투 포인터 두 점을 이동하면서 하는 알고리즘인데, n^2 형식으로 나오면 별로 좋지않다. 두 점을 어떻게 잡고 시작하느냐가 포인트인데 증가와 감소가 이루어 질 수 있도록 잡아야 한다. 1 2 3 4 배열이 있고 해당 배열의 각 2개를 뽑아서 더해서 m 값에 가깝도록 한다고 하면 왼쪽 점을 1 오른쪽 점을 4에 두고 시작하게 되면 왼쪽 점을 올리면 더한 값의 증가가 이루어지고, 오른쪽 점을 내리면 더한 값의 감소가 이루어질 것이다. 그런데 만약 덧셈이 아니라 뺀 값이 m에 가깝도록 한다면?? 기존과 같이 왼쪽 점을 1 오른쪽 점을 4에 둔다면 왼쪽점을 증가시키면 뺀 값의 감소가 이루어지고 오른쪽 점을 감소시켜도 뺀 값의 감소가 이루어 질것이다. 이럴 때에는 한 쪽에 두 점을 같이 놔야한다. 왼쪽 점을 1 ..

    [자료구조] ArrayList의 원리에 대해

    ArrayList의 원리에 대해 ArrayList 는 LinkedList 와 같이 List 인터페이스를 구현하는 클래스이다. 배열은 처음에 할당된 만큼의 공간을 사용할 수 있는 반면 ArrayList는 계속해서 add 할 수 있다. 그래서 사용하기 엄청편한데, 그렇다면 내부구현이 어떤식으로 돌아가길레 계속 추가할 수 있는걸까 ?? ArrayList list = new ArrayList(); list.add(3); //ArrayList.java 내의 코드 /** * Shared empty array instance used for default sized empty instances. We * distinguish this from EMPTY_ELEMENTDATA to know how much to inf..

    [자료구조] LinkedList의 원리에 대해

    LinkedList의 원리에 대해 LinkedList(연결 리스트)는 노드로 이루어진 선형의 자료구조이다. public class LinkedList extends AbstractSequentialList implements List, Deque, Cloneable, java.io.Serializable { transient int size = 0; /** * Pointer to first node. */ transient Node first; /** * Pointer to last node. */ transient Node last; ... } private static class Node { E item; Node next; Node prev; Node(Node prev, E element, Node..

    [Spring] 클래스의 ToString에 대해

    클래스의 ToString에 대해 클래스에는 Object 클래스의 .toString() 메서드를 기본적으로 사용하기 때문에 따로 오버라이드를 해주지 않으면 해당 클래스의 해시코드가 나오게 된다. 클래스 내의 필드들을 toString 하고 싶다면 내 입맛대로 구현해줄 수도 있지만, 이를 도와주는 여러 메서드들이 있다. ToStringBuilder org.apache.commons.commons-lang3 의 ToStringBuilder가 있다. new ToStringBuilder(this).append("id",id)....toString() 뭐 이런식으로 append 하면서 쭉 붙여서 사용할 수도 있지만 해당 클래스의 필드 값이 변하면 계속 변경을 해주어야 하는 단점이 있다. ToStringBuilder...

    [JPA] merge 동작방식과 기타 어노테이션

    @PersistenceContext : 엔티티 매니저(EntityManager) 주입 스프링 데이터 JPA를 사용하면 EntityManager도 주입 가능하다. @PersistenceUnit : 엔티티 매니저 팩토리(EntityManagerFacotry) 주입 @Transactional : 트랜잭션, 영속성 컨텍스트 readonly = true : 데이터의 변경이 없는 읽기 전용 메서드에 사용, 영속성 컨텍스트를 플러시 하지 않으므로 약간의 성능이 향상된다. (읽기 전용에는 다 전용) @SpringBootTest : 스프링 부트 띄우고 테스트 한다.(이게 없으면 @Autowired 실패 한다) merge 의 동작 방식 merge(member) 호출 파라미터로 넘어온 준영속 엔티티의 식별자 값으로 1차 캐..

    [JPA] API 성능 끌어올리기(N+1 문제 등)

    API 성능 끌어올리기(n+1 문제 등) 본 내용은 김영한 님의 스프링 부트와 JPA 활용2 강의 내용을 토대로 정리했습니다. 지연로딩과 컬렉션이 없는 경우 @GetMapping("/api/v1/members") public List membersV1(){ return memberService.findMembers(); } 응답 값으로 엔티티를 직접 외부에 노출한 경우의 문제점 엔티티에 프레젠테이션 계층을 위한 로직이 추가된다. 기본적으로 엔티티의 모든 값이 노출된다. 응답 스펙을 맞추기 위해 로직이 추가된다.(@JsonIgnore, 별도의 뷰 로직 등등) 실무에서는 같은 엔티티에 대해 API가 용도에 따라 다양하게 만들어지는데, 한 엔티티에 각각의 API를 위한 프레젠테이션 응답 로직을 담기는 어렵다...

    [JPA] 값 타입에 대해

    JPA 값 타입에 대해 JPA의 데이터 타입 분류 엔티티 타입 @Entity로 정의 하는 객체 데이터가 변해도 식별자로 지속해서 추적 가능 EX) 회원 엔티티의 키나 나이 값을 변경해도 식별자로 인식 가능 값 타입 int, Integer, String 처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체 식별자가 없고 값만 있으므로 변경 시 추적 불가 값 타입 분류 기본값 타입 자바 기본 타입 (int, double) 래퍼 클래스(Integer, Long) String 임베디드 타입(embedded type, 복합 값 타입) 컬렉션 값 타입(collection value type) 임베디드 타입 임베디드 타입을 사용하면 여러 필드들을 묶어서 표현할 수 있다. public class Member{ @Id ..

    [JPA] 영속성 전이(CASCADE)와 고아 객체에 대해

    영속성 전이(CASCADE)와 고아 객체에 대해 본 내용은 자바 ORM 표준 JPA 프로그래밍 책을 토대로 정리했습니다. 영속성 전이(CASCADE) Child child1 = new Child(); Child child2 = new Child(); Parent parent = new Parent(); parent.addChild(child1); parent.addChild(child2); em.persist(child1); em.persist(child2); em.persist(parent); Parent 안에 Child를 갖고 있고 addChild를 통해서 집어넣어주었다. 하지만 이 3개를 다 persist 해줘야 하는데, 이것을 영속성 전이를 통해서 편리하게 할 수가 있다. @OneToMany(ma..