๐๏ธ 2024 ๋ฒํด๋ฆฌ์ฆ Java SpringBoot ์ธํฐ๋ทฐ ์ง๋ฌธ (3)
Finally ๋ธ๋ก์์ ์์ธ๊ฐ ๋ฐ์ํ๋ฉด ์ด๋ป๊ฒ ๋๋์? ์๋ฐ์์, try-catch์์ finally ๋ธ๋ก ๋ด์์ ์์ธ๊ฐ ๋ฐ์ํ ๋์ ๋์์, try-catch ๋ธ๋ก์ ์์ธ ์ฒ๋ฆฌ์ ์ฝ๊ฐ ๋ค๋ฆ ๋๋ค.ย ย [Try-Catch ๋ธ๋ก์ ์์ธ] * ์ ์์ ์ธ ํ๋ก์ฐ๊ฐ ์ค์ง๋ฉ๋๋ค. * ์์ธ ์ ํ๊ณผ ์ผ์นํ๋ catch ๋ธ๋ก์ด ์๋ค๋ฉด, ํด๋น ๋ธ๋ก ๋ด์ ์ฝ๋๊ฐ ์คํ๋ฉ๋๋ค. ์ด๋ฅผ ํตํด ์์ธ๋ฅผ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. * catch ๋ธ๋ก์ด ์๋ฃ๋๊ฑฐ๋ ์ด๋ค catch ๋ธ๋ก๊ณผ๋ ์ผ์นํ์ง ์์ผ๋ฉด finally ๋ธ๋ก์ ์ฝ๋๊ฐ ์คํ๋ฉ๋๋ค. [Finally ๋ธ๋ก์ ์์ธ] * ์๋์ ์์ธ๊ฐ ์ค์ง๋ฉ๋๋ค. ์ด๋ ์๋์ ์์ธ๊ฐ ๋ฉ์๋ ํธ์ถ์์๊ฒ ์ ๋ฌ๋์ง ์๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. * finally ๋ธ๋ก์์ ๋์ง ์์ธ๊ฐ ํธ์ถ์์๊ฒ ์ ํ๋๋ ์๋ก์ด ์์ธ๊ฐ ๋ฉ๋๋ค. [ํค ํฌ์ธํธ] * finally ๋ธ๋ก์ try-catch ๋ธ๋ก์์ ์์ธ๊ฐ ๋ฐ์ํ๋์ง ์ฌ๋ถ์ ๊ด๊ณ์์ด ํญ์ ์คํ๋ฉ๋๋ค. * finally ๋ธ๋ก์ ์์ธ๋ ์๋์ ์์ธ๋ฅผ ์ต์ ํฉ๋๋ค. * finally ๋ธ๋ก์์ ๋์ง ์์ธ๋ ํธ์ถ์๊ฐ ์ฒ๋ฆฌํด์ผ ํ๋ ์๋ก์ด ์์ธ๊ฐ ๋ฉ๋๋ค. [Finally ๋ธ๋ก์ ์ฐ์์] * ๋ฆฌ์์ค(๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ, ํ์ผ ํด๋ก์ง)๋ฅผ ํด์ ํฉ๋๋ค. * ์์ธ์ ๊ด๊ณ์์ด ํญ์ ์ํํด์ผ ํ๋ ์ ๋ฆฌ ์์ ์ ์ฒ๋ฆฌํฉ๋๋ค. ย ์๋ฐ์ ๋ค์ด์๋ชฌ๋ ๋ฌธ์ ๋ ๋ฌด์์ธ๊ฐ์? "๋ค์ด์๋ชฌ๋ ๋ฌธ์ "๋ ์ฌ๋ฌ ์์ ์๋๋ฆฌ์ค์์ ๋ฐ์ํ๋ ํน์ ํ ๋ฌธ์ ๋ฅผ ์๋ฏธํฉ๋๋ค. ํด๋์ค ์์ ๋ค์ด์ด๊ทธ๋จ์ ๊ทธ๋ฆด ๋ ๋ฐ์ํ๋ ๋ค์ด์๋ชฌ๋ ๋ชจ์์์ ์ด๋ฆ์ ๋ฐ์์ต๋๋ค. 1. ์๋ฐ์ ์ ๊ทผ๋ฐฉ์: ์๋ฐ๋ ํด๋์ค์ ๋ค์ค์์์ ์ง์ํ์ง ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์๋ฐ๋ ์ธํฐํ์ด์ค์ ๋ค์ค์์์ ํ์ฉํฉ๋๋ค.ย 2. ์๋ฐ ์ธํฐํ์ด์ค์ ๋ค์ด์๋ชฌ๋ ๋ฌธ์ : ํด๋์ค๊ฐ ๋ ๊ฐ์ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๊ณ ๋ ์ธํฐํ์ด์ค๊ฐ ๋ชจ๋ ๋์ผํ ๋ฉ์๋๋ช ์ ๊ฐ์ง๋ค๋ฉด, ๊ตฌํ ํด๋์ค๋ ๋ชจํธ์ฑ์ ํด๊ฒฐํ๊ธฐ ์ํด ๋ฉ์๋๋ฅผ ์์ฒด์ ์ผ๋ก ๊ตฌํํด์ผ ํฉ๋๋ค. interface InterfaceA { default void display() { System.out.println("Inside InterfaceA"); } } interface InterfaceB { default void display() { System.out.println("Inside InterfaceB"); } } class MyClass implements InterfaceA, InterfaceB { // Here, we must provide our own implementation of display to resolve the ambiguity. @Override public void display() { InterfaceA.super.display(); // calling InterfaceA's default implementation InterfaceB.super.display(); // calling InterfaceB's default implementation } } ์ด๋ป๊ฒ ํด๊ฒฐํ ์ ์์๊น์? 1. ๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋ฉ: ๊ตฌํ ํด๋์ค์์ ์์ ๋ง์ ๊ตฌํ์ ์ ๊ณตํ์ฌ ๋ชจํธํจ์ ํด๊ฒฐํฉ๋๋ค. ์ด ๋ฐฉ์์ ๊ธฐ๋ณธ ๊ตฌํ ์ค ํ๋๋ฅผ ์ ํํ๊ฑฐ๋ ์์ ํ ์๋ก์ด ๊ตฌํ์ ์ ๊ณตํ๊ณ ์ ํ ๋ ์ ํฉํฉ๋๋ค. class MyClass implements InterfaceA, InterfaceB { @Override public void display() { System.out.println("Hello world"); } } 2. ํน์ ์ธํฐํ์ด์ค์ ๋ฉ์๋ ํธ์ถ: ํน์ ํ ์ธํฐํ์ด์ค์ ๋ฉ์๋๋ฅผ ํธ์ถํฉ๋๋ค.ย class MyClass implements InterfaceA, InterfaceB { @Override public void display() { InterfaceA.super.display(); // or InterfaceB.super.display() // Additional logic if needed } } ย Multilevel ์์์ด๋ ๋ฌด์์ธ๊ฐ์? Multilevel ์์์์ A ํด๋์ค๋ B ํด๋์ค๋ฅผ ์์ํ๋ฉฐ, B ํด๋์ค ์ญ์ C ํด๋์ค๋ฅผ ์์ํฉ๋๋ค. ย ์์ ํด๋์ค๋ ๋ถ๋ชจ ํด๋์ค๋ฅผ ํตํด ์กฐ๋ถ๋ชจ ํด๋์ค์์ ๊ฐ์ ์ ์ผ๋ก ์์๋ฉ๋๋ค. ์์ ํด๋์ค๋ ๋ถ๋ชจ ๋ฐ ์กฐ๋ถ๋ชจ ํด๋์ค์ ๋ชจ๋ public/protected ๋ฉค๋ฒ์ ์ ๊ทผํ ์ ์์ต๋๋ค. ย String, Stringbuffer, Stringbuilder์ ์ฐจ์ด๋ ๋ฌด์์ธ๊ฐ์? (๋ฒ์ญ/์๋ฌธ ์ฐธ๊ณ ) ย ๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋ฉ๊ณผ ์ค๋ฒ๋ก๋ฉ์ ๋ฌด์์ธ๊ฐ์? [๋ฉ์๋ ์ค๋ฒ๋ก๋ฉ] * ๋จ์ผ ํด๋์ค ๋ด์์ ๋ฐ์ํฉ๋๋ค. ์ด๋ฆ์ ๊ฐ์ง๋ง ๋งค๊ฐ ๋ณ์๊ฐ ๋ค๋ฅธ ๋์ผํ ํด๋์ค์ ์ฌ๋ฌ ๋ฉ์๋๋ฅผ ๋งํฉ๋๋ค. * ๋ฉ์๋ ์ค๋ฒ๋ก๋ฉ์ ์ฌ์ฉํ๋ฉด ์ ์ฌํ ์์ ์ ์ํํ์ง๋ง ์ ๋ ฅ/์ถ๋ ฅ์ด ๋ค๋ฅธ ๋ฉ์๋๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. class Calculator { public int add(int a, int b) { return a + b; } public double add(double a, double b) { return a + b; } } [๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋ฉ] * ์์์์ ํด๋์ค ๊ฐ์ ๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋ฉ์ด ๋ฐ์ํฉ๋๋ค. ํ์ ํด๋์ค๊ฐ ์์ ํด๋์ค์์ ์์๋ ๋ฉ์๋๋ฅผ ์ฌ์ ์ํ๋ ๊ฒ์ ๋งํฉ๋๋ค. ๋ฉ์๋๋ ์์ ํด๋์ค ๋ฉ์๋์ ๋์ผํ ์ด๋ฆ, ๋ฐํ ์ ํ ๋ฐ ๋งค๊ฐ ๋ณ์๋ฅผ ๊ฐ์ต๋๋ค. * ๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋ฉ์ ์ฌ์ฉํ๋ฉด ํ์ ํด๋์ค๊ฐ ์์ ํด๋์ค์์ ์์๋ ๋ฉ์๋๋ฅผ ์์ฒด์ ์ผ๋ก ๊ตฌํํ์ฌ ํ์ ํด๋์ค์ ๋ํ ๋์์ ์ ๋ฌธํํ ์ ์์ต๋๋ค. class Animal { public void makeSound() { System.out.println("Generic animal sound"); } } class Dog extends Animal { @Override public void makeSound() { System.out.println("Woof!"); } } ย ์์ธ ํด๋์ค์ ๊ณ์ธต๊ตฌ์กฐ๋ ๋ฌด์์ธ๊ฐ์? Arraylist์ Linkedlist์ ์ฐจ์ด๋ ๋ฌด์์ธ๊ฐ์? Set๊ณผ Arraylist์ ์ฐจ์ด๋ ๋ฌด์์ธ๊ฐ์? (๋ฒ์ญ/์๋ฌธ ์ฐธ๊ณ ) ย ๋ฒ์ญ: [https://ducktopia.tistory.com/119] ์๋ฌธ: