TIL. 제네릭, 컬렉션

hyuko·2023년 1월 14일
0

Java

목록 보기
23/26

제네릭

형태 : <T>

  • 제네릭은 wrapper class 자료형만 사용가능하다.
  • 자료형을 바꿀 때 쓴다.
  • 생성될 때 꺽쇠에 들어가있는 타입으로 생성을 하겠다라는 의미이다.
  • 항상 객체는 생성이 될 때 기준으로 봐야한다.

와일드 카드

< ? > : 와일드카드 어떠한 자료형이 들어올지 모른다 , 어떤자료형이든 가능하다
여러가지 자료형을 받아야하고 어떤자료형이 들어올지 모를 때 쓰인다. 
유연하게 객체를 쓰고 싶을 때

와일드 카드를 쓴 것과 Object 로 제네릭안에 쓴 것과 동일하나
잘 쓰지 않는다.

와일드 카드 제약조건

? extends 자료형 (대상 객체 하위)
뒤에 있는 자료형을 상속받거나 자료형 자체가 아니면 리턴이 되지않는다.

? super 자료형 (대상 객체 상위)
자료형을 기준으로 자료형 자체와 상위객체만 리턴이 가능하다.

제네릭 예시코드

public class TestData<T, E> {

    private T data1;
    // 래퍼클래스 자료형 Wrapper Class
    private E data2;

    public TestData(T data1, E data2){
        this.data1 = data1;
        this.data2 = data2;
    }

    @Override
    public String toString() {
        return "TestData{" +
                "data1='" + data1 + '\'' +
                ", data2=" + data2 +
                '}';
    }
}

===========================================

public class Main {

    public static void main(String[] args) {
        TestData<String, Integer> td = new TestData<String, Integer>("홍길동", 100);
        TestData<String, Double> td2 = new TestData<String, Double>( "홍길동", 100.07);

        System.out.println(td);
        System.out.println(td2);

       
    }
}


  • 실행시 콘솔화면

collection 프레임워크

다수의 데이터를 쉽고 효과적으로 처리할 수 있는 표준화된 방법을 제공하는 클래스의 집합

                             Map<K, V>

Iterable<E> <- Collection<E> <- List<E>
                              <- Set<E>

List

  • List: 순서가 있고 중복이 가능하다
    순서가 있기 때문에 명확하게 순서에 맞는 값이 있어서 구분이 가능해서
    중복이 가능하다
public class ArrayListMain {

    public static void main(String[] args) {

        List<String> strList = new ArrayList<String>();

        // 값 추가
        strList.add("java");
        strList.add("python");
        System.out.println(strList);

        // 값 원하는 위치에 추가
        strList.add(1, "android");
        System.out.println(strList);

        // 해당 인덱스의 값을 추출
        System.out.println(strList.get(0));
        String strLang = strList.get(1);
        System.out.println(strLang);

        // 리스트에 해당 값이 있는지 확인 (T, F)
        System.out.println(strList.contains("C++"));
        System.out.println(strList.contains("android"));

        // 값 수정
        strList.set(2, "javascript");
        System.out.println(strList);

        // 값 삭제
        strList.remove("android");
        System.out.println(strList);
        strList.remove(1);
        System.out.println(strList);

        // 리스트의 크기 확인
        System.out.println(strList.size());

        // 리스트가 비었는지 확인
        System.out.println(strList.isEmpty());

        // 리스트 초기화
        strList.clear();
        System.out.println(strList.isEmpty());

        /*
         * 배열을 List로 변환
         * Arrays.asList(배열);
         *
         */

        String[] langs = {"java", "python", "C++", "javascript"};
        List<String> tempList = Arrays.asList(langs);
        strList.addAll(tempList);
        strList.addAll(2, tempList);

        // 해당 값의 위치 (index) 왼쪽부터 찾기
        int findIndexLeft = strList.indexOf("java");
        System.out.println(findIndexLeft);

        // 해당 값의 위치 (index) 오른쪽 부터 찾기
        int findIndexRight = strList.lastIndexOf("java");
        System.out.println(findIndexRight);

        //////////////////////////////////////

        strList.set(1, "java");
        System.out.println(strList);
        strList.subList(strList.indexOf("java") + 1, strList.size()).indexOf("java");

        //////////////////////////////////////

        // 시작인덱스 부터 뒤의 인덱스 전까지 1, 2, 3 인덱스의 값을 뽑아 낸다.(리스트로)
        List<String> subList = strList.subList(1, 4);
        System.out.println(subList);

        // ==============<< 반복 >> ==================
        // 일반 반복문
        for (int i = 0; i < strList.size(); i++) {
            System.out.println("[" + i + "]: " + strList.get(i));
        }
        System.out.println();

        // forEach
        for (String str : strList) {
            System.out.println("[값]: " + str);
        }
        System.out.println();

        // 람다식 forEach
        strList.forEach(str -> System.out.println("[값2]" + str));

        System.out.println();

        // 반복자
        Iterator<String> iterator = strList.iterator();

        while (iterator.hasNext()) {
            String lang2 = iterator.next();
            System.out.println("[값3]: " + lang2);
        }

        for (String lang2 : strList){
            System.out.println("[값3]: " + lang2);
        }

    }
}
  • 실행시 콘솔화면





profile
백엔드 개발자 준비중

0개의 댓글