ArrayList(Collection)에서 최대값, 최소값 구하기 public static T max(Collection
분류 전체보기
숫자 카드 게임 숫자 카드 게임은 여러 개의 숫자 카드 중에서 가장 높은 숫자가 쓰인 카드 한 장을 뽑는 게임이다. 단 게임의 룰을 지키며 카드를 뽑아야 하고 룰은 다음과 간다. 숫자가 쓰인 카드들이 N X M 형태로 놓여 있다. N은 행, M은 열이다 먼저 카드를 뽑고자 하는 행을 고른다. 이후 그 행에 존재하는 카드들 중 가장 작은 값의 카드만 고를 수 있다. 입력 조건 첫째 줄에 카드들이 놓은 행의 개수 N과 열의 개수 M이 주어진다. (공백을 기준으로) (1
LinkedList에 대해 알아보기 전에, 왜 LinkedList가 생기게 되었는지에 대해 알아보자. 배열의 단점 자바의 배열은 다음과 같은 단점을 가지고 있다. 크기를 변경할 수 없다. 크기를 변경할 수 없으므로 크기를 확장해야 할 경우 새로운 배열을 생성하여 복사해야한다. 실행속도를 향상시키기 위해서 배열의 크기를 크게 생성할 경우 메모리가 낭비된다. 비순차적인 데이터의 추가 또는 삭제에 시간이 많이 걸린다. 차례대로 데이터를 추가하고 마지막의 데이터를 삭제하는 경우에는 굉장히 빠르나, 배열의 중간에서 값을 제거하고 추가할 때는 굉장히 시간이 오래 걸린다. 배열을 이러한 단점을 가지고 있고, 배열을 통해 List를 구현한 ArrayList도 위와같은 문제점들을 가지고 있다. 이러한 문제점을 보안하기 ..
ArrayList ArrayList는 List인터페이스를 구현하기 때문에, 저장 순서가 유지되고, 중복을 허용한다. ArrayList는 기존의 Vector를 개선한 것으로 Vector와 구현원리와 기능적인 측면이 동일하다. Vector는 레거시 코드들과의 호환성을 유지하기 위해 남겨두는 것이기 때문에, 앞으로는 Vector 말고 ArrayList를 사용하도록 하자. ArrayList는 내부적으로 Object 배열(Object[])을 사용해서 구현되었다. 배열은 길이가 정적이기 때문에, 더이상 배열에 저장할 공간이 없어진다면 보다 큰 배열을 생성해서 기존의 배열에 저장된 내용을 새로운 배열로 복사한 후 저장한다. 메소드들은 정말 많지만, 알아서 찾아보도록 하고 이 글에서는 다른것에 대해서 다루도록 하겠다...
컬렉션 프레임워크 자바의 컬렉션 프레임워크 그룹에는 크게 3가지 타입이 존재한다고 볼 수 있다. List와 Set, 그리고 Map이다. 그리고 List와 Set의 공통된 부분을 다시 뽑아서 Collection 인터페이스를 추가로 정의하였다. 인터페이스 특징 List 순서가 있는 데이터의 집합. 데이터의 중복을 허용한다. ArrayList, LinkedList, Stack, Vector 등 Set 순서를 유지하지 않는 데이터의 집단. 데이터의 중복을 허용하지 않는다. HashSet, TreeSet 등 Map 키(Key) 와 값(Value)의 쌍(pair)으로 이루어진 데이터의 집합. 순서는 유지하지 않으며, 키는 중복이 불가하나 값은 중복을 허용한다. HashMap, TreeMap, Hashtable, P..
벌크 연산 만약 한 해가 지나서 모든 회원의 나이를 1씩 올려주려면 어떻게 해야할까요? JPA의 변경 감지 기능으로 실행하려면 너무 많은 SQL이 실행됩니다. 이럴 때 벌크 연산을 사용할 수 있는데, 쿼리 한번으로 여러 테이블의 로우를 변경 가능합니다. executeUpdate() 벌크 연산은 executeUpdate()를 통해 사용할 수 있으며, 반환값은 영향을 받은 엔티티의 수를 반환합니다. UPDATE와 DELETE를 지원하며 하이버네이트에서는 INSERT도 지원합니다. em.createaQuery("delete from Product p where p.price < :price") .setParameter("price" , 100) .executeUpdate(); 벌크 연산의 주의점 벌크 연산은 ..
Named 쿼리 쿼리를 미리 정해둔 후 이름을 부여해서 필요할 때 사용할 수 있는데, 이것을 Named 쿼리라 부릅니다. 애플리케이션 로딩 시점에 쿼리를 검증한 뒤 사용된다는 장점을 가집니다. Named 쿼리를 어노테이션에 정의 @NamedQueries({ @NamedQuery( name = "Member.findByUsername", query = "select m from Member m where m.username =:username") }) @Entity public class Member{} 사용 em.createNamedQuery("Member.findByUsername",Member.Class) 스프링 DATA JPA 스프링 DATA JPA를 사용하면 다음과 같이 간단하게 사용할 수 있습니..
JPQL(Java Persistence Query Language) JPQL은 SQL을 추상화하여 특정 데이터베이스 SQL에 의존적이지 않은 객체지향 쿼리 언어입니다. 테이블을 대상으로 쿼리를 하는것이 아닌 객체(엔티티)를 대상으로 쿼리를 하기에 객체지향 쿼리 언어라고 불립니다. JPQL은 결국 SQL로 변환되어 데이터베이스에 전달됩니다. JPQL 문법 예시 select m from Member as m where m.age > 18 엔티티와 속성은 대소문자를 구분합니다. (Member, age) JPQL 키워드는 대소문자를 구분하지 않습니다. (SELECT, select 모두 가능) 테이블이 아닌 엔티티의 이름을 사용합니다. (Member) 별칭은 필수입니다. (m) (as는 생략 가능) EXISTS,..