Menu
Coddy logo textTech

'finally' 블록

Coddy Dart 여정의 로직 & 흐름 섹션에 포함된 레슨 — 65개 중 41번째.

때때로 try-catch 블록에서 어떤 일이 발생하더라도 실행되는 코드가 필요할 때가 있습니다. finally 블록은 바로 이 목적을 위해 사용됩니다. 이 블록은 예외 발생 여부와 상관없이 항상 실행되는 코드를 포함합니다.

finally 블록은 trycatch 블록 뒤에 옵니다. try 섹션에서 코드가 성공적으로 실행되거나, 예외가 발생하여 처리되더라도 finally 블록은 여전히 실행됩니다.

try {
  // 예외가 발생할 수 있는 코드
  int result = 10 ~/ 2;
  print("Result: $result");
} catch (e) {
  print("An error occurred: $e");
} finally {
  print("This always runs!");
}

이것은 finally 블록을 파일 닫기, 리소스 해제 또는 작업 완료 로깅과 같은 정리 작업에 완벽하게 만듭니다. 에러 처리 과정에서 어떤 일이 발생하더라도 특정 코드가 항상 실행되도록 보장할 수 있습니다.

challenge icon

챌린지

쉬움

처리 중에 오류가 발생하는지 여부와 관계없이 항상 정리 작업을 수행하는 파일 처리 시뮬레이터를 구현하여 finally 블록을 시연하는 프로그램을 작성하세요.

  1. 처리할 파일 이름을 나타내는 문자열 입력을 읽습니다.
  2. 파일 내용을 나타내는 문자열 입력을 읽습니다.
  3. 오류 시뮬레이션 여부를 나타내는 문자열 입력을 읽습니다 ("error" 또는 "success").
  4. try-catch-finally 구조를 사용하여 파일 처리를 시뮬레이션합니다:
    • try 블록에서: 오류 시뮬레이션 입력이 "error"인지 확인하고, 참이면 "File processing failed"라는 메시지와 함께 예외를 발생시키고, 그렇지 않으면 파일을 성공적으로 처리합니다.
    • catch 블록에서: 처리 중에 발생하는 모든 예외를 처리합니다.
    • finally 블록에서: 성공 또는 실패 여부에 관계없이 항상 정리 작업을 수행합니다.
  5. 아래에 표시된 정확한 형식으로 처리 결과를 표시합니다.

예를 들어, 입력이 "document.txt", "Hello World", "success"인 경우 프로그램은 다음과 같이 출력해야 합니다:

File Processing System
======================
Opening file: document.txt
File content: Hello World
Processing file successfully...
File processed: 11 characters found
Cleanup: Closing file handles
Cleanup: Releasing memory resources
Cleanup: Logging operation completion
Processing completed successfully

입력이 "report.pdf", "Annual Report Data", "error"인 경우 프로그램은 다음과 같이 출력해야 합니다:

File Processing System
======================
Opening file: report.pdf
File content: Annual Report Data
Error occurred: File processing failed
Unable to complete file processing
Cleanup: Closing file handles
Cleanup: Releasing memory resources
Cleanup: Logging operation completion
Processing completed with errors

입력이 "config.json", "{\"setting\": \"value\"}", "success"인 경우 프로그램은 다음과 같이 출력해야 합니다:

File Processing System
======================
Opening file: config.json
File content: {"setting": "value"}
Processing file successfully...
File processed: 19 characters found
Cleanup: Closing file handles
Cleanup: Releasing memory resources
Cleanup: Logging operation completion
Processing completed successfully

프로그램은 finally 블록이 항상 표시된 정확한 순서대로 세 가지 정리 작업을 실행하는 try-catch-finally 구조를 사용해야 합니다. try 블록에서 오류 시뮬레이션 입력이 "error"와 같은지 확인하고, 참이면 예외를 발생시킵니다. 오류가 시뮬레이션되지 않으면 length 속성을 사용하여 파일 내용의 문자 수를 셉니다. finally 블록은 항상 정리 메시지를 출력하고 오류 발생 여부에 따라 최종 완료 상태를 결정해야 합니다.

치트 시트

finally 블록은 예외 발생 여부와 관계없이 try-catch 이후에 항상 실행되는 코드를 포함합니다.

try {
  // Code that might cause an exception
  int result = 10 ~/ 2;
  print("Result: $result");
} catch (e) {
  print("An error occurred: $e");
} finally {
  print("This always runs!");
}

finally 블록은 파일 닫기, 리소스 해제 또는 완료 상태 로깅과 같은 정리 작업에 적합합니다.

직접 해보기

import 'dart:io';

void main() {
  // 입력 읽기
  String? filename = stdin.readLineSync();
  String? content = stdin.readLineSync();
  String? errorSimulation = stdin.readLineSync();
  
  // 시스템 헤더 표시
  print("File Processing System");
  print("======================");
  print("Opening file: $filename");
  print("File content: $content");
  
  // TODO: 아래에 코드를 작성하세요
  // try-catch-finally 구조를 사용하여 파일 처리를 시뮬레이션합니다
  // - try 블록: errorSimulation이 "error"와 같은지 확인하고, 참이면 예외를 발생시킵니다
  // - catch 블록: 모든 예외를 처리합니다
  // - finally 블록: 항상 정리 작업을 수행합니다
  
}
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

로직 & 흐름의 모든 레슨