'finally' 블록
Coddy PHP 여정의 논리 & 흐름 섹션에 포함된 레슨 — 68개 중 54번째.
때때로 예외 발생 여부와 상관없이 실행되어야 하는 코드가 필요할 때가 있습니다. finally 블록은 이러한 보장을 제공합니다. 이 블록은 try...catch 블록이 완료된 후 항상 실행되는 코드를 포함하므로, 파일 닫기나 데이터베이스 연결 종료와 같은 정리 작업에 적합합니다.
finally 블록은 모든 시나리오에서 실행됩니다: try 블록이 예외 없이 성공할 때, 예외가 발생하여 처리될 때, 그리고 예외가 발생했지만 처리되지 않았을 때도 포함됩니다. 이러한 신뢰성 덕분에 중요한 정리(cleanup) 코드가 항상 실행되도록 보장하는 데 매우 유용합니다.
<?php
try {
echo "Attempting operation...\n";
// 예외를 발생시킬 수 있는 코드
} catch (Exception $e) {
echo "Error: " . $e->getMessage() . "\n";
} finally {
echo "Cleanup completed.\n";
}
?>finally 블록은 try와 catch 블록이 모두 완료된 후에 실행되며, 필수적인 정리 코드를 위한 일관된 장소를 제공합니다. 이는 실행 중에 어떤 일이 발생하더라도 스크립트가 리소스를 적절하게 처리하고 깨끗한 상태를 유지하도록 보장합니다.
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
챌린지
쉬움두 개의 입력값인 연산 유형과 숫자를 받게 됩니다. 첫 번째 입력은 "divide" 또는 "multiply" 중 하나인 문자열입니다. 두 번째 입력은 연산에 사용될 숫자입니다.
두 입력을 읽고 try...catch...finally 블록을 생성하세요. try 블록 내부에서 연산 유형을 확인합니다:
- 연산이
"divide"인 경우, 숫자가 0인지 확인합니다. 0이라면"Cannot divide by zero"라는 메시지와 함께 새로운Exception을 던지세요. 숫자가 0이 아니라면, 100을 해당 숫자로 나눈 값을 계산하고"Result: "뒤에 결과값을 출력합니다. - 연산이
"multiply"인 경우, 100에 해당 숫자를 곱한 값을 계산하고"Result: "뒤에 결과값을 출력합니다.
catch 블록에서는 getMessage() 메서드를 사용하여 "Error: " 뒤에 예외 메시지를 출력함으로써 모든 예외를 처리합니다.
finally 블록에서는 "Operation completed"를 출력합니다.
입력 형식:
- 첫 번째 줄: 연산 유형 문자열 (
divide또는multiply) - 두 번째 줄: 숫자 (예:
5또는0또는2.5)
예상 출력:
- 연산에 성공한 경우:
Result:뒤에 계산된 값, 그 다음 줄에Operation completed - 0으로 나누기가 발생한 경우:
Error: Cannot divide by zero, 그 다음 줄에Operation completed
치트 시트
finally 블록은 예외 발생 여부와 관계없이 try...catch 블록이 완료된 후 항상 실행되는 코드를 포함합니다. 파일 닫기나 데이터베이스 연결과 같은 정리 작업에 적합합니다.
finally 블록은 모든 시나리오에서 실행됩니다:
try블록이 예외 없이 성공할 때- 예외가 발생하여 catch될 때
- 예외가 발생했지만 catch되지 않을 때
<?php
try {
echo "Attempting operation...\n";
// Code that might throw an exception
} catch (Exception $e) {
echo "Error: " . $e->getMessage() . "\n";
} finally {
echo "Cleanup completed.\n";
}
?>finally 블록은 try와 catch 블록이 모두 종료된 후에 실행되어, 필수적인 정리 코드가 항상 실행되도록 보장합니다.
직접 해보기
<?php
// 입력 읽기
$operation = trim(fgets(STDIN));
$number = floatval(fgets(STDIN));
// TODO: 아래에 코드를 작성하세요
// 연산을 처리하기 위해 try...catch...finally 블록을 생성하세요
?>이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.