흐름 제어문

  • return : 함수에서 결과값을 반환하거나 지정된 라벨로 이동, 반환 타입을 일치시켜야함. return 이후에 작성한 식은 실행되지 않음. Unit 타입은 return을 생략할 수 있음
  • break : for나 while의 조건식에 상관없이 반복문을 끝냄
  • continue : for나 while의 반복문의 본문을 모두 수행하지 않고 다시 조건으로 넘어감

 

예외 : 실행 도중의 잠재적인 오류까지 검사할 수 없기 때문에 정상적으로 실행이 되다가 비정상적으로 프로그램이 종료되는 경우

  • 운영체제의 문제 (잘못된 시스템 호출의 문제)
  • 입력값의 문제 (존재하지 않는 파일 혹은 숫자 입력란에 문자 입력 등)
  • 받아들일 수 없는 연산 (0으로 나누기 등)
  • 메모리의 할당 실패 및 부족
  • 컴퓨터 기계 자체의 문제 (전원 문제, 망가진 기억 장치 등)

 

예외 처리

  • try-catch : try 블록의 본문을 수행하는 도중 예외가 발생하면 catch 블록의 본문 실행
  • try-catch-finally : 예외가 발생해도 finally 블록 본문은 항상 실행, 예외가 발생해도 꼭 실행해야하는 본문을 finally 블록에 넣음
  • try {} : 예외 발생 가능성 있는 문장
  • catch (e: 예외처리 클래스명) {} : 예외를 처리하기 위한 문장
  • finally {} : 반드시 실행되어야 하는 문장
  • e.printStackTrace() : 스택의 추적
  • throw Exception() : 예외 발생시킴

 

특정 예외 처리

  • 기본 : Exception
  • 산술 연산에 대한 예외를 따로 특정해서 잡을 때 : ArithmeticException

 

람다식은 비지역 반환이 일어나기 때문에 @ 라벨을 사용할 필요가 있고, 익명 함수는 라벨을 사용하지 않아도 비지역 반환이 일어나지 않는다.

 

람다식에서 return 실습

람다식에서 return을 사용하면 비지역 반환으로 람다식 return 이후에 있는 retFunc 함수 내 모든 식은 실행되지 않는다.

 

라벨을 사용하면 라벨이 있는 블록만을 하나의 블록으로 보기 때문에 람다식 바깥에 있는 retFunc 함수 내의 식이 실행된다.

return은 하나의 함수를 빠져나가기 때문에 람다식을 사용한 함수도 함수라고 생각해서 라벨을 사용하지 않고 return문을 사용하게 되면 원하는 값이 나오지 않을 수 있다. 따라서 정확히 알고 사용할 필요가 있다.

 

이번에는 암묵적 라벨을 사용한 식이다. 람다식 표현식 블록에 직접 라벨을 쓰는 것이 아니라 람다식 함수의 명칭을 그대로 라벨처럼 사용하는 방식이다.

 

익명 함수로 return 실습

익명 함수를 사용하면 라벨이 굳이 필요 없다.

대신 익명 함수를 너무 많이 쓰면 어떤 원리로 익명 함수를 쓴 것인지 헷갈릴 수 있다는 단점이 있다.

 

break, continue 실습

 

예외 처리 실습

c는 0으로 나누었기 때문에 오류가 발생한다. 그래서 After을 출력하지 못하고 catch-finally문을 실행한다.

 

예외 발생시키기

throw Exception을 사용하여 amount가 1000 이하가 되었을 때 예외가 발생하도록 하였다.

 

+ Recent posts