Avatar
๐Ÿ˜‰

Organizations

  • JPA์—์„œ N+1 ๋ฌธ์ œ๋Š” ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ์œ ๋ฐœํ•  ์ˆ˜ ์žˆ๋Š” ๋Œ€ํ‘œ์ ์ธ ORM ์‚ฌ์šฉ ์‹œ์˜ ์ด์Šˆ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ์•„๋ž˜์— ์ž์„ธํžˆ ์„ค๋ช…๋“œ๋ฆด๊ฒŒ์š”.


    N+1 ๋ฌธ์ œ๋ž€?

    N+1 ๋ฌธ์ œ๋Š” JPA์—์„œ ์—ฐ๊ด€๋œ ์—”ํ‹ฐํ‹ฐ๋ฅผ ์ง€์—ฐ ๋กœ๋”ฉ(LAZY loading) ๋ฐฉ์‹์œผ๋กœ ์กฐํšŒํ•  ๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

    ์˜ˆ๋ฅผ ๋“ค์–ด, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ƒํ™ฉ์„ ๊ฐ€์ •ํ•ด ๋ด…์‹œ๋‹ค:

    • ๊ฒŒ์‹œ๊ธ€(Post)๊ณผ ์ž‘์„ฑ์ž(Member)๋Š” ๋‹ค๋Œ€์ผ(N:1) ๊ด€๊ณ„์ด๋‹ค.
    • ๊ฒŒ์‹œ๊ธ€ 1๊ฐœ๋Š” ์ž‘์„ฑ์ž 1๋ช…์„ ๊ฐ€์ง„๋‹ค.
    @Entity
    public class Post {
        @ManyToOne(fetch = FetchType.LAZY)
        private Member author;
    }
    

    ๊ฒŒ์‹œ๊ธ€ ๋ฆฌ์ŠคํŠธ๋ฅผ ์กฐํšŒํ•˜๋Š” ์ฟผ๋ฆฌ๋ฅผ ๋‚ ๋ฆฌ๋ฉด:

    List<Post> posts = postRepository.findAll();
    

    ์ด๋•Œ JPA๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค:

    Created Wed, 23 Apr 2025 20:48:45 +0900
  • stream().mapToInt()๋Š” Java Stream API์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋ฉ”์„œ๋“œ ์ค‘ ํ•˜๋‚˜๋กœ, Stream์˜ ์š”์†Œ๋ฅผ intํ˜• ์ •์ˆ˜๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ IntStream์„ ์ƒ์„ฑํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

    ๐Ÿ’ก ์‚ฌ์šฉ ๋ชฉ์ 

    mapToInt()๋Š” ์ฃผ๋กœ ๊ฐ์ฒด ์ŠคํŠธ๋ฆผ์—์„œ ์ •์ˆ˜๊ฐ’์„ ์ถ”์ถœํ•˜๊ณ ์ž ํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์–ด๋–ค ๊ฐ์ฒด ๋ฆฌ์ŠคํŠธ์—์„œ ํŠน์ • ํ•„๋“œ(์˜ˆ: ๋‚˜์ด, ์ ์ˆ˜ ๋“ฑ)๋ฅผ ์ •์ˆ˜๋กœ ๋ฝ‘์•„๋‚ผ ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.


    ๐Ÿ“Œ ๊ธฐ๋ณธ ๊ตฌ์กฐ

    Stream<T> stream = ...;
    IntStream intStream = stream.mapToInt(element -> ๋ณ€ํ™˜ํ•  int ๊ฐ’);
    

    โœ… ์˜ˆ์‹œ

    List<String> list = List.of("1", "2", "3");
    int sum = list.stream()
                  .mapToInt(Integer::parseInt)  // String โ†’ int
                  .sum();                       // IntStream ์—ฐ์‚ฐ ์‚ฌ์šฉ
    System.out.println(sum); // ์ถœ๋ ฅ: 6
    

    ์œ„ ์ฝ”๋“œ์—์„œ:

    Created Wed, 23 Apr 2025 13:48:45 +0900
  • ๋ฐฐ์—ด

    ์„ ์–ธ

    int[] arr = {0,0,0,0,0,0};
    int[] arr = new int[6];
    
    • ArrayList - ์ €์žฅํ•  ๋ฐ์ดํ„ฐ ๊ฐœ์ˆ˜๋ฅผ ์ •ํ™•ํžˆ ์•Œ ์ˆ˜ ์—†๋‹ค๋ฉด…

    ์ฐจ์›

    • 2์ฐจ์›
    int[][] arr = { {1,2,3}, {4,5,6}};
    

    ArrayList

    • ์ถ”๊ฐ€
    ArrayList<Integer> list = new ArrayList<>();
    list.add(1);
    
    • ์ดˆ๊ธฐํ™”
    ArrayList<Integer> list = new ArrayList<>();
    ArrayList<Integer> list2 = new ArrayList<>(list);
    
    • ์ ‘๊ทผ - get(index)
    • ์‚ญ์ œ - remove()

    • length ๋ณ€์ˆ˜
    • Arrays.sort()
    • toString()
    • size()
    • isEmpty()
    • Collections.sort
    ArrayList<Integer> list = new ArrayList<>(Arrays.asList(1,2,3,4,5));
    Collections.sort(list); // array๋Š” Arrays.sort()
    
    • sort() ์‚ฌ์šฉ์‹œ from ์ธ๋ฑ์Šค, to ์ธ๋ฑ์Šค๋กœ ํŠน์ •๋ฒ”์œ„๋งŒ ์ •๋ ฌ ๊ฐ€๋Šฅ

    ArrayList ํšจ์œจ์„ฑ

    • ์‹œ๊ฐ„ ๋ณต์žก๋„
    • ์ ‘๊ทผ O(1)
    • ๋งจ ๋’ค ์‚ฝ์ž… O(1)
    • ๋งจ ์•ž์ด๋‚˜ ์ค‘๊ฐ„. O(N)
    • ๊ณ ๋ คํ•  ์ 
      • ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ - ์ •์ˆ˜ํ˜• 1์ฐจ์› 1000๋งŒ๊ฐœ, 2์ฐจ์›์€ 3000*3000 ์ •๋„
      • ์ค‘๊ฐ„์— ๋ฐ์ดํ„ฐ ์‚ฝ์ž…์ด ๋นˆ๋ฒˆํ•œ ๊ฒฝ์šฐ ์‹œ๊ฐ„ ์ดˆ๊ณผํ•  ์ˆ˜ ์žˆ์Œ.

    ๋ชธํ’€๊ธฐ ๋ฌธ์ œ

    ์ •๋ ฌ

    • Arrays.sort() -> Dual-Pivot QuickSort ํ˜น์€ Tim-Sort : ์„ฑ๋Šฅ์ข‹์œผ๋‹ˆ๊นŒ ๊ทธ๋ƒฅ ์“ฐ์ž
    // bubble sort ์˜ˆ
    private static int[] bubbleSort(int[] org) {
        int[] arr = org.clone();
        int n = arr.length;
        for(int i=0; i< n; i++) {
            for(int j=0; j<n-i-1; j++) {
                if(arr[j] > arr[j+1]) {
                    int temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                }
            }
        }
    }
    
    • ์›๋ณธ์„ ๊ทธ๋Œ€๋กœ ๋‘๊ณ  ์‹ถ์œผ๋ฉด
    int[] clone = arr.clone();
    

    ๋ฐฐ์—ด ์ œ์–ดํ•˜๊ธฐ

    • ์ค‘๋ณต ์ œ๊ฑฐ
    Integer[] result = Arrays.stream(arr).boxed().distinct().toArray(Integer[]::new);
    
    Arrays.sort(result, Collections.reverseOrder()); 
    
    Arrays.stream(result).mapToInt(Integer::intValue).toArray(); // int[]๋กœ
    
    • ๊ฐ€๊ธ‰์  ํ‘œ์ค€ API๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์‹œ๊ฐ„์ดˆ๊ณผ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋„๋ก
    TreeSet<Integer> set = new TreeSet<>(Collections.reverseOrder());
    int[] result = new int[set.size()];
    for(int i = 0; i < result.length; i++) {
        result[i] = set.pollFirst();
    } 
    // ์ค‘๋ณต์ œ๊ฑฐ O(N), ์ •๋ ฌ O(NlogN) => O(NlogN)
    
    Created Tue, 22 Apr 2025 20:48:45 +0900
  • ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ ํ•ฉ๊ฒฉ์ž ๋˜๊ธฐ ์ •๋ฆฌ #1

    ์‚ฌ์ „ ์ค€๋น„

    • ๋ถ„์„ ๋จผ์ €
    • ์˜ˆ์™ธ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค
    • ๊ธฐ๋ก - ๋ชปํ‘ผ๊ฒƒ๋„ ๊ธฐ๋ก์€ ํ•ด๋‘์ž
    • ๋‚˜๋งŒ์˜ ์–ธ์–ด๋กœ ์š”์•ฝ

    ๋ฌธ์ œ ๋ถ„์„

    • ๋ฌธ์ œ๋ฅผ ์ชผ๊ฐœ์„œ ๋ถ„์„
    • ์ œ์•ฝ์‚ฌํ•ญ๊ณผ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค
    • ์ž…๋ ฅ๊ฐ’ ๋ถ„์„ํ•˜๊ณ  ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ค์ •
    • greedy, ์™„์ „ ํƒ์ƒ‰ ๋ญ˜๋กœ ํ• ์ง€
    • ๋ฐ์ดํ„ฐ ํ๋ฆ„๊ณผ ๊ตฌ์„ฑ ํŒŒ์•…
    • ์˜์‚ฌ ์ฝ”๋“œ๋กœ ์„ค๊ณ„

    ์ฑ„์ ๊ธฐ์ค€

    • ์ •ํ™•์„ฑ ํ…Œ์ŠคํŠธ
    • ํšจ์œจ์„ฑ ํ…Œ์ŠคํŠธ

    ์‹œ๊ฐ„๋ณต์žก๋„

    • O(N) ํ—ˆ์šฉ ์—ฐ์‚ฐ ํšŸ์ˆ˜๋Š” 2000๋งŒ
    • ์ดˆ๋‹น ์—ฐ์‚ฐ ์ตœ๋Œ€ ํšŸ์ˆ˜๋Š” 1์–ต๋ฒˆ, ์ œํ•œ์‹œ๊ฐ„์ด 1์ดˆ๋ฉด ์—ฐ์‚ฐ ํšŸ์ˆ˜๊ฐ€ 3000๋งŒ์ด ์•ˆ๋„˜๋„๋ก
    • ์ง€์ˆ˜ํ•จ์ˆ˜, ๋‹คํ•ญํ•จ์ˆ˜, ๋กœ๊ทธํ•จ์ˆ˜
    • ์ž…๋ ฅ ํฌ๊ธฐ์— ๋”ฐ๋ฅธ ์—ฐ์‚ฐ ํšŸ์ˆ˜์˜ ์ถ”์ด๋ฅผ ํ™œ์šฉํ•ด์„œ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ• - ์ ๊ทผ์  ํ‘œ๊ธฐ๋ฒ•
    • ํŠน์ •๊ฐ’์„ ๊ณ„์† ๋ฐ˜์œผ๋กœ ์ค„์ด๋Š” ๋™์ž‘์„ ํ•œ๋‹ค๋ฉด O(logN)

    ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ ํ•„์ˆ˜ ๋ฌธ๋ฒ•

    ํ”„๋ฆฌ๋ฏธํ‹ฐ๋ธŒ ํƒ€์ž… / ๋ ˆํผ๋Ÿฐ์Šค ํƒ€์ž…

    • int, long, float, double
    • Integer, Long, Float, Double - ์—ฐ์‚ฐ ์†๋„๋Š” ๋А๋ฆผ
    • ์—ก์‹ค๋ก  epsilon - ๋ถ€๋™์†Œ์ˆ˜ํ˜• ๋ฐ์ดํ„ฐ๋ฅผ ์ด์ง„๋ฒ•์œผ๋กœ ํ‘œํ˜„ํ•ด์„œ ์ƒ๊ธฐ๋Š” ์˜ค์ฐจ
    • ๋น„ํŠธ์—ฐ์‚ฐ
    &, |, ^ XOR, ~ NOT, <<, >>
    
    • ๋…ผ๋ฆฌ์—ฐ์‚ฐ
    &&, ||, !(x>y)
    

    ์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„์›Œํฌ

    ๋ฐฐ์—ด

    • ์—ฐ์†๋œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„
    • ์ƒ์„ฑ์ดํ›„ ํฌ๊ธฐ ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€, ์ƒˆ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…,์‚ญ์ œ ๋ถˆ๊ฐ€. ๋ณ€๊ฒฝ๋งŒ ๊ฐ€๋Šฅ
    • index๋กœ ์š”์†Œ ์ ‘๊ทผ - index๋ฅผ ์•Œ๊ณ  ์žˆ๋‹ค๋ฉด ์ ‘๊ทผ,๋ณ€๊ฒฝ์€ O(1)
    int[] array = {1,2,3,4,5};
    int[] array2 = new int[]{1,3,5,7,9};
    int[] array3 = new int[5];
    

    ๋ฆฌ์ŠคํŠธ ArrayList (์‚ฌ์‹ค LinkedList ๋„ ์žˆ์Œ)

    • ๊ฐ€๋ณ€ ํฌ๊ธฐ
    • ๋งจ ๋’ค ์ถ”๊ฐ€์‹œ O(1), ์‚ญ์ œ๋‚˜ ์ค‘๊ฐ„ ์‚ฝ์ž…์€ O(N)

    ํ•ด์‹œ๋งต hashmap

    • key, value
    // Integer = 32bit = 4byte
    HashMap<String, Integer> map = new HashMap<>();
    
    // ์‚ฝ์ž… 
    map.put("apple", 1);
    
    // ๊ฒ€์ƒ‰
    if(map.containsKey(key)) { ... }
    
    map.get(key);
    
    // ์‚ญ์ œ
    map.remove(key);
    

    ๋ฌธ์ž์—ด

    • immutable ๊ฐ์ฒด - ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋Š” ๊ฐ์ฒด, ์‹œ๊ฐ„ ๋ณต์žก๋„ ๊ด€์ ์—์„œ๋„ ์ฃผ์˜
    • ์ถ”๊ฐ€, ์‚ญ์ œ์‹œ ๊ธฐ์กด ๊ฐ์ฒด๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
    • ์ˆ˜์ •
    .replace("a", "");
    

    StringBuffer, StringBuilder

    Sytem.out.println(System.identityHashCode(s));
    
    long start = System.currentTimeMillis();
    StringBuilder s = new StringBuilder();
    for(int i=0; i<=100_000; i++) {
        s.append(i);
    } 
    long end = System.currentTimeMillis();
    System.out.println(((end-start)/1000.0) + "์ดˆ"); 
    
    • ์ฐจ์ด StringBuffer ๋Š” Thread-Safe (์ฝ”๋”ฉํ…Œ์ŠคํŠธ์—์„œ๋Š” ๊ฑฐ์˜ ์•ˆ์”€)
    • ์†๋„๋ฉด์—์„œ StringBuilder ๊ฐ€ ์กฐ๊ธˆ ๋” ๋น ๋ฆ„(์ฝ”๋”ฉํ…Œ์Šคํฌ ๊ธฐ์ค€ ๊ถŒ์žฅ)
    sb.deleteCharAt(index)
    sb.insert(index, ๋ฌธ์ž);
    

    Stack

    Queue

    ArrayDeque (๋ฑ ํ˜น์€ ๋ฐํฌ ๋ผ๊ณ  ์ฝ์Œ)

    • ์–‘๋ฐฉํ–ฅ queue, ์ฆ‰ ์•ž์ชฝ, ๋’ค์ชฝ์—์„œ pop ๊ฐ€๋Šฅ

    ๋ฉ”์„œ๋“œ

    • ๋žŒ๋‹ค์‹ / ์ต๋ช…ํ•จ์ˆ˜ - ํ•œ๋ฒˆ๋งŒ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ํ•จ์ˆ˜์ž์ฒด๋ฅผ ๋‹ค๋ฅธ ํ•จ์ˆ˜์˜ ์ธ์ž๋กœ ์ „๋‹ฌ(๊ณ ์ฐจํ•จ์ˆ˜)
    Node[] nodes = new Node[5];
    Arrays.sort(nodes, (o1,o2) -> Integer.compare(o1.cost, o2.cost));
    
    
    Arrays.sort(nodes, new Comparator<Node>() {
        @Override
        public int compare(Node o1, Node o2) {
            return Integer.compare(o1.cost, o2.cost);
        } 
    }
    
    • Integer.compare(int x, int y) ๋Š” x<y๋ฉด -1, x>y๋ฉด 1, x=y๋ฉด 0

    ์ฝ”๋“œ ๊ตฌํ˜„ ๋…ธํ•˜์šฐ

    • ์กฐ๊ธฐ ๋ฐ˜ํ™˜
    • ๋ณดํ˜ธ ๊ตฌ๋ฌธ
    List<Integer> numbers
    ...
    int total = numbers.stream().mapToInt(i->i).sum();
    
    • ์ œ๋„ค๋ฆญ
    List<Integer> genericList = new ArrayList<>();
    // ๋นŒ๋“œ ๋ ˆ๋ฒจ์—์„œ ํƒ€์ž…์ฒดํฌํ•˜์—ฌ ํƒ€์ž… ๊ฐ•์ œ
    
    Created Tue, 22 Apr 2025 17:48:45 +0900
  • ReentrantLock์€ Java์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ณ ๊ธ‰ ๋™๊ธฐํ™” ๋„๊ตฌ๋กœ, synchronized ๋ธ”๋ก๋ณด๋‹ค ๋” ๋งŽ์€ ์ œ์–ด๋ฅผ ์ œ๊ณตํ•˜๋Š” Lock ์ธํ„ฐํŽ˜์ด์Šค์˜ ๊ตฌํ˜„์ฒด์ž…๋‹ˆ๋‹ค.


    ๐Ÿ” ReentrantLock์ด๋ž€?

    • Java์˜ java.util.concurrent.locks.ReentrantLock ํด๋ž˜์Šค
    • ์žฌ์ง„์ž… ๊ฐ€๋Šฅ(reentrant) ํ•œ ๋ฝ
      โ†’ ๊ฐ™์€ ์Šค๋ ˆ๋“œ๊ฐ€ ์—ฌ๋Ÿฌ ๋ฒˆ lock์„ ํš๋“ํ•ด๋„ deadlock ์—†์ด ๋™์ž‘
    • synchronized์™€ ์œ ์‚ฌํ•˜์ง€๋งŒ ๋” ์„ธ๋ฐ€ํ•œ ์ปจํŠธ๋กค ๊ฐ€๋Šฅ

    ๐Ÿ”ธ ๊ธฐ๋ณธ ์‚ฌ์šฉ ์˜ˆ์ œ

    import java.util.concurrent.locks.ReentrantLock;
    
    public class Counter {
        private int count = 0;
        private final ReentrantLock lock = new ReentrantLock();
    
        public void increment() {
            lock.lock(); // ๐Ÿ” lock ํš๋“
            try {
                count++;
            } finally {
                lock.unlock(); // ๐Ÿ”“ ๊ผญ ํ•ด์ œํ•ด์ค˜์•ผ ํ•จ!
            }
        }
    
        public int getCount() {
            return count;
        }
    }
    

    โš ๏ธ finally ๋ธ”๋ก์—์„œ unlock()์„ ๊ผญ ํ˜ธ์ถœํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•ด๋„ ๋ฝ์ด ํ’€๋ฆฌ์ง€ ์•Š์œผ๋ฉด ๋ฐ๋“œ๋ฝ(deadlock) ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์–ด์š”.

    Created Sun, 20 Apr 2025 18:15:45 +0900
  • HashMap๊ณผ LinkedHashMap์€ ๋‘˜ ๋‹ค Java์—์„œ ์ œ๊ณตํ•˜๋Š” Map ์ธํ„ฐํŽ˜์ด์Šค์˜ ๊ตฌํ˜„์ฒด์ด์ง€๋งŒ, ๋™์ž‘ ๋ฐฉ์‹๊ณผ ํŠน์ง•์— ๋ช‡ ๊ฐ€์ง€ ์ค‘์š”ํ•œ ์ฐจ์ด์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค:


    ๐Ÿ”น 1. ์ €์žฅ ์ˆœ์„œ ์œ ์ง€ ์—ฌ๋ถ€

    ํŠน์ง• HashMap LinkedHashMap
    ์ˆœ์„œ ์œ ์ง€ โŒ ์ €์žฅ ์ˆœ์„œ ๋ณด์žฅ ์•ˆ ๋จ โœ… ์ž…๋ ฅ ์ˆœ์„œ(๋˜๋Š” ์ ‘๊ทผ ์ˆœ์„œ) ์œ ์ง€
    • HashMap์€ ๋‚ด๋ถ€์ ์œผ๋กœ ์ˆœ์„œ๋ฅผ ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—, ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…ํ•œ ์ˆœ์„œ์™€ ๊บผ๋‚ผ ๋•Œ ์ˆœ์„œ๊ฐ€ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Œ.
    • LinkedHashMap์€ ์ด์ค‘ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•œ ์ˆœ์„œ๋ฅผ ๊ธฐ์–ตํ•จ.

    ๐Ÿ”น 2. ์„ฑ๋Šฅ

    ์„ฑ๋Šฅ HashMap LinkedHashMap
    ์ผ๋ฐ˜์ ์œผ๋กœ ๋” ๋น ๋ฆ„ โœ… โŒ (์กฐ๊ธˆ ๋А๋ฆผ)
    • LinkedHashMap์€ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋ฅผ ์œ ์ง€ํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์•ฝ๊ฐ„์˜ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์žˆ์Œ.

    ๐Ÿ”น 3. null ํ—ˆ์šฉ ์—ฌ๋ถ€

    ์š”์†Œ HashMap LinkedHashMap
    null ํ‚ค ํ—ˆ์šฉ 1๊ฐœ ๊ฐ€๋Šฅ 1๊ฐœ ๊ฐ€๋Šฅ
    null ๊ฐ’ ํ—ˆ์šฉ ์—ฌ๋Ÿฌ ๊ฐœ ๊ฐ€๋Šฅ ์—ฌ๋Ÿฌ ๊ฐœ ๊ฐ€๋Šฅ

    ๋‘˜ ๋‹ค null ํ‚ค ํ•˜๋‚˜์™€ null ๊ฐ’ ์—ฌ๋Ÿฌ ๊ฐœ ํ—ˆ์šฉํ•จ.

    Created Sun, 20 Apr 2025 11:15:45 +0900