프로그램의 흐름 제어

이가현·2023년 7월 25일
0

코틀린

목록 보기
3/12

조건문

if~else문


변수에 return 값을 할당한다. 마지막에 적힌 a와 b가 max에 할당되는 값이다.

print도 적용이 되는 것 같다. 우선 readLine은 콘솔로부터 문자열을 입력받는다. (파이썬의 input, C의 scanf와 비슷) 입력 받은 값은 문자열이므로 toDouble로써 문자열을 Double형으로 변환시킨다. 만약 85a나 apple과 같이 변환이 불가하다면 null을 검사하거나 non-null 단정기호 (!!.)를 사용해 받아들일 수 있다. 다만 (!!.)을 사용한다면 예외가 발생할 수 있으니 주의해야 한다.

when문


(..)은 범위를 나타낸다. 조건에 맞는 문장을 수행한다. 위 코드는 인자가 score로 입력을 받는다.


인자가 없을 때는 직접적으로 score라는 변수를 when문 안으로 넣으면 된다.


Any 자료형을 사용하면 다양한 자료형의 인자를 받을 수 있다.

반복문

for문


너무나 직관적인 for문이다.
숫자를 하행하기 위해선 (..)대신 downTo 키워드를 사용해야한다. 만약 2단계씩 증가하려면 step 키워드를 사용해야한다.


삼각형을 찍어내는 코드다. (print와 println은 왜 혼합하는지?)


시작값을 다르게 하고 2씩 뛰며 더해준다. total은 짝수를 더할 때 다시 초기화한다.

while문


0보다 작아지면 while문을 빠져나온다. (print는 값을 입력받기 위한 안내문을 출력할 때 사용하고 println은 그 외에 사용하는 듯 하다.)


do문을 실행한다. 만약 콘솔로부터 input값을 0을 받으면 조건식이 false가 된다.

흐름 제어

return문


인라인으로 선언된 함수에서 람다식을 매개변수로 사용하면 람다식에서 return을 사용할 수 있다. 인자를 람다식으로 사용하고, 나중에 호출했을 때 람다식을 정의했다. 만약 a, b의 합이 10을 넘어가면 return을 호출하여 retFunc 함수를 빠져나간다. 즉, 16, 19번째 줄은 실행되지 않는다. 이러한 반환을 비지역(Non-local) 반환이라고 한다.
위 함수에선 start of retFunc만 출력된다.


비지역 반환을 방지하고 가장 가까운 함수인 retFunc함수로 빠져나가기 위해선 라벨을 정의해야 한다. 람다식 블록의 시작 부분에 라벨을 지정하고, 라벨을 사용한 블록의 끝부분으로 반환한다. 즉 17째 줄에서 반환한다. 따라서 18째 줄이 실행된다. start of retFunc, end of retFunc가 출력되게 된다.

break, continue문


i가 3이면 반복문을 빠져나간다.

라벨과 함께 쓰일 수 있는데 for문 시작 전에 라벨을 붙여주고(ex. first@), break@first와 같이 작성해주면 for문을 빠져나간다. 2중, 3중 for문을 돌릴 때 빠져나가고 싶은 부분에 유동적으로 사용 가능하다.

try~catch문


b로 나눠서 예외가 발생했다. 0으로는 나눌 수 없기 때문이다. 따라서 catch문을 실행한다. finally문은 항상 실행된다. 만약 예외가 없다면 프로그램이 중단된다. 하지만 finally문은 반드시 실행된다. 특정 예외 처리도 가능하다. 만약 산술 연산에 대한 예외를 따로 특정해서 잡으려면 ArithmeticException을 사용할 수 있다.


예외를 발생시키는 것도 가능하다. amount가 1000 이하일 때 throw로 예외를 발생시키고 이것을 catch가 잡아서 처리한다. e.message는 19째 줄에서 작성한 코드이다.

사용자 정의 예외

기본 Exception 클래스로부터 새롭게 사용자가 정의한 예외 클래스를 만들어낼 수 있다.

class <사용자 예외 클래스 이름>(message : String) : Exception(message)

클론( : )을 사용해 하위 클래스인 사용자 예외 클래스 이름을 지정해 예외로 만들 수 있다.


예외 클래스를 지정하고 처리할 수 있다. 18째 줄에서 사용한 Regex는 정규식(Regular Expression)이다. 정규식이란, 특정한 규칙을 가진 문자열로 어떤 문자열에서 정해진 패턴을 알아낼 때 사용한다. 정규식의 기호가 읽기에 어렵기 때문에 익숙해지는 시간이 필요하다.

regexr 웹사이트(https://regexr.com/)를 방문하여 연습이 가능하다.

느낀점

많이 어려운 것은 없었다. 파이썬과 비슷한 느낌이 들었다. 정규식을 열심히 공부해야겠다. 또 람다식이 너무 어렵기 때문에 람다식을 공부해야겠다.

0개의 댓글