Java - Method, 문법, 기능 모음집
Set<E>https://applefarm.tistory.com/72
순서에 상관 없이, 어떤 데이터가 존재하는지를 확인하기 위한 용도로 많이 사용된다.
다시 말해서 중복되는 것을 방지하고, 원하는 값이 포함되어 있는지를 확인하는 것이 주 용도다.
예) 1분간 사용자가 요청한 로그가 있고, 1분간 동일한 서버에 요청하는 중복 사용자 수는 매우 많다. 이러한 경우 배열로 확인하려고 한다면,
indexOf()라는 메소드로 해당 객체가 존재하는지 확인후에 add() 메소드로 추가하는 작업을 반복해야만 한다.
하지만 Set을 구현한 클래스를 사용하면 그냥 데이터를 추가만 해주면 된다.
그러면 자동으로 데이터가 중복되지 않고 저장된다. 이 때 순서는 중요하지 않다.
이처럼 어떤 값이 존재하는지 존재 여부만 중요할 때 Set을 사용하면 된다.
HashSet : 순서가 전혀 필요없는 데이터를 해시 테이블에 저장한다. Set중에 성능이 가장 좋다.TreeSet : 저장된 데이터의 값에 따라서 정렬되는 셋이다. REd-black이라는 트리타입으로 값이 저장되며 HashSet보다 성능이 약간 느리다LinkedHashSet : 연결된 목록 타입으로 구현된 해시 테이블에 데이터를 저장한다., 저장된 순서 따라서 값이 정렬된다. 대신 성능이 이 셋 중에서 가장 나쁘다.https://akdl911215.tistory.com/307
Entity에 있는 데이터를 조회하거나 저장과 변경 그리고 삭제를 할때 Spring JPA에서 제공하는 Repository라는 인터페이스를 정의해 해당 Entity의 데이터를 사용 할 수 있다.

exteds JpaRepository <엔티티 클래스이름 , ID 필드 타입> 을 지정한다.
Specification을 인자로 받는 findAll 같은 함수를 사용하기 위해서는 인터페이스에 JpaSpecificationExecutor를 상속받아야 한다.

상속받은 JpaSpecificationExecutor을 이용해 Specification<Entity>를 제너릭으로 받아오면 쿼리문의 where조건절 같은 조건을 줄 수 있고, JpaRepository는 그 조건을 findAll같은 메소드로 다시 사용해줄 수 있다.
jpa에 정의된 키워드를 조합하면 특정조건에 해당하는 데이터를 원하는 형태대로 가져올 수 있다.
하지만 데이터베이스에 종속적인 문법을 사용해야 할 때나 Entity간의 명시적으로 들어나지 않는 관계간의 조인, 데이터 조회 속도 향상등의 목적으로 직접 쿼리를 작성할 수 있는 방법을 제공하고 있다.
