SEB TILπŸ‘

TIL - Enum, Generic, μ˜ˆμ™Έμ²˜λ¦¬,JCK

Jeein0313 2023. 3. 6. 22:51

λ“œλ””μ–΄ μ‘°κΈˆμ”© Java 심화 λ¬Έλ²•μœΌλ‘œ λ“€μ–΄κ°€κ³  μžˆλ‹€! μ—­μ‹œ μƒˆλ‘œμš΄ κ±° λ°°μš°λŠ” κ±Έ 더 μ’‹μ•„ν•˜λŠ” 걸까..γ…‹γ…‹

였늘 배운 λ‚΄μš© μ—­μ‹œ κ°„λ‹¨νžˆ 리뷰해보겠닀! gogo😁

 

❓Enum은 μ–΄λ–€ 클래슀? 

java.lang.Enum 은 μ—¬λŸ¬ μƒμˆ˜λ“€μ„ 보닀 νŽΈλ¦¬ν•˜κ²Œ μ„ μ–Έν•  수 μžˆλ„λ‘ λ§Œλ“€μ–΄μ§„ μžλ°”μ˜ λ¬Έλ²•μš”μ†Œλ‘œ, Enum을 μ΄μš©ν•˜λ©΄ μƒμˆ˜λͺ…μ˜ 쀑볡을 ν”Όν•˜κ³ , νƒ€μž…μ— λŒ€ν•œ μ•ˆμ •μ„±μ„ 보μž₯ν•  수 μžˆλ‹€. λ˜ν•œ, switch λ¬Έμ—μ„œλ„ μž‘λ™μ΄ κ°€λŠ₯ν•˜λ‹€.

enum Seasons{
    SPRING,
    SUMMER,
    FALL,
    WINTER
}

 

 

 

❓Genericμ΄λž€?

ν΄λž˜μŠ€λ‚˜ λ©”μ„œλ“œμ˜ μ½”λ“œλ₯Ό μž‘μ„±ν•  λ•Œ νƒ€μž…μ„ ꡬ체적으둜 μ§€μ •ν•˜λŠ” 것이 μ•„λ‹ˆλΌ, 좔후에 μ§€μ •ν•  수 μžˆλ„λ‘ μΌλ°˜ν™”ν•΄λ‘λŠ” 것. 즉, μž‘μ„±ν•œ 클래슀 λ˜λŠ” λ©”μ„œλ“œμ˜ μ½”λ“œκ°€ νŠΉμ • 데이터 νƒ€μž…μ— 얽맀이지 μ•Šκ²Œ ν•΄λ‘” 것.

class Basket1<T>{//T : νƒ€μž… λ§€κ°œλ³€μˆ˜
    private T item;

    public Basket1(final T item) {
        this.item = item;
    }

    public T getItem() {
        return this.item;
    }

    public void setItem(final T item) {
        this.item = item;
    }
}

class Basket2<K,V>{
    private K item1;
    private V item2;

    public Basket2(final K item1, final V item2) {
        this.item1 = item1;
        this.item2 = item2;
    }
}

 

 

 

β“μ™€μΌλ“œ μΉ΄λ“œλž€?

μ–΄λ– ν•œ νƒ€μž…μœΌλ‘œλ“  λŒ€μ²΄λ  수 μžˆλŠ” νƒ€μž… νŒŒλΌλ―Έν„°λ₯Ό μ˜λ―Έν•˜λ©°, 기호 ? 둜 μ™€μΌλ“œ μΉ΄λ“œλ₯Ό μ‚¬μš©ν•  수 μžˆλ‹€.

일반적으둜 μ™€μΌλ“œ μΉ΄λ“œλŠ” extends와 super ν‚€μ›Œλ“œλ₯Ό μ‘°ν•©ν•΄ μ‚¬μš©ν•œλ‹€.

package codeStates;

class Phone{}
class IPhone extends Phone{}
class Galaxy extends Phone{}

class IPhone12Pro extends IPhone{}
class IPhoneXS extends IPhone{}

class S22 extends Galaxy{}
class ZFlip3 extends Galaxy{}

class User<T>{
    public T phone;
    public User(T phone){
        this.phone = phone;
    }
}

class PhoneFunction{
    public static void call(User<? extends Phone> user){
        System.out.println("-".repeat(60));
        System.out.println("user.phone = "+user.phone.getClass().getSimpleName());
        System.out.println("λͺ¨λ“  Phone은 톡화λ₯Ό ν•  수 μžˆμŠ΅λ‹ˆλ‹€.");
    }
    public static void faceId(User<? extends IPhone> user){
        System.out.println("-".repeat(60));
        System.out.println("user.phone = "+user.phone.getClass().getSimpleName());
        System.out.println("IPhone만 faceIDλ₯Ό ν•  수 μžˆμŠ΅λ‹ˆλ‹€.");
    }
    public static void samsungPay(User<? extends Galaxy> user){
        System.out.println("-".repeat(60));
        System.out.println("user.phone = "+user.phone.getClass().getSimpleName());
        System.out.println("Galaxy만 samsungPayλ₯Ό ν•  수 μžˆμŠ΅λ‹ˆλ‹€.");
    }
    public static void recordVoice(User<? super Galaxy> user) {
        System.out.println("-".repeat(60));
        System.out.println("user.phone = " + user.phone.getClass().getSimpleName());
        System.out.println("μ•ˆλ“œλ‘œμ΄λ“œ ν°μ—μ„œλ§Œ 톡화 λ…ΉμŒμ„ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.");
    }
}

public class WildCardExample {
    public static void main(String[] args) {
        PhoneFunction.call(new User<Phone>(new Phone()));
        PhoneFunction.call(new User<IPhone>(new IPhone()));
        PhoneFunction.call(new User<Galaxy>(new Galaxy()));
        PhoneFunction.call(new User<IPhone12Pro>(new IPhone12Pro()));
        PhoneFunction.call(new User<IPhoneXS>(new IPhoneXS()));
        PhoneFunction.call(new User<S22>(new S22()));
        PhoneFunction.call(new User<ZFlip3>(new ZFlip3()));

        System.out.println("#".repeat(100));

//        PhoneFunction.faceId(new User<Phone>(new Phone())); -> IPhone 상속 λ°›μ§€ μ•ŠμœΌλ―€λ‘œ
        PhoneFunction.faceId(new User<IPhone>(new IPhone()));
//        PhoneFunction.faceId(new User<Galaxy>(new Galaxy())); -> IPhone 상속 λ°›μ§€ μ•ŠμœΌλ―€λ‘œ
        PhoneFunction.faceId(new User<IPhone12Pro>(new IPhone12Pro()));
        PhoneFunction.faceId(new User<IPhoneXS>(new IPhoneXS()));
//        PhoneFunction.faceId(new User<S22>(new S22())); -> IPhone 상속 λ°›μ§€ μ•ŠμœΌλ―€λ‘œ
//        PhoneFunction.faceId(new User<ZFlip3>(new ZFlip3())); -> IPhone 상속 λ°›μ§€ μ•ŠμœΌλ―€λ‘œ

        System.out.println("#".repeat(100));

//        PhoneFunction.samsungPay(new User<Phone>(new Phone())); -> Galaxy 상속받지 μ•ŠμœΌλ―€λ‘œ
//        PhoneFunction.samsungPay(new User<IPhone>(new IPhone()));-> Galaxy 상속받지 μ•ŠμœΌλ―€λ‘œ
        PhoneFunction.samsungPay(new User<Galaxy>(new Galaxy()));
//        PhoneFunction.samsungPay(new User<IPhone12Pro>(new IPhone12Pro()));-> Galaxy 상속받지 μ•ŠμœΌλ―€λ‘œ
//        PhoneFunction.samsungPay(new User<IPhoneXS>(new IPhoneXS()));-> Galaxy 상속받지 μ•ŠμœΌλ―€λ‘œ
        PhoneFunction.samsungPay(new User<S22>(new S22()));
        PhoneFunction.samsungPay(new User<ZFlip3>(new ZFlip3()));

        System.out.println("#".repeat(100));

        PhoneFunction.recordVoice(new User<Phone>(new Phone()));
//        PhoneFunction.recordVoice(new User<IPhone>(new IPhone()));
        PhoneFunction.recordVoice(new User<Galaxy>(new Galaxy()));
//        PhoneFunction.recordVoice(new User<IPhone12Pro>(new IPhone12Pro())); -> Galaxy 및 Galaxy μ‚¬μœ„ ν΄λž˜μŠ€κ°€ μ•„λ‹ˆλ―€λ‘œ
//        PhoneFunction.recordVoice(new User<IPhoneXS>(new IPhoneXS()));
//        PhoneFunction.recordVoice(new User<S22>(new S22()));
//        PhoneFunction.recordVoice(new User<ZFlip3>(new ZFlip3()));

    }
}

 

❓Exception Handling μ΄λž€?

μ˜ˆλŸ¬κ°€ λ°œμƒν•˜μ—¬ ν”„λ‘œκ·Έλž¨μ΄ λΉ„μ •μƒμ μœΌλ‘œ μ’…λ£Œλ˜μ§€ μ•Šλ„λ‘ 미리 λ°œμƒ κ°€λŠ₯ν•œ μ˜ˆμ™Έμ— λŒ€μ‘ν•˜λŠ” μ½”λ“œλ₯Ό μž‘μ„±ν•˜μ—¬ ν”„λ‘œκ·Έλž¨μ˜ 정상적인 μ‹€ν–‰ μƒνƒœλ₯Ό μœ μ§€ν•˜λŠ” 것.

 

 

 

β“μ»΄νŒŒμΌ μ—λŸ¬μ™€ λŸ°νƒ€μž„ μ—λŸ¬λž€?

컴파일 μ—λŸ¬λŠ” 컴파일 ν•  λ•Œ λ°œμƒν•˜λŠ” μ—λŸ¬λ‘œ, μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜κΈ° 전에 IDEκ°€ λΉ¨κ°„ μ€„λ‘œ 잘λͺ»λœ 점을 μ•Œλ €μ€Œ. 주둜 μ„Έλ―Έμ½œλ‘  μƒλž΅, μ˜€νƒˆμž, 잘λͺ»λœ μžλ£Œν˜•, 잘λͺ»λœ 포맷 λ“± 문법적인 문제λ₯Ό κ°€λ¦¬ν‚€λŠ” syntax 였λ₯˜λ‘œλΆ€ν„° λ°œμƒν•˜κΈ° λ•Œλ¬Έμ— syntax error라고도 함.

λŸ°νƒ€μž„ μ—λŸ¬λŠ” ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ 쀑에 λ°œμƒν•˜λŠ” μ—λŸ¬λ‘œ, JVM에 μ˜ν•΄ μ—λŸ¬κ°€ κ°μ§€λœλ‹€. 주둜 κ°œλ°œμžκ°€ 컴퓨터가 μˆ˜ν–‰ν•  수 μ—†λŠ” νŠΉμ •ν•œ μž‘μ—…μ„ μš”μ²­ν•  λ•Œ λ°œμƒν•¨.

 

 

 

β“μ—λŸ¬μ™€ μ˜ˆμ™Έ

μ—λŸ¬λŠ” ν•œλ²ˆ λ°œμƒν•˜λ©΄ λ³΅κ΅¬ν•˜κΈ° μ–΄λ €μš΄ μˆ˜μ€€μ˜ μ‹¬κ°ν•œ 였λ₯˜λ‘œ, λ©”λͺ¨λ¦¬ λΆ€μ‘±κ³Ό μŠ€νƒμ˜€λ²„ν”Œλ‘œμš° 등이 μžˆλ‹€.

μ˜ˆμ™ΈλŠ” 잘λͺ»λœ μ½”λ“œ μ‚¬μš©μœΌλ‘œ μΈν•œ μƒλŒ€μ μœΌλ‘œ λ―Έμ•½ν•œ μˆ˜μ€€μ˜ 였λ₯˜λ‘œμ„œ μ½”λ“œ μˆ˜μ • 등을 톡해 수슡이 κ°€λŠ₯ν•œ 였λ₯˜λ₯Ό λ§ν•œλ‹€.

 

https://nothing-is-on-my-way.tistory.com/31

 

πŸ’™μ˜ˆμ™Έμ²˜λ¦¬, μ˜ˆμ™Έ 클래슀

1οΈβƒ£μ˜ˆμ™Έ, μ˜ˆμ™Έ 클래슀 μ˜ˆμ™Έλž€, 잘λͺ»λœ μ‚¬μš© λ˜λŠ” μ½”λ”©μœΌλ‘œ μΈν•œ 였λ₯˜. μ˜ˆμ™Έμ—λŠ” λ‹€μŒ 2κ°€μ§€κ°€ μžˆλ‹€. - 일반 μ˜ˆμ™Έ(Exception) : μ»΄νŒŒμΌλŸ¬κ°€ μ˜ˆμ™Έ 처리 μ½”λ“œ μ—¬λΆ€λ₯Ό κ²€μ‚¬ν•˜λŠ” μ˜ˆμ™Έ (μ‹€ν–‰ μ˜ˆμ™Έ λ°–μ˜ λͺ¨

nothing-is-on-my-way.tistory.com

 

 

 

β“μΌλ°˜ μ˜ˆμ™Έ ν΄λž˜μŠ€μ™€ μ‹€ν–‰ μ˜ˆμ™Έ ν΄λž˜μŠ€λž€?

일반 μ˜ˆμ™Έ ν΄λž˜μŠ€λŠ” λŸ°νƒ€μž„ μ‹œ λ°œμƒν•˜λŠ” RuntimeException ν΄λž˜μŠ€μ™€ κ·Έ ν•˜μœ„ 클래슀λ₯Ό μ œμ™Έν•œ λͺ¨λ“  Exception ν΄λž˜μŠ€μ™€ κ·Έ ν•˜μœ„ ν΄λž˜μŠ€λ“€μ„ 가리킴. (μ»΄νŒŒμΌλŸ¬κ°€ μ½”λ“œ μ‹€ν–‰ 전에 μ˜ˆμ™Έ 처리 μ½”λ“œ μ—¬λΆ€λ₯Ό 검사함)

μ‹€ν–‰ μ˜ˆμ™Έ ν΄λž˜μŠ€λž€ λŸ°νƒ€μž„ μ‹œ λ°œμƒν•˜λŠ” RuntimeExceptioin ν΄λž˜μŠ€μ™€ κ·Έ ν•˜μœ„ 클래슀. (μ»΄νŒŒμΌλŸ¬κ°€ μ˜ˆμ™Έ 처리 μ½”λ“œ μ—¬λΆ€λ₯Ό κ²€μ‚¬ν•˜μ§€ μ•ŠμŒ.) 주둜 개발자의 μ‹€μˆ˜μ— μ˜ν•΄ λ°œμƒν•˜λŠ” κ²½μš°κ°€ 많고, μžλ°” 문법 μš”μ†Œμ™€ 관련이 μžˆλ‹€. 

 

 

 

 

❓기본적인 try-catch μ˜ˆμ™Έ 처리 예제

package codeStates;

public class ExceptionHandlingExample {
    public static void main(String[] args) {

        try{
            //μ˜ˆμ™Έκ°€ λ°œμƒν•  κ°€λŠ₯성이 μžˆλŠ” μ½”λ“œ μ‚½μž…
            System.out.println("[μ†Œλ¬Έμž μ•ŒνŒŒλ²³μ„ λŒ€λ¬Έμžλ‘œ 좜λ ₯ν•˜λŠ” ν”„λ‘œκ·Έλž¨]");
            printMyName(null);
            printMyName("abc");

        }
        catch(ArithmeticException e){//instanceOf μ—°μ‚°μžλ₯Ό 톡해 μƒμ„±λœ μ˜ˆμ™Έ 클래슀의 μΈμŠ€ν„΄μŠ€κ°€ 쑰건과 μΌμΉ˜ν•˜λŠ”μ§€ νŒλ‹¨
            System.out.println("ArithmeticException λ°œμƒ");
        }
        catch(NullPointerException e){
            System.out.println("NullPointerException λ°œμƒ");
            System.out.println("e.getMessage: " + e.getMessage());
            System.out.println("e.toString: " + e.toString());
            e.printStackTrace();
        }
        finally {
            System.out.println("[ν”„λ‘œκ·Έλž¨ μ’…λ£Œ]");
        }
    }
    static void printMyName(String str){
        String upperCaseAlphabet = str.toUpperCase();
        System.out.println(upperCaseAlphabet);
    }
    
    /*
        [μ†Œλ¬Έμž μ•ŒνŒŒλ²³μ„ λŒ€λ¬Έμžλ‘œ 좜λ ₯ν•˜λŠ” ν”„λ‘œκ·Έλž¨]
        NullPointerException λ°œμƒ
        e.getMessage: null
        e.toString: java.lang.NullPointerException
        [ν”„λ‘œκ·Έλž¨ μ’…λ£Œ]
        java.lang.NullPointerException
            at codeStates.ExceptionHandlingExample.printMyName(ExceptionHandlingExample.java:27)
            at codeStates.ExceptionHandlingExample.main(ExceptionHandlingExample.java:9)
     */
}

 

 

 

❓throws와 throw의 μ°¨μ΄λŠ”?

throwsλŠ” ν˜ΈμΆœν•œ 곳으둜 λ‹€μ‹œ μ˜ˆμ™Έλ₯Ό λ– λ„˜κΈ°λŠ” λ°©λ²•μœΌλ‘œ λ‹€μŒκ³Ό 같이 μ‚¬μš© κ°€λŠ₯ν•˜λ‹€.

public static void main(String[] args) {
        try{
            throwException();
        }catch(ClassNotFoundException e){
            System.out.println(e.getMessage());//java.lang.Strings
        }
    }
    static void throwException() throws ClassNotFoundException, NullPointerException{
        //ν•΄λ‹Ή μ˜ˆμ™Έλ₯Ό λ°œμƒν•œ λ©”μ„œλ“œ μ•ˆμ—μ„œ μ²˜λ¦¬ν•˜μ§€ μ•Šκ³  λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•œ 곳으둜 λ– λ„˜κΉ€.
        Class.forName("java.lang.Strings");
    }
}

throwλŠ” μ˜λ„μ μœΌλ‘œ μ˜ˆμ™Έλ₯Ό λ°œμƒμ‹œν‚¬ λ•Œ μ‚¬μš©ν•˜λŠ” ν‚€μ›Œλ“œλ‘œ, λ‹€μŒκ³Ό 같이 μ‚¬μš© κ°€λŠ₯ν•˜λ‹€.

try{
    Exception intendedException = new Exception("μ˜λ„λœ μ˜ˆμ™Έ");
    throw intendedException;
}catch(Exception e){
    System.out.println("고의둜 μ˜ˆμ™Έ λ°œμƒμ‹œν‚€κΈ° 성곡!");
}

 

 

 

❓Collection Frameworkμ΄λž€?

Java Collection FrameworkλŠ” 데이터λ₯Ό μ €μž₯ν•˜κΈ° μœ„ν•΄ 널리 μ•Œλ €μ Έ μžˆλŠ” 자료ꡬ쑰λ₯Ό λ°”νƒ•μœΌλ‘œ 객체듀을 효율적으둜 μΆ”κ°€, μ‚­μ œ, 검색할 수 μžˆλ„λ‘ μ»¬λ ‰μ…˜μ„ λ§Œλ“€κ³  κ΄€λ ¨λœ μΈν„°νŽ˜μ΄μŠ€μ™€ 클래슀λ₯Ό ν¬ν•¨μ‹œν‚¨ 것.

 

https://nothing-is-on-my-way.tistory.com/25

 

Java - ArrayList, LinkedList

❕ 배열을 μ‚¬μš©ν•  λ•Œ ν”νžˆ λ°œμƒν•˜λŠ” μ—λŸ¬μΈ ArrayIndexOutofBoundsException. 배열을 μ„ μ–Έν•  λ•Œ λ°°μ—΄μ˜ 크기λ₯Ό μ§€μ •ν•˜κΈ° λ•Œλ¬Έμ—, 크기에 λ²—μ–΄λ‚˜λ©΄ μ—λŸ¬ λ°œμƒ. import java.util.Arrays; public class Main{ public static vo

nothing-is-on-my-way.tistory.com

 

πŸ’‘Collection μΈν„°νŽ˜μ΄μŠ€μ˜ μ‚¬μš© κ°€λŠ₯ λ©”μ„œλ“œ

.

 

 

❓List<E> μΈν„°νŽ˜μ΄μŠ€λŠ” μ–΄λ–€ κΈ°λŠ₯을 μ œκ³΅ν•˜λŠ”κ°€?

List μΈν„°νŽ˜μ΄μŠ€λŠ” λ°°μ—΄κ³Ό 같이 객체λ₯Ό 일렬둜 λŠ˜μ–΄λ†“μ€ ꡬ쑰λ₯Ό κ°€μ§€λ©°, 객체λ₯Ό 인덱슀둜 κ΄€λ¦¬ν•˜κΈ° λ•Œλ¬Έμ— 객체λ₯Ό μ €μž₯ν•˜λ©΄ μžλ™μœΌλ‘œ μΈλ±μŠ€κ°€ λΆ€μ—¬λ˜κ³ , 인덱슀둜 객체λ₯Ό 검색, μΆ”κ°€, μ‚­μ œν•  수 μžˆλŠ” λ“±μ˜ μ—¬λŸ¬ κΈ°λŠ₯을 제곡 (κ΅¬ν˜„ 클래슀 : ArrayList, LinkedList, Stack, Vector)

 

πŸ’‘List μΈν„°νŽ˜μ΄μŠ€μ˜ μ‚¬μš© κ°€λŠ₯ λ©”μ„œλ“œ

 

 

 

❓ArrayList ν΄λž˜μŠ€λž€?

List μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•œ 클래슀둜 μ»¬λ ‰μ…˜ ν”„λ ˆμž„μ›Œν¬μ—μ„œ κ°€μž₯ 많이 μ‚¬μš©. ArrayList에 객체λ₯Ό μΆ”κ°€ν•˜λ©΄ 객체가 인덱슀둜 κ΄€λ¦¬λœλ‹€λŠ” μ μ—μ„œλŠ” λ°°μ—΄κ³Ό μœ μ‚¬ν•˜λ‚˜, 배열은 생성될 λ•Œ 크기가 κ³ μ •λ˜λ©°, 크기λ₯Ό λ³€κ²½ν•  수 μ—†λŠ” 반면, ArrayLlistλŠ” μ €μž₯ μš©λŸ‰μ„ μ΄ˆκ³Όν•˜μ—¬ 객체듀이 μΆ”κ°€λ˜λ©΄, μžλ™μœΌλ‘œ μ €μž₯μš©λŸ‰μ΄ λŠ˜μ–΄λ‚œλ‹€λŠ” 차이점이 μžˆλ‹€. 

 

 

 

❓LinkedList ν΄λž˜μŠ€λž€?

LinkedList의 각 μš”μ†Œ(node)듀은 μžμ‹ κ³Ό μ—°κ²°λœ 이전 μš”μ†Œ 및 λ‹€μŒ μš”μ†Œμ˜ μ£Όμ†Œκ°’κ³Ό λ°μ΄ν„°λ‘œ κ΅¬μ„±λ˜μ–΄ μžˆλ‹€. LinkedListμ—μ„œ 데이터λ₯Ό μ‚­μ œν•˜λ €λ©΄ μ‚­μ œν•˜κ³ μž ν•˜λŠ” μš”μ†Œμ˜ 이전 μš”μ†Œκ°€ μ‚­μ œν•˜κ³ μž ν•˜λŠ” μš”μ†Œμ˜ λ‹€μŒ μš”μ†Œλ₯Ό μ°Έμ‘°ν•˜λ„λ‘ λ³€κ²½ν•˜λ©΄ λœλ‹€. λ°°μ—΄μ²˜λŸΌ 데이터λ₯Ό μ΄λ™ν•˜κΈ° μœ„ν•΄ 볡사할 ν•„μš”κ°€ μ—†κΈ° λ•Œλ¬Έμ— 처리 속도가 빠름. 

 

 

 

❓ArrayList와 LinkedList ν΄λž˜μŠ€λŠ” 각각 μ–Έμ œ μ‚¬μš©ν•˜λŠ” 것이 μœ λ¦¬ν•œκ°€?

ArrayListλŠ” 데이터λ₯Ό μ½μ–΄λ“€μ΄λŠ” κ²½μš°λ‚˜, 순차적으둜 μΆ”κ°€ν•˜κ±°λ‚˜ μ‚­μ œν•˜λŠ” 경우 μœ λ¦¬ν•˜λ‹€.

LinkedListλŠ” 데이터λ₯Ό λΉˆλ²ˆν•˜κ²Œ μΆ”κ°€ν•˜κ±°λ‚˜, μ‚­μ œν•˜λŠ” 경우 μœ λ¦¬ν•˜λ‹€.

 

 

 

❓Iterator μΈν„°νŽ˜μ΄μŠ€λž€?

μ»¬λ ‰μ…˜μ— μ €μž₯된 μš”μ†Œλ“€μ„ 순차적으둜 μ½μ–΄μ˜€λŠ” 역할을 함. Iterator의 μ»¬λ ‰μ…˜ 순회 κΈ°λŠ₯은 Iterator μΈν„°νŽ˜μ΄μŠ€μ— μ •μ˜λ˜μ–΄μ Έ 있으며, Collection μΈν„°νŽ˜μ΄μŠ€μ—λŠ” Iterator μΈν„°νŽ˜μ΄μŠ¬ κ΅¬ν˜„ν•œ 클래슀의 μΈμŠ€ν„΄μŠ€λ₯Ό λ°˜ν™˜ν•˜λŠ” λ©”μ„œλ“œμΈ iterator()κ°€ μ •μ˜λ˜μ–΄μ Έ μžˆλ‹€. 즉, Collection μΈν„°νŽ˜μ΄μŠ€μ— μ •μ˜λœ iterator()λ₯Ό ν˜ΈμΆœν•˜λ©΄, Iterator νƒ€μž…μ˜ μΈμŠ€ν„΄μŠ€κ°€ λ°˜ν™˜λœλ‹€.

 

πŸ’‘Iterator μΈν„°νŽ˜μ΄μŠ€μ— μ •μ˜λœ λ©”μ„œλ“œ

 

 

 

❓Set<E> μΈν„°νŽ˜μ΄μŠ€λž€?

μš”μ†Œμ˜ 쀑볡을 ν—ˆμš©ν•˜μ§€ μ•Šκ³ , μ €μž₯ μˆœμ„œλ₯Ό μœ μ§€ν•˜μ§€ μ•ŠλŠ” μ»¬λ ‰μ…˜. (κ΅¬ν˜„ν•œ 클래슀 : HashSet, TreeSet)

 

πŸ’‘Set μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•œ ν΄λž˜μŠ€μ—μ„œ μ‚¬μš© κ°€λŠ₯ν•œ λ©”μ„œλ“œ

 

 

 

❓HashSet클래슀의 νŠΉμ§•μ€?

Set μΈν„°νŽ˜μ΄μŠ€λ₯΄ κ΅¬ν˜„ν•œ κ°€μž₯ λŒ€ν‘œμ μΈ μ»¬λ ‰μ…˜ 클래슀둜, μ€‘λ³΅λœ 값을 ν—ˆμš©ν•˜μ§€ μ•ŠμœΌλ©° μ €μž₯ μˆœμ„œλ₯Ό μœ μ§€ν•˜μ§€ μ•ŠμŒ.

HashSet<String> languages = new HashSet<>();

languages.add("Java");
languages.add("Python");
languages.add("JavaScript");
languages.add("C++");
languages.add("Java");

Iterator it = languages.iterator();
while(it.hasNext()){
  System.out.println(it.next());
}

 

 

 

❓TreeSet클래슀의 νŠΉμ§•μ€?

이진 탐색 트리 ν˜•νƒœλ‘œ 데이터λ₯Ό μ €μž₯. λ°μ΄ν„°μ˜ 쀑볡 μ €μž₯을 ν—ˆμš©ν•˜μ§€ μ•Šκ³ , μ €μž₯ μˆœμ„œλ₯Ό μœ μ§€ν•˜μ§€ μ•Šμ§€λ§Œ,

μžλ™μœΌλ‘œ 사전 편찬 μˆœμ— 따라 μ˜€λ¦„μ°¨μˆœμœΌλ‘œ μ •λ ¬λ˜λŠ” νŠΉμ§•μ΄ μžˆλ‹€.

TreeSet<String> workers = new TreeSet<>();
workers.add("java");
workers.add("apple");
workers.add("spring");
workers.add("cake");
workers.add("java");

System.out.println(workers);//[apple, cake, java, spring]
System.out.println(workers.first());//apple
System.out.println(workers.last());//spring
System.out.println(workers.higher("apple"));//cake
System.out.println(workers.subSet("cake","spring"));//[cake, java]

 

 

 

 

❓Map<K,V> μΈν„°νŽ˜μ΄μŠ€λŠ” μ–΄λ–€ κΈ°λŠ₯을 μ œκ³΅ν•˜λŠ”κ°€?

Key, Value둜 κ΅¬μ„±λœ 객체λ₯Ό μ €μž₯ν•˜λŠ” ꡬ쑰λ₯Ό κ°€μ§€λ©°, 이 객체λ₯Ό Entry 객체라고 ν•˜λŠ”λ° 이 Entry κ°μ²΄λŠ” 킀와 값을 각각 Key 객체와 Value 객체둜 μ €μž₯ν•œλ‹€. ν‚€λŠ” 쀑볡 μ €μž₯될 수 μ—†μ§€λ§Œ, 값은 쀑볡 μ €μž₯이 κ°€λŠ₯ν•˜λ‹€. (κ΅¬ν˜„ 클래슀 : HashMap, HashTable)

 

πŸ’‘Map μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•œ ν΄λž˜μŠ€μ—μ„œ μ‚¬μš© κ°€λŠ₯ν•œ λ©”μ„œλ“œ

 

 

 

❓HashMap은 μ–΄λ–€ ν΄λž˜μŠ€μΈκ°€?

ν•΄μ‹œ ν•¨μˆ˜λ₯Ό 톡해 'ν‚€'와 'κ°’'이 μ €μž₯λ˜λŠ” μœ„μΉ˜λ₯Ό κ²°μ •ν•˜λ―€λ‘œ, μ‚¬μš©μžλŠ” κ·Έ μœ„μΉ˜λ₯Ό μ•Œ 수 μ—†κ³ , μ‚½μž…λ˜λŠ” μˆœμ„œμ™€ μœ„μΉ˜ λ˜ν•œ 관계가 μ—†λ‹€. 

HashMap<String, Integer> map = new HashMap<>();
map.put("ν”ΌμΉ΄μΈ„", 85);
map.put("κΌ¬λΆ€κΈ°", 95);
map.put("μ•Όλ„λž€", 75);
map.put("파이리", 65);
map.put("ν”Όμ‘΄νˆ¬", 15);

System.out.println("총 entry 수 : " + map.size());
System.out.println("파이리 : " + map.get("파이리"));

//μˆœνšŒν•˜κΈ° μœ„ν•΄ ν•„μš”
Set<String> keySet = map.keySet();
Iterator<String> keyIterator = keySet.iterator();
while(keyIterator.hasNext()){
  String key=keyIterator.next();
  Integer value = map.get(key);
  System.out.println(key+":"+value);
}

map.remove("ν”Όμ‘΄νˆ¬");
System.out.println("총 entry 수 : " + map.size());

//μˆœνšŒν•˜κΈ° μœ„ν•΄ ν•„μš”
Set<Map.Entry<String, Integer>> entrySet = map.entrySet();
Iterator<Map.Entry<String, Integer>> entryIterator = entrySet.iterator();
while(entryIterator.hasNext()){
  Map.Entry<String, Integer> entry = entryIterator.next();
  String key= entry.getKey();
  Integer value = entry.getValue();
  System.out.println(key +":"+value);
}

map.clear();

 

 

참고😁)

JCK μ—°μŠ΅λ¬Έμ œ -> https://github.com/jeein2222/codeStates_practice/blob/main/Collections.java

 

GitHub - jeein2222/codeStates_practice: μ—°μŠ΅λ¬Έμ œ 풀이 & μ‹¬ν™”κ³Όμ œ

μ—°μŠ΅λ¬Έμ œ 풀이 & μ‹¬ν™”κ³Όμ œ. Contribute to jeein2222/codeStates_practice development by creating an account on GitHub.

github.com

JCK ν΄λž˜μŠ€λ³„ λ©”μ„œλ“œ 정리 -> https://github.com/jeein2222/codeStates_practice/blob/main/JCKExample.java

 

GitHub - jeein2222/codeStates_practice: μ—°μŠ΅λ¬Έμ œ 풀이 & μ‹¬ν™”κ³Όμ œ

μ—°μŠ΅λ¬Έμ œ 풀이 & μ‹¬ν™”κ³Όμ œ. Contribute to jeein2222/codeStates_practice development by creating an account on GitHub.

github.com