Java/๋ฌธ๋ฒ•

[Java ๋ฌธ๋ฒ• ์ด์ •๋ฆฌ] ๋ฐฐ์—ด, ๋ฆฌ์ŠคํŠธ, ๋งต, ์ง‘ํ•ฉ

soowitty 2024. 1. 24. 20:52
๐Ÿ’ก ๋Œ€๋ถ€๋ถ„์˜ ๋‚ด์šฉ์„ ์ ํ”„ ํˆฌ ์ž๋ฐ” ์—์„œ ์ฐธ๊ณ ํ•˜์—ฌ ์ •๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค.

 

๋ฐฐ์—ด

์ž๋ฃŒํ˜• ๋ฐ”๋กœ ์˜†์— [] ๊ธฐํ˜ธ๋ฅผ ๋ถ™์—ฌ์„œ ์ƒ์„ฑํ•œ๋‹ค.

int[] odds = {1,3,5,7,9};
        String[] weeks = {"์›”", "ํ™”", "์ˆ˜", "๋ชฉ", "๊ธˆ", "ํ† ", "์ผ"};
        String[] arr = {"I", "love", "Java"};

 

1. ๋ฐฐ์—ด์˜ ๊ธธ์ด ์„ค์ •

String[] weeks = new String[7];
  • ์ดˆ๊ธฐ๊ฐ’ ์—†์ด ๋ฐฐ์—ด ๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“ค ๋•Œ, ์ˆซ์ž๊ฐ’์„ ๋„ฃ์–ด ๊ธธ์ด๋ฅผ ์ •ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
  • String[] weeks = new String[]; // ๊ธธ์ด์— ๋Œ€ํ•œ ์ˆซ์ž๊ฐ’์ด ์—†์œผ๋ฏ€๋กœ ์ปดํŒŒ์ผ ์˜ค๋ฅ˜ ๋ฐœ์ƒ

2. ๋ฐฐ์—ด์˜ ๊ฐ’์— ์ ‘๊ทผ

String[] weeks = {"์›”", "ํ™”", "์ˆ˜", "๋ชฉ", "๊ธˆ", "ํ† ", "์ผ"};
System.out.println(weeks[3]);   // ๋ชฉ ์ถœ๋ ฅ

 

3. ๋ฐฐ์—ด์˜ ๊ธธ์ด ๊ตฌํ•˜๊ธฐ

String[] weeks = {"์›”", "ํ™”", "์ˆ˜", "๋ชฉ", "๊ธˆ", "ํ† ", "์ผ"};
System.out.println(weeks.length);   // 7 ์ถœ๋ ฅ

 

4. ๋ฐฐ์—ด ์˜ค๋ฅ˜

  • ArrayIndexOutOfBoundsException
    • ๋ฐฐ์—ด์˜ ๋ฒ”์œ„๋ฅผ ๋„˜์–ด์„œ๋ฉด ์ด๋Ÿฐ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
    • ์ž๋ฐ” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด์„œ ๊ฐ€์žฅ ๋งŽ์ด ๋ณด๋Š” ์˜ค๋ฅ˜ ์ค‘ ํ•˜๋‚˜์ด๋‹ค.

๋ฆฌ์ŠคํŠธ

๋ฐฐ์—ด๊ณผ ๋น„์Šทํ•˜์ง€๋งŒ ๋” ํŽธ๋ฆฌํ•œ ๊ธฐ๋Šฅ์ด ๋งŽ์€ ์ž๋ฃŒํ˜•์ด๋‹ค.

 

๋ฐฐ์—ด vs. ๋ฆฌ์ŠคํŠธ

  • ๋ฐฐ์—ด : ํฌ๊ธฐ ๊ณ ์ •. ์ดˆ๊ธฐ ์„ค์ • ํฌ๊ธฐ๋ฅผ ์ดˆ๊ณผํ•˜๋Š” ๊ฐ’์„ ๋‹ด์„ ์ˆ˜ ์—†๋‹ค.
  • ๋ฆฌ์ŠคํŠธ : ํฌ๊ธฐ๊ฐ€ ์ •ํ•ด์ ธ ์žˆ์ง€ ์•Š์Œ. ์›ํ•˜๋Š” ๋งŒํผ ๊ฐ’์„ ๋‹ด์„ ์ˆ˜ ์žˆ๋‹ค.
  • ์ €์žฅํ•  ๊ฐ’์˜ ํฌ๊ธฐ๊ฐ€ ๋ช…ํ™•ํ•˜์ง€ ์•Š์„ ๋•Œ, ๋ฐฐ์—ด์ด ์•„๋‹Œ ๋ฆฌ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค!

ArrayList

๋ฆฌ์ŠคํŠธ ์ž๋ฃŒํ˜•์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค. ์ด ๋ฐ–์—๋„ Vector, LinkedList ๋“ฑ์ด ์žˆ๋‹ค.

ArrayList์˜ ๋ฉ”์„œ๋“œ

import java.util.ArrayList;

public class Sample {
    public static void main(String[] args) {
				ArrayList pitches = new ArrayList();
        pitches.add("123");  // "123" ์ถ”๊ฐ€
        pitches.add("134");  // "134" ์ถ”๊ฐ€
        pitches.add("164");  // "164" ์ถ”๊ฐ€

        for (int i=0; i<pitches.size();i++){
            System.out.println(pitches.get(i));  // i๋ฒˆ์งธ ์š”์†Œ ์ถœ๋ ฅ
        }    
				pitches.remove("123");  // "123" ์‚ญ์ œ
        System.out.println(pitches.contains("123"));  // "123" ํฌํ•จ ์—ฌ๋ถ€ (false)
	}
}
  • add
    • ์š”์†Œ๋ฅผ ์ถ”๊ฐ€
    • ์‚ฌ์šฉ๋ฒ• : ArrayList.add(์š”์†Œ);
  • get
    • ํŠน์ • ์ธ๋ฑ์Šค์˜ ๊ฐ’์„ ์ถ”์ถœ
    • ์‚ฌ์šฉ๋ฒ• : ArrayList.get(index);
  • size
    • ArrayList์˜ ํฌ๊ธฐ(์š”์†Œ์˜ ๊ฐœ์ˆ˜) ๋ฆฌํ„ด
    • ์‚ฌ์šฉ๋ฒ• : ArrayList.size();
  • contains
    • ํŠน์ • ์š”์†Œ์˜ ์กด์žฌ ์—ฌ๋ถ€๋ฅผ boolean์œผ๋กœ ๋ฆฌํ„ด
    • ์‚ฌ์šฉ๋ฒ• : ArrayList.contains(์š”์†Œ);
  • remove

 

์ œ๋„ค๋ฆญ (generics)

์ œ๋„ค๋ฆญ

์ž๋ฃŒํ˜•์„ ์•ˆ์ „ํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“ค์–ด์ฃผ๋Š” ๊ธฐ๋Šฅ์ด๋‹ค.

์ œ๋„ค๋ฆญ์„ ์‚ฌ์šฉํ•˜๋ฉด,

  • ์ž๋ฃŒํ˜•์„ ๊ฐ•์ œ๋กœ ๋ฐ”๊ฟ€ ๋•Œ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋Š” ์บ์ŠคํŒ… ์˜ค๋ฅ˜๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.
  • ํ˜• ๋ณ€ํ™˜๊ณผ ๊ด€๋ จ๋œ ๋ถˆํ•„์š”ํ•œ ์ฝ”๋”ฉ์„ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.
  • ์ž˜๋ชป๋œ ํ˜• ๋ณ€ํ™˜ ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ•˜๋Š” ๋Ÿฐํƒ€์ž„ ์˜ค๋ฅ˜๋ฅผ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.

์‚ฌ์šฉ ์˜ˆ์‹œ

ArrayList<String> pitches = new ArrayList<>();
  • ArrayList์— ๋‹ด์„ ์ˆ˜ ์žˆ๋Š” ์ž๋ฃŒํ˜•์€ String ๋ฟ์ด๋ผ๋Š” ์˜๋ฏธ์ด๋‹ค.
    • ์ œ๋„ค๋ฆญ์Šค๋ฅผ ์ด์šฉํ•˜๋ฉด ์ž๋ฃŒํ˜•์„ ์ข€ ๋” ๋ช…ํ™•ํ•˜๊ฒŒ ์ฒดํฌํ•  ์ˆ˜ ์žˆ๋‹ค.

๋งต

  • ํ‚ค(key)์™€ ๊ฐ’(value)์„ ํ•œ ์Œ์œผ๋กœ ๊ฐ–๋Š” ์ž๋ฃŒํ˜•
  • ๋Œ€์‘ ๊ด€๊ณ„๋ฅผ ์‰ฝ๊ฒŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์คŒ

HashMap

HashMap์€ ๋งต ์ž๋ฃŒํ˜• ์ค‘ ๊ฐ€์žฅ ๊ธฐ๋ณธ์ด๋‹ค. ์ด ๋ฐ–์—๋„ LinkedHashMap, TreeMap ๋“ฑ์ด ์žˆ๋‹ค.

HashMap<String, String> fruitMap = new HashMap<>();
fruitMap.put("apple", "์‚ฌ๊ณผ");     // key, value ์ถ”๊ฐ€
fruitMap.put("banana", "๋ฐ”๋‚˜๋‚˜");
fruitMap.put("grape", "ํฌ๋„");

System.out.println(fruitMap.get("banana")); // "๋ฐ”๋‚˜๋‚˜" ์ถœ๋ ฅ

System.out.println(fruitMap.size());         // 3 ์ถœ๋ ฅ
System.out.println(fruitMap.keySet());       // [banana, apple, grape] ์ถœ๋ ฅ

fruitMap.remove("apple");                   // "apple" ์‚ญ์ œ
System.out.println(fruitMap.containsKey("apple"));  // false ์ถœ๋ ฅ
System.out.println(fruitMap.size());        // 2 ์ถœ๋ ฅ
System.out.println(fruitMap.keySet());      // [banana, grape] ์ถœ๋ ฅ
  • put
    • key์™€ value ์ถ”๊ฐ€
    • ์‚ฌ์šฉ๋ฒ• : HashMap***.put(***key***,***value***);**
  • get
    • ํŠน์ • key์— ํ•ด๋‹นํ•˜๋Š” value๋ฅผ ์–ป์Œ
    • ์‚ฌ์šฉ๋ฒ• : *HashMap***.get(***key***);**
  • containsKey
    • ํŠน์ • key๊ฐ€ ์กด์žฌํ•˜๋Š”์ง€ true / false๋กœ ๋ฆฌํ„ด
    • ์‚ฌ์šฉ๋ฒ• : *HashMap***.containsKey(***key***);**
  • remove
    • ํŠน์ • ํ•ญ๋ชฉ ์‚ญ์ œ
    • ์‚ฌ์šฉ๋ฒ• : *HashMap***.remove(***key***);**
  • size
    • ๋งต์˜ ํฌ๊ธฐ(๋งต ์š”์†Œ์˜ ๊ฐœ์ˆ˜)๋ฅผ ๋ฆฌํ„ด
    • ์‚ฌ์šฉ๋ฒ• : *HashMap***.size();**
  • keySet
    • ๋งต์˜ ๋ชจ๋“  key๋ฅผ ๋ฆฌํ„ด
    • ์‚ฌ์šฉ๋ฒ• : *HashMap***.keySet();**

์ง‘ํ•ฉ

์ง‘ํ•ฉ ์ž๋ฃŒํ˜•์€ ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๊ณ , ์ˆœ์„œ๊ฐ€ ์—†๋‹ค.

์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ํŠน์ง• ๋•Œ๋ฌธ์— ์ž๋ฃŒํ˜•์˜ ์ค‘๋ณต ์ œ๊ฑฐ๋ฅผ ์œ„ํ•œ ํ•„ํ„ฐ ์—ญํ• ๋กœ ์ข…์ข… ์‚ฌ์šฉ๋œ๋‹ค.

HashSet

์ง‘ํ•ฉ ์ž๋ฃŒํ˜•์—๋Š” HashSet, TreeSet, LinkedHashSet ๋“ฑ์ด ์žˆ๋‹ค. ์ด ์ค‘์—์„œ HashSet์„ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค.

๊ต์ง‘ํ•ฉ, ํ•ฉ์ง‘ํ•ฉ, ์ฐจ์ง‘ํ•ฉ ๊ตฌํ•˜๊ธฐ

HashSet<String> s1 = new HashSet<>(Arrays.asList("Java", "Js", "python", "C"));
HashSet<String> s2 = new HashSet<>(Arrays.asList("Js", "python", "C++", "C#"));

/* ๊ต์ง‘ํ•ฉ ๊ตฌํ•˜๊ธฐ */
HashSet<String> intersection = new HashSet<>(s1);   // s1 ๋‚ด์šฉ์ด ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€
intersection.retainAll(s2);
System.out.println(intersection);   // [python, Js] ์ถœ๋ ฅ

/* ํ•ฉ์ง‘ํ•ฉ ๊ตฌํ•˜๊ธฐ */
HashSet<String> union = new HashSet<>(s1);  // s1 ๋‚ด์šฉ์ด ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€
union.addAll(s2);
System.out.println(union);      // [C#, Java, python, C++, C, Js] ์ถœ๋ ฅ

/* ์ฐจ์ง‘ํ•ฉ ๊ตฌํ•˜๊ธฐ */
HashSet<String> substract  = new HashSet<>(s1);  // s1 ๋‚ด์šฉ์ด ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€
substract.removeAll(s2);
System.out.println(substract ); // [Java, C] ์ถœ๋ ฅ
  • retainAll
    • ๊ต์ง‘ํ•ฉ ๋ฉ”์„œ๋“œ
  • addAll
    • ํ•ฉ์ง‘ํ•ฉ ๋ฉ”์„œ๋“œ
  • removeAll
    • ์ฐจ์ง‘ํ•ฉ ๋ฉ”์„œ๋“œ

์ง‘ํ•ฉ ์ž๋ฃŒํ˜•๊ณผ ๊ด€๋ จ๋œ ๋ฉ”์„œ๋“œ

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

set.add("Jump");  // "jump" ์ถ”๊ฐ€
set.addAll(Arrays.asList("To", "Java")); // "To", "Java" ์ถ”๊ฐ€
System.out.println(set);  // [Java, To, Jump] ์ถœ๋ ฅ

set.remove("Java"); // "java" ์ถ”๊ฐ€
System.out.println(set);  // [To, Jump] ์ถœ๋ ฅ
  • add
    • ๊ฐ’์„ ์ถ”๊ฐ€
    • ์‚ฌ์šฉ๋ฒ• : *HashSet***.add(***์š”์†Œ***);**
  • addAll
    • ๊ฐ’์„ ํ•œ๊บผ๋ฒˆ์— ์—ฌ๋Ÿฌ ๊ฐœ ์ถ”๊ฐ€
    • ์‚ฌ์šฉ๋ฒ• : *HashSet***.addAll(Arrays.asList(***์š”์†Œ1,์š”์†Œ2,์š”์†Œ3***));**
  • remove
    • ๊ฐ’์„ ์ œ๊ฑฐ
    • ์‚ฌ์šฉ๋ฒ• : *HashSet***.remove(***์š”์†Œ***);**