본문 바로가기

프로그래밍/Java 프로그래밍

자바 조건문

조건문


조건문은 조건식에 따라 다른 실행문을 실행하기 위해 사용됩니다. 조건문의 종류로는 if문과 switch문이 있습니다. if문은 조건식의 결과가 true, false냐에 따라, switch문은 변수의 값에 따라 실행문이 결정됩니다.



if문


if문은 조건식의 결과에 따라 블록 실행 여부가 결정됩니다. 조건식에는 true 또는 false 값을 산출할 수 있는 연산식이나 boolean 타입 변수가 올 수 있습니다. 조건문이 true면 블록을 실행하고 false면 블록을 실행하지 않습니다.


if(조건식) {

   실행문A

}

실행문B


위의 식에서 조건식이 true면 실행문A를 실행하고나서 실행문B를 실행하지만 조건식이 false면 실행문A는 실행하지않고 실행문B만 실행하게됩니다. 중괄호{} 블록은 여러 개의 실행문을 하나로 묶기 위해 작성됩니다. 만약 조건식이 true가 될 때 실행해야 할 문장이 하나밖에 없다면 생략할 수 있습니다. 하지만 단 하나의 문장이라도 중괄호{} 블록을 사용하는 것을 권장합니다. 이것은 프로그램 코드는 언제든지 수정될 수 있고 하나의 문장이 블럭으로 바뀔 수도 있기 때문입니다.



위의 예제에서 score가 90이상이면 라인 8과 9가 실행됩니다. 그래서 score가 93이므로 "점수가 90보다 큽니다."와 "등급은 A입니다."를 출력하게됩니다. 문제는 라인 14입니다. 라인 12에서 중괄호를 사용하지 않았기때문에 라인 13만 if문이 true일때 실행되고 라인 14는 그냥 실행하게 됩니다. 이래서 항상 중괄호를 사용하는 연습이 필요합니다.



if-else 문


if-else문은 else 블록과 함께 사용되며 조건식의 결과에 따라 실행 블록을 선택하게 됩니다. 조건식이 true인 경우는 if블록을 실행하기 되고 false인 경우는 else 블록을 실행하게 됩니다. 실제 코딩을 할때는 if문보다 if-else문이 더 많이 쓰입니다. 뒤에 배우게 될 if-else if-else문도 많이 쓰입니다.



첫번째 if문에서는 if문을 두번 사용해서 비교를 해야했지만 위의 예제는 if-else를 사용하여 조건식이 아닌 경우에 따로 실행할 수 있는 else 블록을 만들 수 있습니다. 이것은 조건식이 true나 false냐에 따라 단순히 분리가 된다면 가장 잘 표현할 수 있는 문장이 됩니다.



if-else if-else 문


조건문이 여러 개인 if문도 있습니다. 처음 if문의 조건식이 false일 경우 다른 조건식의 결과에 따라 실행 블록을 선택할 수 있는데, if 블록의 끝에 else if문을 붙이면 됩니다. else if문의 수는 제한이 없으며, 여러 개의 조건식 중 true가 되는 블록만 실행하고 전체 if문을 벗어나게 됩니다. else if 블록의 마지막에 else 블록을 추가할 수 있는데, 모든 조건식이 false일 경우 else 블록을 실행하고 if문을 벗어나게 됩니다.




여러개의 조건에 따라 실행해야되는 문장들이 따로 있다면 if-else if-else 문장을 사용해야 합니다. 위의 예제같이 등급을 구할 때 사용할 수 있습니다. 위의 예제에서 score에 임의로 값을 입력했습니다. 하지만 실제 프로그램에서는 위와 같이 사용하지 않습니다. 직접 입력을 받거나 DB에서 값을 가져오는 방법 등을 사용합니다. 아직 배우지 않았기 때문에 일단 score에 임의로 값을 넣었습니다.


지금의 예제는 값을 임의로 넣지않고 얻어오는 예제를 해보겠습니다. 주사위를 굴려서 어떤 값이 나왔는지 확인하는 프로그램을 작성해 보도록 하겠습니다. 주사위를 굴려서 나올 수 있는 1부터 6까지 숫자중 하나를 무작위로 선택할 수 있는 메소드가 필요합니다. 이것은 자바에서 제공해주는 API를 사용해보도록 하겠습니다. 자바에서는 Math.random()이라는 메소드를 활용할 수 있는데 이 메소드는 0.0과 1.0사이에 속하는 double 타입의 난수를 리턴합니다. 이때 0.0은 범위에 포함되고 1.0은 범위에 포함되지 않습니다. 이것은 다음과 같은 식으로 표현할 수 있습니다.


0.0 <= Math.random() < 1.0


지금 우리가 원하는 것은 1부터 6까지의 정수값입니다. 이것을 하려면 일단 6일 곱해야합니다. 그러면 0.0 <= Math.random() * 6 < 6.0 이 됩니다.

그러나 우리가 원하는 것은 정수값이기 때문에 int 타입으로 강제 변환시켜야 합니다. 그러면 (int) 0.0 <= (int) (Math.random() * 6) < (int) 6이 됩니다. 그러면 0부터 5까지의 값이 나오게 되는데 우리가 원하는 것은 1부터 6이기 때문에 여기에 1을 더하면 됩니다.  그러면 원하는 값을 얻기위한 식이 생성됩니다. 이 원리를 이용해서 start부터 시작하는 n개의 정수 중에서 임의의 정수 하나를 얻기 위한 연산식을 다음과 같이 만들 수 있습니다.


int num = (int) (Math.random() * n) + start;




조건식의 마지막은 else를 사용했습니다. 이는 num 값이 1부터 6까지의 정수밖에 가질 수 없기때문입니다. 그러므로 또하나의 else if문을 사용할 필요가 없어진 것입니다. 다음은 조건문의 다른 형태인 switch에 대해 알아보겠습니다.




switch 문


switch 문은 if문과 마찬가지로 조건 제어문입니다. 하지만 switch문은 if문처럼 조건식이 true와 false에 따라 실행문이 실행되는 것이 아니고 변수가 어떤 값을 가지느냐에 따라 실행문이 선택됩니다. 조금 전에 작성한 주사위 프로그램같은 것이 switch 문을 사용하기에 아직 적당한 예제입니다.




num 값을 case 뒤에 있는 값과 비교해서 맞는 블록을 실행하면 됩니다. 여기서는 중괄호를 사용하지 않고 case 뒤에 계속 해서 작성하면 되고 마지막에 break; 문만 붙여주면 됩니다. if문의 else와 마찬가지로 switch에는 default문이 존재합니다. break;문이 없으면 그 뒤에 실행문들을 모두 실행합니다. 경우에 따라 그렇게 코딩해야하는 경우도 생기지만 정확히 알고 코딩을해야 합니다. 다음은 char 타입 변수를 이용해서 알파벳 대소문자에 관계없이 동일하게 처리하도록 만든 switch 문입니다.



위의 예제에서는 case문을 2개 사용하여 값을 비교할 수 있도록 하였습니다. grade가 'A'라면 뒤에 있는 밑에 있는 break;문장을 만날 때까지 밑의 문장들을 실행하게 됩니다. grade가 'a'라도 마찬가지 입니다. 여기서는 grade가 'B'이기 때문에 라인 15를 만날때까지 실행하게 됩니다. switch문장안에 들어갈 변수는 정수타입과 String 타입도 가능합니다.

'프로그래밍 > Java 프로그래밍' 카테고리의 다른 글

자바 참조 타입과 참조변수  (0) 2020.07.02
자바 반복문  (0) 2020.07.01
자바연산자와 연산식4  (0) 2020.06.29
자바 연산자와 연산식3  (0) 2020.06.28
자바 연산자와 연산식2  (0) 2020.06.26