ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java μ‘μš©] 2. μ»¬λ ‰μ…˜, Wrapper class, Iterator
    Dev/Java 2023. 3. 20. 12:57
    728x90

    πŸ“˜ μ‘μš© 2μž₯ : μ»¬λ ‰μ…˜

    데이터 ꡬ쑰에 λ”°λ₯Έ λŒ€ν‘œμ μΈ μ»¬λ ‰μ…˜ (자료ꡬ쑰)

    • List : μˆœμ„œ λŒ€λ‘œ μŒ“μ—¬μžˆλŠ” ꡬ쑰 (μ•„μ΄ν…œμ˜ 쀑볡 ν—ˆμš©)
    • Map : ν‚€(Key), κ°’(Value)의 쌍으둜 μ €μž₯ (Key의 쀑볡 λΆˆκ°€)
    • Set : μˆœμ„œκ°€ μ—†λŠ” μ§‘ν•© (쀑볡 λΆˆκ°€)

    λ°°μ—΄κ³Ό ArrayList 비ꡐ

    πŸ’‘
    크기λ₯Ό 정해두지 μ•Šκ³  μš”μ†Œλ₯Ό μΆ”κ°€ν•  λ•Œ λ§ˆλ‹€ 크기가 컀진닀.

    Generic

    πŸ’‘
    μ œλ„€λ¦­μ„ μ‚¬μš©ν•˜λ©΄ 컴파일 μ‹œμ— νƒ€μž… 체크가 이루어져 νƒ€μž… μ•ˆμ „μ„±μ„ 보μž₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

    μ œλ„€λ¦­μ΄λž€?

    μ œλ„€λ¦­μ€ ν΄λž˜μŠ€λ‚˜ λ©”μ†Œλ“œμ—μ„œ μ‚¬μš©ν•  데이터 νƒ€μž…μ„ 미리 μ •ν•˜μ§€ μ•Šκ³ , μ‹€μ œ μ‚¬μš©λ˜λŠ” μ‹œμ μ— 데이터 νƒ€μž…μ„ κ²°μ •ν•˜λŠ” 방식이닀.

    πŸ’‘
    μ œλ„€λ¦­μ„ μ‚¬μš©ν•˜λ©΄ μ½”λ“œμ˜ μž¬μ‚¬μš©μ„±μ„ 높일 수 있으며, νƒ€μž… μ•ˆμ •μ„±μ„ 보μž₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

    μ‚¬μš© 방법

    μ œλ„€λ¦­μ„ μ‚¬μš©ν•˜λ €λ©΄ ν΄λž˜μŠ€λ‚˜ λ©”μ†Œλ“œμ˜ 선언뢀에 μ œλ„€λ¦­ νƒ€μž… λ§€κ°œλ³€μˆ˜λ₯Ό μΆ”κ°€ν•΄μ•Ό ν•©λ‹ˆλ‹€. μ œλ„€λ¦­ νƒ€μž… λ§€κ°œλ³€μˆ˜λŠ” 보톡 λŒ€λ¬Έμž μ•ŒνŒŒλ²³ ν•œ κΈ€μžλ‘œ ν‘œκΈ°ν•©λ‹ˆλ‹€.

    public class GenericClass<T> {
        private T t;
    
        public T getT() {
            return t;
        }
    
        public void setT(T t) {
            this.t = t;
        }
    }

    μœ„ μ½”λ“œλŠ” μ œλ„€λ¦­μ„ μ‚¬μš©ν•œ 클래슀의 μ˜ˆμ‹œμž…λ‹ˆλ‹€. TλŠ” μ œλ„€λ¦­ νƒ€μž… λ§€κ°œλ³€μˆ˜λ‘œ, 이 클래슀λ₯Ό μ‚¬μš©ν•  λ•Œ μ‹€μ œ νƒ€μž…μœΌλ‘œ λŒ€μ²΄λ©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, GenericClass<String>κ³Ό 같이 μ‚¬μš©ν•˜λ©΄ TλŠ” String으둜 λŒ€μ²΄λ˜μ–΄ λ™μž‘ν•©λ‹ˆλ‹€.

    μ œλ„€λ¦­ λ©”μ†Œλ“œ

    μ œλ„€λ¦­μ€ 클래슀뿐만 μ•„λ‹ˆλΌ λ©”μ†Œλ“œμ—μ„œλ„ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ©”μ†Œλ“œμ—μ„œ μ œλ„€λ¦­μ„ μ‚¬μš©ν•˜λ©΄, λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•  λ•Œλ§ˆλ‹€ μ œλ„€λ¦­ νƒ€μž…μ„ λͺ…μ‹œν•  ν•„μš”κ°€ μ—†μŠ΅λ‹ˆλ‹€.

    public class GenericMethod {
        public static <T> void printArray(T[] arr) {
            for (T t : arr) {
                System.out.println(t);
            }
        }
    }

    μ»¬λ ‰μ…˜μ—μ„œ κΈ°λ³Έν˜• μ·¨κΈ‰ λΆˆκ°€

    πŸ’‘
    μ»¬λ ‰μ…˜μ€ κΈ°λ³Έν˜•(int, double, boolean λ“±)을 μ·¨κΈ‰ν•  수 μ—†λ‹€

    wrapper 클래슀

    Wrapper ν΄λž˜μŠ€λŠ” κΈ°λ³Έ μžλ£Œν˜•(primitive data type)의 값을 객체둜 κ°μ‹ΈλŠ” 클래슀λ₯Ό λ§ν•©λ‹ˆλ‹€.

    πŸ’‘
    κΈ°λ³Έ μžλ£Œν˜•(primitive data type)의 값을 객체화할 수 μžˆλ„λ‘ ν•΄μ€λ‹ˆλ‹€.

    κ°μ²΄ν™”λœ 값에 λŒ€ν•΄ λ‹€μ–‘ν•œ λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•˜μ—¬ μ‚¬μš©ν•  수 μžˆλ„λ‘ ν•΄μ€λ‹ˆλ‹€.

    객체와 객체 κ°„μ˜ 비ꡐλ₯Ό κ°€λŠ₯ν•˜κ²Œ ν•΄μ€λ‹ˆλ‹€.

    null 값을 ν‘œν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

    κΈ°λ³Έ μžλ£Œν˜• 값을 λ°˜ν™˜ν•˜λŠ” λ©”μ†Œλ“œμ—μ„œ Wrapper 클래슀λ₯Ό λ°˜ν™˜ν•  경우, μžλ™μœΌλ‘œ κΈ°λ³Έ μžλ£Œν˜• κ°’μœΌλ‘œ λ³€ν™˜λ©λ‹ˆλ‹€.

    λ°°μ—΄κ³Ό ArrayList 탐색 방법 비ꡐ

    일반 for문

    πŸ’‘
    ArrayListμ—μ„œλŠ” get() λ©”μ„œλ“œλ₯Ό 톡해 ν•΄λ‹Ή μ›μ†Œλ₯Ό κ°€μ Έμ˜¨λ‹€.

    for - each문

    πŸ’‘
    for-each문은 λ™μΌν•œ λ°©λ²•μœΌλ‘œ 탐색할 수 μžˆλ‹€.

    Iterator

    πŸ’‘
    IteratorλŠ” μžλ°” μ»¬λ ‰μ…˜ ν”„λ ˆμž„μ›Œν¬(Collection Framework)μ—μ„œ μ»¬λ ‰μ…˜μ— μ €μž₯된 μš”μ†Œ(element)듀을 순차적으둜 μ ‘κ·Ό(iterate)ν•˜λŠ” 방법을 μ œκ³΅ν•˜λŠ” μΈν„°νŽ˜μ΄μŠ€μ΄λ‹€.
    1. hasNext(): λ‹€μŒ μš”μ†Œκ°€ μ‘΄μž¬ν•˜λŠ”μ§€ ν™•μΈν•©λ‹ˆλ‹€. μš”μ†Œκ°€ μžˆλ‹€λ©΄ true λ°˜ν™˜
    1. next(): λ‹€μŒ μš”μ†Œλ₯Ό λ°˜ν™˜
    1. remove(): μ»¬λ ‰μ…˜μ—μ„œ ν˜„μž¬ μš”μ†Œλ₯Ό 제거

    ArrayList<String> list = new ArrayList<>();
    list.add("apple");
    list.add("banana");
    list.add("orange");
    
    Iterator<String> iter = list.iterator();
    while (iter.hasNext()) {
        String fruit = iter.next();
        System.out.println(fruit);
    }

    LinkedList

    πŸ’‘
    각 μš”μ†ŒλŠ” λ‹€μŒ μš”μ†Œμ˜ μ£Όμ†Œλ₯Ό μ•Œκ³  μžˆλ‹€.
    πŸ’‘
    μž₯점 : μ‚½μž…, μ‚­μ œκ°€ λΉ λ₯΄λ‹€. 단점 : μš”μ†Œμ˜ 탐색이 λŠλ¦¬λ‹€.

    Javaμ—μ„œ μ œκ³΅ν•˜λŠ” Collection μ’…λ₯˜

    HashSet

    πŸ’‘
    쀑볡 값을 ν—ˆμš©ν•˜μ§€ μ•ŠλŠ” μ§‘ν•©
    πŸ’‘
    μž₯점 : 검색이 맀우 λΉ λ₯΄λ‹€! get() λ©”μ„œλ“œλŠ” μ œκ³΅ν•˜μ§€ μ•ŠλŠ”λ‹€. β†’ 반볡이 ν•„μš”ν•˜λ©΄, Iteratorλ₯Ό μ‚¬μš©ν•˜κ±°λ‚˜, for eachλ₯Ό μ‚¬μš©ν•΄μ•Ό ν•œλ‹€.

    HashMap

    πŸ’‘
    ν‚€(key) : κ°’(value) 쌍으둜 이루어진 μš”μ†Œλ₯Ό λ‹΄λŠ” 자료ꡬ쑰 Key의 쀑볡은 ν—ˆμš©λ˜μ§€ μ•ŠλŠ”λ‹€! 탐색속도가 맀우 λΉ λ₯΄λ‹€.

    HashMap에 μ €μž₯된 값을 ν•˜λ‚˜μ”© μ–»κΈ°

    πŸ’‘
    Map, Set의 탐색은 μˆœμ„œμ˜ 보μž₯이 μ•ˆλœλ‹€. λ‹¨μˆœ κ°’μ˜ μš”μ†Œλ₯Ό 각각 λ°›μ•„μ˜¬ 수 μžˆλŠ” 것. λ”°λΌμ„œ, 맀번 좜λ ₯ 결과의 μˆœμ„œκ°€ λ‹€λ₯΄κ²Œ ν‘œμ‹œλœλ‹€.

    μ»¬λ ‰μ…˜μ˜ μ‘μš©

    μ»¬λ ‰μ…˜ μ•ˆμ— μ»¬λ ‰μ…˜

    Map<String, List<String>>
    List<List<Hero>>
    πŸ’‘
    λ‹¨μˆœ λ‹€ 차원 배열보닀, 차원을 가독성 있게 ν‘œν˜„ν•  수 μžˆλ‹€.

    β—μš”μ†Œμ˜ μ°Έμ‘°

    public class Hero {
        String name;
    }
    import java.util.ArrayList;
    import java.util.List;
    
    public class Main {
    
        public static void main(String[] args) {
            Hero hero = new Hero(); // hero reference type 객체 생성
            hero.name = "홍길동"; // ν•΄λ‹Ή 객체 이름 속성 μ„€μ •
            
            List<Hero> heroList = new ArrayList<>();
            heroList.add(hero); // 리슀트λ₯Ό λ§Œλ“€μ–΄μ„œ hero 객체 μ‚½μž…
            hero.name = "ν•œμ„λ΄‰"; // ν•΄λ‹Ή 객체 속성 κ°’ μˆ˜μ •
            
            System.out.println(heroList.get(0).name);
    				// reference type이기 λ•Œλ¬Έμ— μˆ˜μ •λœ κ°’ 좜λ ₯됨.
        }
    
    }

    πŸ’‘
    Refference Type의 연산에 μ£Όμ˜ν•˜μž

    μ»¬λ ‰μ…˜ 선택


    πŸ“μ—°μŠ΅ 문제

    2-1

    πŸ’‘
    1) Set 2) 상황에 따라 λͺ¨λ‘ κ°€λŠ₯ 3) 상황에 따라 λͺ¨λ‘ κ°€λŠ₯

    2-2

    package Exam03;
    
    public class Person {
        String name;
    }
    package Exam02;
    
    import java.util.ArrayList;
    
    public class Main {
    
        public static void main(String[] args) {
            Person person1 = new Person();
            person1.name = "홍길동";
            
            Person person2 = new Person();
            person2.name = "ν•œμ„λ΄‰";
            
            ArrayList <Person> personList = new ArrayList<>();
            personList.add(person1);
            personList.add(person2);
            
            for(Person person : personList) {
                System.out.println(person.name);
            }
        }
    }

    2-3

    package Exam03;
    
    import java.util.HashMap;
    
    public class Main {
    
        public static void main(String[] args) {
            Person person1 = new Person();
            person1.name = "홍길동";
            
            Person person2 = new Person();
            person2.name = "ν•œμ„λ΄‰";
            
            HashMap<Person, Integer> personHashMap = new HashMap<Person, Integer>();
            personHashMap.put(person1, 20);
            personHashMap.put(person2, 25);
           
            for(Person person : personHashMap.keySet()) {
                int age = personHashMap.get(person);
                System.out.println(person.name + "의 λ‚˜μ΄λŠ” " + age + "μ‚΄");            
            }
        }
    }
    package Exam03;
    
    public class Person {
        String name;
    }


    Uploaded by N2T

    728x90
    λ°˜μ‘ν˜•

    λŒ“κΈ€

Keydi's Tistory