ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 컬렉션 - Collections 클래스와 메서드
    백엔드/자바 2021. 5. 20. 19:37

    Collections란?

    Arrays가 배열 관련 메서드를 제공하는 것처럼 Collections는 컬렉션과 관련된 메서드를 제공한다.

     

    Arrays, Collections, Objects와 같은 클래스들은 모두 Static 메서드를 제공한다.

     

    그래서 객체 생성없이도 편리하게 다양한 기능을 이용할 수 있다.

     

    fill(), copy(), sort(), binarySearch() 등 기본 기능이 있으나 Arrays의 클래스의 메서드들과 기능이 동일하다.

    동기화 - synchronizedXXX()

    과거 Vector, Hashtable와 같은 자료구조 클래스들은 동기화가 처리되어있었다.

     

    그래서 무슨 자료구조를 사용하든 기본적으로 동기화가 되었었다.

     

    하지만 모든 프로그램이 멀티 쓰레드 프로그래밍을 하는 것이 아니다.

     

    그래서 ArrayList, HashMap같은 새로 추가된 컬렉션들은 동기화를 필요한 경우에만 하도록 했다.

     

    그게 바로 Collections에서 제공하는 동기화 관련 메서드다.

     

    public static void main(String[] args) {
            
            // List를 동기화해줌
            Collections.synchronizedList(new ArrayList());
    
            // Set을 동기화해줌
            Collections.synchronizedSet(new TreeSet());
            
            // Map을 동기화해줌
            Collections.synchronizedMap(new HashMap());
            
        }

     

    변경불가 컬렉션 - unmodifiableXXX()

    컬렉션에 저장된 데이터를 변경되지 않도록 즉 읽기 전용으로 만들고 싶을 때 사용하면 된다.

     

    보통 멀티쓰레드 프로그래밍에서 여러 쓰레드가 하나의 컬렉션에 접근할 때 데이터 보호를 위해 사용한다.

     

    public static void main(String[] args) {
    
            // 읽기 전용 리스트 생성
            Collections.unmodifiableList(new ArrayList());
    
            // 읽기 전용 Set 생성
            Collections.unmodifiableSet(new TreeSet());
    
            // 읽기 전용 Map 생성
            Collections.unmodifiableMap(new HashMap());
    
        }

    싱글톤 컬렉션 - singletonXXX()

    단 한개의 객체만 저장 가능한 컬렉션을 만들고 싶을 때 사용한다.

     

    public static void main(String[] args) {
    
            // 리스트 객체 하나만 저장 가능
            Collections.singletonList(new ArrayList());
    
            // Set객체 하나만 저장
            Collections.singleton(new TreeSet());
    
            // Map객체 하나만 저장
            Collections.singletonMap("key", "value");
    
        }

    한 가지 타입의 자료만 저장가능한 컬렉션 - checkedXXX()

    컬렉션에 한 가지 타입의 객체만 저장 가능하게 만드는 메서드.

     

    보통 컬렉션에 다양한 타입의 객체가 저장 가능하나, 이걸 쓰면 한 가지만 가능함.

     

    하지만 실제로는 지네릭스를 많이 사용하고 있어서 활용도는 낮다.

     

    public static void main(String[] args) {
    
            List list = new ArrayList();
            Set set = new TreeSet();
            Map map = new HashMap();
    
            // String 객체만 저장 가능한 리스트으로 변환
            Collections.checkedList(list, String.class);
    
            // String 객체만 저장 가능한 Set으로 변환
            Collections.checkedSet(set, String.class);
    
            // String 객체만 저장 가능한 Map으로 변환(key와 value 모두)
            Collections.checkedMap(map, String.class, String.class);
        }
Designed by Tistory.