안녕하세요 ^^
원래는 매일 1강의씩 하는 게 목표지만 사람에 나태함이란……. 헤헤헷
자! 오늘은 제어식에 대하여 다루겠습니다.
다른 프로그래밍 언어를 해보신 분이라면 아시겠지만 다른 언어랑 다른 게 별로 없어요. ㅎ
제어식은 뭐
if문, switch문, break문, continue문
정도이고 반복문은 다음 강의에 올릴게요!
가장 먼저 조건문부터 설명을 하겠습니다.
조건문은 일정한 수식을 주고 그 값이 true이냐 false이냐 로 다음 실행을 정합니다.
if-else문

조건문은 위에 그림과 같습니다.
if문 조건이 참이면 문장1을 실행하고 조건이 거짓일 때는 문장2가 실행이 됩니다.
if-else문은 하나의 세트, 즉 하나의 문장1,2 둘 중 하나가 실행이 되면 if-else문이 종료가 되게 됩니다.
간단한 예제로 다시 설명하겠습니다.

위 예제를 보시면 Scanner로 사용자에게 일한 시간을 받아와서 임금을 계산하는 문제입니다.
if문을 보시면 hours(일한시간)이 8시간을 초과하게 되면 8시간만큼은 원래 임금만큼 주어지고 초과문은 1.5배 하여서 pay변수에 저장을 합니다.
만약 hours가 8시간이하라면(false) else부분이 실행되어 pay는 단순히 일한시간*임금이 되게 됩니다.
if문 조건 안에는 논리가 들어가야 합니다.
x = 7 이런 식이 아닌 x == 7 이런 식으로(= ,== 은 서로 다릅니다.) x와 7이 같은가로 비교를 해야 합니다.
여기서 처음 사람들이 많은 실수를 하는 게 ‘=’ 과 ‘==’입니다.
여기서 ‘=’는 대입연산자로 변수에 값을 넣을 때 사용되어집니다.
‘==’는 비교연산자로 양쪽에 값이 같은가 다른가를 비교하고 true와 false를 나타냅니다.

위에 그림은 비교 연산을 나타냅니다. 왼쪽은 우리가 수학에서 사용하던 표기이고 오른쪽이 우리가 프로그래밍을 하면서 사용해야하는 표기입니다.
만약 a와 b가 다른가? 에 대한 걸 알고 싶다면 “a != b”를 합니다. 여기서 만약 a와 b 가 다르다면 값은 true가 됩니다.

위에 그림은 조건에서 다른 조건도 같이 묶어서 생각 하고 싶을 때 사용합니다.
(조건 1)&&(조건 2) 이런 식으로 쓰면 조건 1 과조건 2가 모두 만족해야 true가 되고 하나라도 맞지 않으면 false가 됩니다.
(조건 1)||(조건 2) 이것은 ‘or’ 즉, 둘 중 하나만 맞아도 true가 됩니다.
if문은 중첩하여서 사용하는 것이 가능하고 그것을 중첩if문이라고 부릅니다.

위와 같이 쓰며 문장에 if문이 들어 간 것으로 생각하시면 됩니다.
위와 같이 if문을 중첩하시면 처음 하시는 분은 else가 다른 if문에 붙어서 논리적인 오류를 많이 발생하게 되는데요.
본론부터 말하자면 else문은 가장 가까운 if절과 매치된다고 생각하시면 됩니다.

위 그림 중 맨 위에 것을 보시면 밑에 else문은 (score >90) 조건에 if문에 붙어서 80초과 이고 90이하 일 때 “당신의 학점은 B입니다”가 프린트 됩니다.
밑에 그림은 중괄호를 넣어서 else를 (score>80) 조건에 매치 시켰습니다. 이렇게 하면 80이하일 때 “당신의 학점은 A나B가 아닙니다.”를 프린트 하게 됩니다.
if문을 쓸 때 첫 번째 그림처럼 밑에 한 줄만 있다면 않써도 if문안에 포함이 잘 되지만 전 중괄호를 한 줄이라도 써주고 있습니다. 중괄호를 써주면 if와 else를 매치 할 때도 어디까지인지 구분이 잘 보이고 여러 가지 if가 중첩이 되었을 때 좀 더 구조를 알아보기 쉽기 때문입니다.
if문은 연속적으로 계속하여 조건을 쓸 수 있습니다.

위에처럼 else if를 사용하여 여러 조건을 한 세트에 비교 할 수도 있습니다.
else if는 if문이 false면 조건식2를 비교하고 그것도 false면 조건3을 비교 하고 아니면 else로 넘어가게 됩니다. - 즉 else if문은 순차적으로 위에서부터 내려오면서 실행이 되게 됩니다.
위 설명을 예제를 보면서 한 번 더 설명 하겠습니다.

세금을 계산하는 문제입니다.
income(수입)이 1000 이하라면 0.09*수입을 하게 됩니다.
여기서 그다음이 중요한데 else if를 사용하여 수입이 4000이하인지 표시하고 있습니다.
잘 생각해보면 수입이 900이라면 1000이하 조건이 아니라 4000이하 조건도 만족하게 됩니다.
정답부터 말하자면 위에 if문 하나만 즉, tax = (int)(0.09*income)만 실행되고 if문을 빠져 나와서 프린트 하게 됩니다.
자!! 처음부터 다시 설명하겠습니다. 위에서 말했듯이 if문은 순차적으로 내려와서 조건에 맞으면 if문 전체를 종료합니다. 즉 수입이 1200이라서 첫 번째 조건을 만족하지 못하였을 때는 2번째 조건인 4000이하를 비교하고 true가 되어 밑에 문장을 실행하고 전체 if문을 종료하는 것입니다.
그래서 if문에 조건을 쓸 때 두 번째에 1000초과 4000이하를 적지 않아도 1000이하는 이미 위에 조건에서 걸러져서 온 것 이므로 1000을 초과하는 값이 되는 거죠.
제가 적고 보니 if문이 쉬운 게 아니군요.……. ㅋㅋㅋㅋ
자 다음은 switch문을 하고 이번 글을 끝내겠습니다.
일단 예를 들어서 설명을 시작하죠.

switch문은 위 예제 처음 switch(변수) 이런 형태로 변수에 값이 무엇이냐에 따라 case 문이 실행이 됩니다. 위 예제를 따르면 number라는 변수가 값이 0이라면 없음을 프린트하고 break를 만나 빠져 나오게 됩니다.
여기서!!! switch-case에서는 break가 아주 중요합니다.
switch문도 if 문처럼 위에서부터 차례대로 비교를 하며 내려오게 되는데요.
만약 case 0 에 break가 없다면 없음을 프린트하고 하나를 프린트하고 break를 만나 switch문을 나오게 됩니다.
즉 break가 없으면 그 조건이 맞는 case부터 시작해서 break를 만날 때 까지 계속 밑으로 내려오면서 있는 문장을 모두 다 실행하게 됩니다.
하지만 default(모든 조건이 만족하지 않을 때)는 break가 없어서 계속 실행하면서 내려올 때 default를 만나면 그냥 나옵니다. 다시 말하자면 default는 실행이 되지 않고 나오게 됩니다.


위 예제를 보면 달을 입력하면 그 달에 일수를 알려주는 프로그램입니다.
처음 month변수에 사용자가 입력한 값을 넣은 후 case를 이용하여 비교를 하죠.
여기서 보면 case 1,3,5,7,8,10,12를 연달아서 적어놓고 break가 없습니다. 그리고 12에만 days = 31이라고 되어있죠. 하지만 위에서 배웠듯이 case 1,3,5……. 중 하나만 만족하면 그대로 타고 내려와서 12까지 도달하게 되고 days변수에 12를 넣고 break즉 switch문을 종료하게 됩니다.
자!! 제어식파트는 이것으로 끝입니다.
예상외로 설명하려고 하니 제어문만 해도 무진장 양이 많네요. ㅎㅎㅎ
이것저것 설명을 하려고 하니…….
제어식파트는 다음 글은 반복문과 함께
자 그럼 다음 글인 반복문에서 만납시다!!




덧글