JAVA

#17 [Java] ArrayList Class, Generic, try-catch, Buffer, .size()

dP fla 2022. 10. 27. 14:50

๐Ÿ“ŒArrayList Class

: ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด 0๋ฒˆ ์ธ๋ฑ์Šค์œ„์น˜๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ ์š”์†Œ๊ฐ€ ์ถ”๊ฐ€๋˜๋Š” ํ˜•ํƒœ
๐Ÿ’ก ์ˆœ์ฐจ์ ์ธ ์ ‘๊ทผ์ด๋‚˜ ๋’ค์—์„œ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•  ๋•Œ ํšจ๊ณผ์ 

์š”์†Œ ํ•˜๋‚˜ ์ถ”๊ฐ€์‹œ,

ArrayList<String> array1 = new ArrayList<String>();
array1.add("A");
Index 0
A


์š”์†Œ ํ•˜๋‚˜ ๋” ์ถ”๊ฐ€ ์‹œ,

array1.add("B");
Index 0 Index 1
A B


๋‹ค์Œ๊ณผ ๊ฐ™์€ ArrayList์š”์†Œ์—์„œ 2๋ฒˆ ์ธ๋ฑ์Šค๋ฅผ ์‚ญ์ œํ•˜๋ คํ•  ๋•Œ,

Index 0 Index 1 Index 2 Index 3
A B C D
array1.remove(2);

2๋ฒˆ ์ธ๋ฑ์Šค๊ฐ€ ์‚ญ์ œ๋˜๋ฉฐ ๋’ค์— ์žˆ๋˜ ์š”์†Œ๋“ค์ด ํ•œ์นธ์”ฉ ์›€์ง์ด๋Š” ๋ฒˆ๊ฑฐ๋กœ์›€์ด ์ƒ๊ธฐ๋ฏ€๋กœ
ArrayList์—์„œ ์ค‘๊ฐ„์— ์กด์žฌํ•˜๋Š” ์š”์†Œ๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ์ž‘์—…์€ ์„ฑ๋Šฅ์ƒ ์ข‹์ง€ ์•Š์Œ (์ถ”๊ฐ€ํ•  ๋•Œ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€)
-> ์ด๋Ÿด๋• ArrayList๋Œ€์‹  LinkedList๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ํšจ๊ณผ์ ์ด๋‹ค

 

๐Ÿ“Œ Generic

: ํด๋ž˜์Šค ๋‚ด๋ถ€์—์„œ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ์™ธ๋ถ€์—์„œ ์‚ฌ์šฉ์ž์— ์˜ํ•ด ์ง€์ •๋˜๋Š” ๊ฒƒ์„ ์˜๋ฏธ
ํŠน์ • ํƒ€์ž…์„ ๋ฏธ๋ฆฌ ์ง€์ •ํ•ด์ฃผ๋Š” ๊ฒƒ์ด ์•„๋‹Œ ํ•„์š”์— ์˜ํ•ด ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ์ผ๋ฐ˜ํƒ€์ž…
ํด๋ž˜์Šค/์ธํ„ฐํŽ˜์ด์Šค/๋ฉ”์„œ๋“œ ๋“ฑ์˜ ํƒ€์ž…์„ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ์—ญํ• 

์ œ๋„ค๋ฆญ ์„ ์–ธ ๋ฐฉ๋ฒ•:

ArrayList<Integer> list1 = new ArrayList<Integer>();
ArrayList<String> list2 = new ArrayList<Integer>();
 
LinkedList<Double> list3 = new LinkedList<Double>():
LinkedList<Character> list4 = new LinkedList<Character>();

 


๐Ÿ’ก ์ œ๋„ค๋ฆญ ์‚ฌ์šฉ ์˜ˆ์‹œ:
๐Ÿ’ป ์ผ๋ฐ˜ ์ฝ”๋“œ

public static void main(String[] args) {
    List numbers = Arrays.asList(1, 2, 3, 4, 5, 6);
    int sum = 0;
    for (Object number : numbers) {
        sum += (int) number;
    }
}

๐Ÿ’ป ์ œ๋„ค๋ฆญ ์‚ฌ์šฉ ์ฝ”๋“œ

public static void main(String[] args) {
    List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6);
    int sum = 0;
    for (Integer number : numbers) {
        sum += number;
    }
}

๐Ÿ‘‰ ์ œ๋„ค๋ฆญ ๊ธฐ๋Šฅ์„ ์ด์šฉํ•ด์„œ ์ปฌ๋ ‰์…˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ์ปฌ๋ ‰์…˜ ์ƒ์„ฑ์‹œ ์ง€์ •ํ•œ ํƒ€์ž…์œผ๋กœ๋งŒ ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Œ
๋งŒ์•ฝ, <String>์ธ๋ฐ Integer๊ฐ’์„ ๋„ฃ์„ ๊ฒฝ์šฐ ์˜ค๋ฅ˜ ๋ฐœ์ƒ

 

๐Ÿ“Œ ์˜ˆ์™ธ์ฒ˜๋ฆฌ

e.printStackTrace( ) : ์—๋Ÿฌ๋ฅผ ์ถ”์ ํ•ด์คŒ(์ถœ๋ ฅ)
์ฃผ๋กœ ๊ฐœ๋ฐœ๋‹จ๊ณ„์—์„œ ์–ด๋–ค ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋Š”์ง€ ํ™•์ผํ•  ๋•Œ์— ์‚ฌ์šฉํ•˜๊ณ  ๊ฐœ๋ฐœ์ด ๋๋‚˜๋ฉด ๋น„ํ™œ์„ฑํ™”ํ•ด์•ผํ•จ

๐Ÿ’ก ์‹คํ–‰ ์˜ˆ์™ธ (RuntimeException)
: ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด JVM์€ ํ•ด๋‹นํ•˜๋Š” ์‹คํ–‰ ์˜ˆ์™ธ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ
์‹คํ–‰ ์˜ˆ์™ธ๋Š” ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜์ง€ ์•Š์Œ -> ๊ฐœ๋ฐœ์ž๊ฐ€ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ์ฝ”๋“œ์˜ ์ถ”๊ฐ€ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •

์‹คํ–‰ ์˜ˆ์™ธ ์ด์œ 
ArithmeticException 0์œผ๋กœ ๋‚˜๋ˆ„๊ธฐ์™€ ๊ฐ™์€ ๋ถ€์ ์ ˆํ•œ ์‚ฐ์ˆ  ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•  ๋•Œ ๋ฐœ์ƒ
IllegalArgumentException ๋ฉ”์„œ๋“œ์— ๋ถ€์ ์ ˆํ•œ ์ธ์ˆ˜๋ฅผ ์ „๋‹ฌํ•  ๋•Œ ๋ฐœ์ƒ
IndexOutOfBoundsException ๋ฐฐ์—ด, ๋ฒกํ„ฐ ๋“ฑ์—์„œ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚œ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๋ฐœ์ƒ
NoSuchElementException ์š”๊ตฌํ•œ ์›์†Œ๊ฐ€ ์—†์„ ๋•Œ ๋ฐœ์ƒ
NullPointerException null ๊ฐ’์„ ๊ฐ€์ง„ ์ฐธ์กฐ ๋ณ€์ˆ˜์— ์ ‘๊ทผํ•  ๋•Œ ๋ฐœ์ƒ
NumberFormatException ์ˆซ์ž๋กœ ๋ฐ”๊ฟ€ ์ˆ˜ ์—†๋Š” ๋ฌธ์ž์—ด์„ ์ˆซ์ž๋กœ ๋ณ€ํ™˜ํ•˜๋ ค ํ•  ๋•Œ ๋ฐœ์ƒ

๐Ÿ’ก ์ผ๋ฐ˜ ์˜ˆ์™ธ
: ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ์„ ๋ฐœ๊ฒฌํ•˜๋ฉด ์ปดํŒŒ์ผ ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ
๊ฐœ๋ฐœ์ž๋Š” ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ์ฝ”๋“œ๋ฅผ ๋ฐ˜๋“œ์‹œ ์ถ”๊ฐ€ํ•ด์•ผํ•จ

์ผ๋ฐ˜ ์˜ˆ์™ธ ์ด์œ 
ClassNotFoundException ์กด์žฌํ•˜์ง€ ์•Š๋Š” ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•  ๋•Œ ๋ฐœ์ƒ
InterruptedException ์ธํ„ฐ๋ŸฝํŠธ ๋˜์—ˆ์„ ๋•Œ ๋ฐœ์ƒ
NoSuchFieldException ํด๋ž˜์Šค๊ฐ€ ๋ช…์‹œํ•œ ํ•„๋“œ๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š์„ ๋•Œ ๋ฐœ์ƒ
NoSuchMethodException ํด๋ž˜์Šค๊ฐ€ ๋ช…์‹œํ•œ ๋ฉ”์„œ๋“œ๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š์„ ๋•Œ ๋ฐœ์ƒ
IOException ๋ฐ์ดํ„ฐ ์ฝ๊ธฐ ๊ฐ™์€ ์ž…์ถœ๋ ฅ ๋ฌธ์ œ๊ฐ€ ์žˆ์„ ๋•Œ ๋ฐœ์ƒ

๐Ÿ“Œ ๋ฌธ์ž ๊ธฐ๋ฐ˜ ์ŠคํŠธ๋ฆผ

: ๋ฒ„ํผ๋Š” ํ‚ค๋ณด๋“œ์— ์ž…๋ ฅํ•  ๋•Œ๋งˆ๋‹ค ๊ฐ’์„ ์ „๋‹ฌํ•˜๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ ๋ฒ„ํผ์— ์ •ํ•ด์ง„ ์šฉ๋Ÿ‰๋งŒํผ ๋ชจ์•˜๋‹ค๊ฐ€ ์ „๋‹ฌํ•จ
-> Scanner ๋ณด๋‹ค ํšจ์œจ์ ์ž„

๐Ÿ’ก ๋ฒ„ํผ (Buffer)
: ๋ฐ์ดํ„ฐ๋ฅผ ํ•œ ๊ณณ์—์„œ ๋‹ค๋ฅธ ๊ณณ์œผ๋กœ ์ „์†กํ•˜๋Š” ๋™์•ˆ ์ผ์‹œ์ ์œผ๋กœ ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๊ด€ํ•˜๋Š” ์ž„์‹œ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ
-> ์ž…์ถœ๋ ฅ ์†๋„ ํ–ฅ์ƒ์„ ์œ„ํ•ด ๋ฒ„ํผ๋ฅผ ์‚ฌ์šฉํ•จ

๐Ÿ’ก BufferedReader
: ๋ฒ„ํผ๋ฅผ ์ด์šฉํ•œ ์ž…๋ ฅ
Scanner๋กœ ์ž…๋ ฅํ•  ๊ฒฝ์šฐ, Space, Enter๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ธ์‹ํ•˜์—ฌ ์ž…๋ ฅํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€๊ณตํ•˜๊ธฐ๊ฐ€ ์ˆ˜์›”ํ•จ.
ํ•˜์ง€๋งŒ BufferedReader์€ Enter๋งŒ ๊ฒฝ๊ณ„๋กœ ์ธ์‹ํ•˜๊ณ , return ๋˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ String์œผ๋กœ ๊ณ ์ •๋จ

๐Ÿ’ก BufferedWriter
: ๋ฒ„ํผ๋ฅผ ์ด์šฉํ•œ ์ถœ๋ ฅ
System.out.println();๊ณผ ๋™์ผ ๊ธฐ๋Šฅ์„ ํ•˜๋Š” ๋ฉ”์†Œ๋“œ
Scanner ์ฒ˜๋Ÿผ ๋ฐ”๋กœ ์ ์šฉ์ด ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋ฒ„ํผ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ–ˆ๋‹ค๊ฐ€ ๋ฒ„ํผ๊ฐ€ flush๋‚˜ close๊ฐ€ ๋  ๋•Œ ํ•œ๋ฒˆ์— ์ „๋‹ฌ์ด ๋จ
-> ๊ฐ’์˜ ์ถœ๋ ฅ์„ ์œ„ํ•ด flush๋‚˜ close๋ฅผ ๊ผญ ์‚ฌ์šฉํ•ด์ฃผ์–ด์•ผํ•จ
close()๋Š” ๊ธฐ๋Šฅ์„ ์™„์ „ ๋‹ซ์•„๋ฒ„๋ฆฌ๋ฏ€๋กœ ๊ณ„์† ์‚ฌ์šฉํ•˜๋ ค๋ฉด flush()๋ฅผ ํ•ด์ฃผ์–ด์•ผํ•จ
์ค„๋ฐ”๊ฟˆ์ด ํ•„์š”ํ•  ๋•, .newLine(); (์ž๋™ ์ค„๋ฐ”๊ฟˆ์ด ๋˜์ง€ ์•Š์Œ)

default : false(overwite)
true(new/append) (๋‚ด์šฉ์ถ”๊ฐ€)

๐Ÿ“Œ .size()

: ์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„ ์›Œํฌ, ์ž๋ฃŒ๊ตฌ์กฐ์˜ ํฌ๊ธฐ ๊ตฌํ•˜๊ธฐ (ArrayList, Stack, Queue, HashMap ... )

๐Ÿ’ก .length
: ๋ฐฐ์—ด์˜ ๊ธธ์ด (int[], String[], double[] ...)
๐Ÿ’ก .length()
: ๋ฌธ์ž์—ด์˜ ๊ธธ์ด (String, StringBuilder ...)
ex1) ๋ฐฐ์—ด์˜ ๊ธธ์ด ๊ตฌํ•˜๊ธฐ

package test;
public class Test {
	public static void main (String[] args){
    	byte[] array = {1, 2, 3, 4};
        System.out.println("array length = " + array.length);
    }
}
array length = 4

ex2) ๋ฌธ์ž์—ด ๊ธธ์ด ๊ตฌํ•˜๊ธฐ

package test;
public class Test{
	public static void main(String[] args){
    	String str = "Hello World!";
        System.out.println("str length = " + str.length());
    }
}
str length = 12

๐Ÿ“Œ ํ–ฅ์ƒ๋œ for๋ฌธ

:  ๋ฐฐ์—ด๋กœ ๋ชจ๋“  ์š”์†Œ๋ฅผ ์ฐธ์กฐํ•˜๊ธฐ ์œ„ํ•ด ์ƒˆ๋กญ๊ฒŒ ์ถ”๊ฐ€๋œ ๋ฐ˜๋ณต๋ฌธ 

๋ฐฐ์—ด์˜ ๊ธธ์ด๋งŒํผ ๋ฐ˜๋ณตํ•˜๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰

for(ํƒ€์ž… ๋ณ€์ˆ˜์ด๋ฆ„ : ๋ฐฐ์—ด){
๋ฐฐ์—ด์˜ ๊ธธ์ด๋งŒํผ ๋ฐ˜๋ณต์ ์œผ๋กœ ์‹คํ–‰ํ•˜๊ณ ์ž ํ•˜๋Š” ๋ช…๋ น๋ฌธ;
}
๋ฐ˜์‘ํ˜•