전체 글

전체 글

    Enum 클래스

    enumeration type 서로 관련된 상수를 편리하게 선언하기 위한 것으로, 여러 상수를 정의할 때 사용된다. 자바의 열거형은 타입에 안전한 열거형으로, 실제값이 같아도 타입이 다르면 컴파일 에러가 발생한다. 열거형 상수 간의 비교에는 ==를 사용할 수 있지만 비교 연산자는 사용할 수 없다. (대신 compareTo() 사용) @Getter @RequiredArgsConstructor public enum Role { // Role 클래스의 static 객체 USER("ROLE_USER", "일반 사용자"), ADMIN("ROLE_ADMIN", "관리자"); // 필드 private final String key; private final String title; } Enum 클래스 Enum 클래스..

    Arrays, Collections

    Arrays 배열을 다루는 데 유용한 메서드가 정의되어 있는 클래스로, 모든 메서드가 static 메서드이기 때문에 객체를 생성하지 않고도 바로 사용할 수 있다. 주요 메서드 List asList 전달받은 배열을 고정 크기의 리스트로 변환하여 반환한다. int binarySearch(Object[] a, Object key) 전달받은 배열에서 특정 객체를 이진 검색 알고리즘을 사용하여 검색한 후, 그 결과를 반환한다. T[] copyOf(T[] original, int newLength) 전달받은 배열을 특정 길이의 새로운 배열로 복사해서 반환한다. T[] copyOf(T[] original, int from, int to) 전달받은 배열의 특정 범위에 해당하는 요소만을 새로운 배열로 복사하여 반환한다...

    Comparable과 Comparator

    Comparable 객체를 정렬하는 데 사용되는 메서드인 compareTo() 메서드를 정의해놓은 인터페이스로, 같은 타입의 인스턴스를 비교해야 하는 클래스들은 모두 Comparable 인터페이스를 구현하고 있다. 따라서 Boolean을 제외한 Wrapper 클래스와 String, Date, File 등의 클래스의 인스턴스는 모두 정렬 가능하며, 기본적으로 오름차순으로 정렬한다. compareTo() public interface Comparable { public int compareTo(Object o); } Comparable 인터페이스에서 객체를 정렬하기 위해 정의해놓은 메서드로, 해당 객체와 전달된 객체의 순서를 비교한다. 비교하는 두 객체가 같으면 0, 비교하는 값보다 작으면 음수, 크면 양수..

    Iterator

    Iterator 컬렉션에 저장된 요소에 접근하는 데 사용되는 인터페이스로, 컬렉션 요소를 읽어오는 방법을 표준화함으로써 코드의 일관성을 유지하고 재사용성을 극대화할 수 있다. Collection 인터페이스는 Iterator 인터페이스를 구현한 클래스의 인스턴스를 반환하는 iterator() 메서드를 정의해 놓았다. 따라서 컬렉션 클래스에 대해 iterator()를 호출하여 Iterator를 얻은 다음 반복문을 사용해서 컬렉션 클래스의 요소를 읽을 수 있다. List list = new ArrayList(); Iterator iter = list.iterator(); while (it.hasNext()) { System.out.println(it.next()); } Map 인터페이스를 구현한 컬렉션 클래스..

    Map 컬렉션 클래스

    HashMap Map 컬렉션 클래스에서 가장 많이 사용되는 클래스로, 키와 값의 쌍으로 데이터를 저장한다. 해시 알고리즘을 사용하기 때문에 데이터를 검색하는 데에 있어 뛰어난 성능을 보인다. 내부적으로 Entry라는 내부 클래스를 정의하고, 다시 Entry 타입의 배열을 선언해서 구현되어 있다. public interface Map { public static interface Entry { Object getKey(); // Entry의 key 객체를 반환 Object getValue(); // Entry의 value 객체를 반환 Object setValue(Object value); // Entry의 value 객체를 지정된 객체로 변환 boolean equals(Object o); // 동일한 En..

    Set 컬렉션 클래스

    HashSet Set 인터페이스를 구현한 가장 대표적인 컬렉션으로, 해시 알고리즘을 사용하기 때문에 검색 속도가 매우 빠르다. 내부적으로 HashMap 인스턴스를 이용하여 요소를 저장하며, 중복을 허용하지 않기 때문에 add()를 통해 중복된 요소를 추가할 경우 해당 요소를 추가하지 않고 false를 반환한다. 또한 저장 순서를 유지하지 않기 때문에, 저장 순서를 유지하고자 한다면 LinkedHashSet을 사용해야 한다. 중복 확인 HashSet의 add 메서드는 새로운 요소의 중복 여부를 판별하기 위해 다음과 같은 과정을 거친다. 해당 요소에서 hashCode() 메서드를 호출하여 반환된 해시값으로 검색할 범위를 결정한다. 해당 범위 내의 요소들을 equals() 메서드로 비교한다. 따라서 HashS..

    컬렉션 프레임워크와 List 컬렉션 클래스

    컬렉션 프레임워크 자바에서 다수의 데이터를 쉽고 효과적으로 처리할 수 있는 표준화된 방법을 제공하는 클래스의 집합 즉 데이터를 저장하는 자료구조와 데이터를 처리하는 알고리즘을 구조화하여 클래스로 구현해 놓은 것 컬렉션 프레임워크에서는 데이터를 저장하는 자료구조에 따라 핵심이 되는 주요 인터페이스를 정의해 놓았다. 컬렉션 프레임워크의 모든 컬렉션 클래스들은 List, Set, Map 인터페이스 중 하나를 구현하고 있다. List와 Set 인터페이스는 모두 Collection 인터페이스를 상속받지만, 구조상의 차이로 인해 Map 인터페이스는 별도로 정의된다. Collection List와 Set 인터페이스의 공통된 부분을 뽑아서 정의한 인터페이스로, Map 인터페이스는 다른 형태로 컬렉션을 다루기 때문에 같..

    뷰 컨트롤러

    모델 데이터나 사용자 입력을 처리하지 않는 간단한 컨트롤러의 경우, 뷰에 요청을 전달하는 일만 하는 컨트롤러를 선언할 수 있다. 뷰 컨트롤러는 WebMvcConfigurer 인터페이스를 구현해야 하며, WebMvcConfigurer는 스프링 MVC를 구성하는 메서드를 정의하고 있다. WebMvcConfigurer는 인터페이스임에도 불구하고, 정의된 모든 메서드의 기본적인 구현을 제공하므로, 필요한 메서드만 선택해서 오버라이딩하면 된다. @Configuration public class WebConfig implements WebMvcConfigurer { // 뷰 컨트롤러 @Override public void addViewControllers(ViewControllerRegistry registry) ..

    JPA와 컬렉션

    컬렉션 JPA는 자바에서 기본으로 제공하는 Collection, List, Set, Map 컬렉션을 지원한다. 컬렉션은 일대다나 다대다 엔티티 관계를 매핑하거나, @ElementCollection을 사용해서 값 타입을 하나 이상 보관할 때 사용된다. 래퍼 컬렉션 하이버네이트는 엔티티를 영속 상태로 만들 때 컬렉션 필드를 하이버네이트에서 준비한 컬렉션으로 감싸서 사용한다. 이는 컬렉션을 효율적으로 관리하기 위한 것으로, 원본 컬렉션을 감싸는 내장 컬렉션을 생성해서 이 내장 컬렉션을 사용하도록 참조를 변경한다. 컬렉션 래퍼 컬렉션 초기화 Collection, List PersistenceBag ArrayList Set PersistenceSet HashSet 하이버네이트의 이러한 특징 때문에 컬렉션을 사용할..