β μ μ
βΉοΈ κΈ°μ‘΄ λ°©μμ νκ³
β
λ¬Έλ²
(a, b) -> { result; }
(λ§€κ°λ³μ) -> { μ€νλ¬Έ }
β ν¨μν μΈν°νμ΄μ€ (Functional Interface)
@FunctionalInterface μ΄λ
Έν
μ΄μ
μ¬μ© μΆμ²@FunctionalInterface
interface MathOperation {
int operate(int a, int b);
}
βοΈ λλ€μ μ€μ΅: λ§μ
κ³Ό κ³±μ
λλ€μμ μ¬μ©ν κΈ°λ³Έ μ°μ° μμ μ
λλ€.
MathOperation add = (a, b) -> a + b;
MathOperation multiply = (a, b) -> a * b;
System.out.println(add.operate(5, 3)); // 8
System.out.println(multiply.operate(5, 3)); // 15
π λλ€μμ μ₯μ
π λλ€μμ νκ³
β Try catch
βοΈ κΈ°μ΄ μ€μ΅: λλμ
10μ 0μΌλ‘ λλμ΄ μλ¬λ₯Ό μ λν μμ μ
λλ€.
public class Main {
public static void main(String[] args) {
int a = 10;
int b = 0;
try { //try-catch : μμΈ μν©μ try-catchλ‘ κ°μΈμ μμ νκ² μ²λ¦¬ν©λλ€.
int result = a / b;
System.out.println("result is " + result);
} catch (ArithmeticException e) {
System.out.println("ArithmeticException : " + e);
System.out.println("Error : Divide by zero");
} catch (Exception e) {
System.out.println("Exception : " + e);
}
}
}
βΆοΈ
ArithmeticException : java.lang.ArithmeticException: / by zero
Error : Divide by zero
β catch
β try-catchμ νλ¦ μ μ§
βΉοΈ μμΈ ν΄λμ€ κ³μΈ΅ ꡬ쑰
Object
βββ Throwable
βββ Error (μμ€ν
μ€λ₯, λ³΄ν΅ catchνμ§ μμ)
βββ Exception β μ°λ¦¬κ° μ£Όλ‘ λ€λ£¨λ μμΈμ μμμ
βββ IOException
βββ SQLException
βββ RuntimeException
βββ ArithmeticException
βββ NumberFormatException
βββ NullPointerException λ±
βοΈ λ¬Έμμ΄ -> μ μ λ³ν μ€μ΅
λ¬Έμμ΄μ μ μλ‘ λ³ννλ κ³Όμ μμ μμΈλ₯Ό λ°μμν€λ μμ μ
λλ€.
NumberFormatException μ²λ¦¬
- λ¬Έμμ΄μ μ«μκ° μλ λ¬Έμκ° μμ΄λ©΄ μμΈ λ°μ
- try-catchλ‘ ν¬κ΄μ μ²λ¦¬ κ°λ₯
public class Main {
public static void main(String[] args) {
try {
String input = "123a";
int number = Integer.parseInt(input);
System.out.println("λΉμ μ΄ μ
λ ₯ν μ«μλ " + number + "μ
λλ€.");
} catch (NumberFormatException e) {
System.out.println("μ«μ ν¬λ§·μ΄ μλλλ€. Exception : " + e);
}
}
}
βΆοΈ
μ«μ ν¬λ§·μ΄ μλλλ€. Exception : java.lang.NumberFormatException: For input string: "123a"
βοΈ μ‘°κ±΄λ¬Έ vs μμΈ μ²λ¦¬
μλ¨μμ μ½λ©μμλ νμμκ² μ§λ§
λ€νΈμν¬, 보μ λΆμΌμμλ exeption κ΄λ¦¬κ° μ€μν κ²μ
try-catchλ μμμΉ λͺ»ν μλ¬μλ νλ‘κ·Έλ¨μ νλ¦μ μ μ§ν μ μλλ‘ λμμ£Όλ κ°λ ₯ν λꡬμ λλ€.
β throwsλ?
try-catchλ μμΈλ₯Ό μ§μ μ²λ¦¬, throwsλ μμΈλ₯Ό μ μΈλ§ ν¨βοΈ μμ
μ μλ₯Ό λνλ΄λ λ¬Έμμ΄μ μ«μλ‘ λ³ννλ λ©μλ μμ±
public static int convertToInt(String s) throws NumberFormatException {
return Integer.parseInt(s);
}
try {
int num = convertToInt("123");
System.out.println("λ³ν κ²°κ³Ό: " + num);
} catch (NumberFormatException e) {
System.out.println("μ«μ νμ μ€λ₯!");
}
π‘ throws μ¬μ©μ λͺ©μ
βοΈ throws vs try-catch
| κ΅¬λΆ | throws | try-catch |
|---|---|---|
| μν | μμΈ λ°μ 'μ μΈ' | μμΈ μ§μ 'μ²λ¦¬' |
| μ₯μ | λ©μλ μ μΈλΆ | λ©μλ λ³Έλ¬Έ |
| μ½λ νλ¦ | νΈμΆμκ° μ± μμ§ | λ°μν μμΉμμ μ²λ¦¬ |
βοΈ μμ
λ©μλ μ μΈμ λ³΄κ³ λ©μλ μμ±νκΈ°
public static int multiply(String input) throws _____ {
// κ³±μ
λ¬Έμ₯μ λ°μ splitμΌλ‘ νΌμ°μ°μλ₯Ό μ»μ΄ μ«μμΈμ§ νμΈνκ³ μλλ©΄ NumberFormatException throw
public class multiply {
public static int multiply(String input) throws NumberFormatException {
String[] operand = input.split("\\*");
int[] nums = new int[operand.length];
try {
for (int i = 0; i < operand.length; i++) {
nums[i] = Integer.parseInt(operand[i]);
}
} catch (NumberFormatException e) {
System.out.println("wrong format : " + e.getMessage());
}
return nums[0]*nums[1];
}
public static void main(String[] args) {
System.out.println(multiply("9*9"));
}
}
throwsλ μμΈ λ°μ μ¬μ€μ νΈμΆμμκ² μλ¦¬κ³ , μ²λ¦¬ μ± μμ μμνλ μ μΈμ λꡬμ λλ€.
β 쑰건 μ²΄ν¬ ν throw
βοΈ μ‘°κ±΄μ κ²μ¬νκ³ μμΈλ₯Ό λ°μμν€λ throw μ¬μ© μ
public class Main {
public static void main(String[] args) {
String input = "13";
try {
boolean result = validateTokenCount(input);
if (result) {
System.out.println("μ«μ 2κ°");
}
} catch(NumberFormatException e) {
System.out.println(e.getMessage());
}
}
public static boolean validateTokenCount(String tokens) throws NumberFormatException {
if (tokens.length() != 2) {
throw new NumberFormatException("μ«μ 2κ°κ° μλλλ€.");
} else {
return true;
}
}
}
μ«μ 2κ°
μ«μ 2κ°κ° μλλλ€.
βοΈ throws vs throw λΉκ΅
| νλͺ© | throws | throw |
|---|---|---|
| μν | μμΈ λ°μ κ°λ₯μ±μ μ μΈ | μ€μ μμΈλ₯Ό λ°μμν΄ |
| μμΉ | λ©μλ μ μΈλΆ | λ©μλ λ³Έλ¬Έ λ΄λΆ |
| κ°μ | ν λ²μ μ¬λ¬ κ° μ μΈ κ°λ₯ | ν λ²μ νλλ§ μ¬μ© κ°λ₯ |
| μ¬μ© μ | public void run() throws IOException | throw new IOException(); |
β finallyλ?
βοΈ κΈ°μ΄ μ€μ΅: finally λΈλ‘ μ€ν νμΈ
μ μ μ€ν μμλ finallyκ° νΈμΆλλ μμ
public class Main {
public static void main(String[] args) {
int a = 10;
int b = 0;
try {
int result = a / b;
System.out.println("result: " + result);
} catch (ArithmeticException e) {
System.out.println("Error: 0μΌλ‘ λλ.");
} finally {
System.out.println("Cleanup: μ΄ λΈλ‘μ νμ μ€νλ©λλ€.");
}
}
}
π finally ν΅μ¬ μμ½
finallyλ νλ‘κ·Έλ¨μ νλ¦κ³Ό κ΄κ³μμ΄ νμ μ€νλμ΄ μ€μν νμ²λ¦¬λ₯Ό 보μ₯ν΄μ£Όλ λΈλ‘μ λλ€
β
μΈν°λ½νΈλ 무μμΈκ°?
μ€ν μ€μΈ νλ¦μ μ μ λ©μΆκ³ μΈλΆ μμ²μ λ¨Όμ μ²λ¦¬νλ λ°©μ
β
ν΅μ¬ κ°λ
:
β’ CPUμ βμ§κΈ μ΄κ±° ν΄μ€!βλΌκ³ μμ²
β’ μ€ν μ€ μ»¨ν
μ€νΈ μ μ₯ β μΈν°λ½νΈ μ²λ¦¬ β μλ νλ¦ λ³΅κ·
ex) Thread[] μμ νΈμ§ νλ‘κ·Έλ¨ = {μμ νΈμ§, μλ§, μμ
, νμΌ λ€μ΄λ‘λ}
β μΈν°λ½νΈμ 3λ¨κ³
β μΈν°λ½νΈμ μ’ λ₯μ μ²λ¦¬ κ³Όμ
process, process, process