Community

๐Ÿ•Š๏ธ 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] ์›๋ฌธ:

์•Œ๋ฆผ

์•Œ๋ฆผ์ด ์—†์Šต๋‹ˆ๋‹ค