프로그래밍은 큰 시야로 바라보면 데이터를 저장하고 가공하고(변수), 어떤 조건에는 무엇을 해야하고(조건문), 어떤 문장들을 내가 원하는 조건일 때만 반복하는 것(반복문)이라고 볼 수 있다. 반복문은 방금 말했듯이 ‘원하는 조건’일 때만 반복이기에 조건문이 들어가는 형태이기에 조건문을 잘 아는 것이 중요하다. 조건문과 반복문을 사용할 수 있으면 프로그래밍의 대부분을 할 수 있다고 생각하면 된다.
주어진 조건식의 결과에 따라 별도의 명령을 수행하도록 제어하는 명령문
조건문이나, 반복문, 함수 등을 사용하여 실행하고 싶은 문장들은 하나가 아닐수도 있다. 프로그램이 커질수록 더많은 문장들을 실행할 것이다. 이 안에 둘러싸여있는 문장들의 영역을 코드 블록이라 하고, {}로 둘러싸여 있다. 하나의 문장만 있으면 {}를 쓰지 않아도 되지만 추천하지 않는다. 어쨌든 조건문과 반복문을 사용할 때는 이 코드 블록 영역을 잘 생각하면서 코딩하면 좋다.
if(조건식) //if와 ()를 붙여서 써도 상관없지만 떼어쓰는 것을 추천
문장1; // 조건문 내의 문장은 들여쓰기(indent)를 해야 가독성이 늠
if (조건식)
문장1; // if문 안에 하나의 문장만 실행할 경우 { }가 필요 없음
문장2; // 이렇게 들여쓰기하여 적어놓는다하더라도 if에 속해있는 문장은 문장1 뿐이므로 if와 상관없이 문장2는 실행됨
문장3; // 문장2처럼 if와 상관없이 실행되는 문장3, 사실 문장2도 문장3처럼 내어쓰기 되어있듯이 바라보아야하고 문장2처럼 들여쓰기하면 헷갈려서 안 된다.
if (조건식) 문장1; // 한 문장이라면 이렇게 써도 됨
if (조건식) // if문 내에 문장이 한 개만 있더라하더라도 { } (컬리 브라켓)을 사용한 가장 이상적인 방법
{
문장1;
}
if (조건식) { // 브라켓을 조건식 옆에 사용하는 사람들도 있지만 위의 방식으로 쓸 것을 추천하면서도, 회사에 들어가면 회사 코딩 컨벤션에 따를 것
문장1;
}
if (조건식)
{
문장1;
문장2;
//... // 더 많은 문장들이 있을 수 있음
}
// 아래처럼 논리 연산으로 여러 개의 조건식을 결합할 수도 있음 -> 결국 하나의 결과값(0 또는 1)로 나오기 때문
if (조건식1 && 조건식2 && 조건식3) // 조건식1과 조건식2와 조건식3 전부 참일 때, 문장1 실행
{
문장1;
}
if (조건식1 || 조건식2) // 조건식1이나 조건식2 둘 중 하나라도 참일 때 문장1 실행
{
문장1;
}
if (조건식) // 조건식이 참이면 문장1 실행, 거짓이면 문장2 실행
{
문장1;
}
else
{
문장2;
}
if 의 조건식이 참이면 if 내의 문장들이 실행되고, 거짓이라면 else if 의 조건식을 판별하여 참이면 각 else if 의 문장들을 실행
if (조건식1) // 조건식1이 참이면 문장1 실행, 거짓이면 아래 else if 문을 순차적으로 조건식을 검사하고 참일 때 그 안의 문을 실행
{
문장1;
}
else if (조건식2) // 조건식1이 거짓이면서 조건식2가 참이면, 문장2 실행
{
문장2;
}
else if (조건식3) // 조건식1이 거짓이면서, 조건식2가 거짓이고, 조건식3이 참이면, 문장3 실행
{
문장3;
}
if 의 조건식이 참이면 if 내의 문장들이 실행되고, 거짓이라면 else if 의 조건식을 판별하여 참이면 각 else if 의 문장들을 실행하고, 위의 모든 조건식이 전부 거짓일 경우 else 내의 문장들을 실행
if (조건식1) // 조건식1이 참이면 문장1 실행, 거짓이면 아래 else if 문을 순차적으로 조건식을 검사하고 참일 때 그 안의 문을 실행
{
문장1;
}
else if (조건식2) // 조건식1이 거짓이면서 조건식2가 참이면, 문장2 실행
{
문장2;
}
else if (조건식3) // 조건식1이 거짓이면서, 조건식2가 거짓이고, 조건식3이 참이면, 문장3 실행
{
문장3;
}
else // 위의 조건식1,2,3이 거짓이라면 문장4 실행
{
문장4;
}
#include <iostream>
using namespace std;
int main() {
bool isTrue = true; // isTrue라는 참 거짓을 담을 수 있는 뱐수(그릇)을 만들고 그 안에 true 값을 넣어줌
if (isTrue) // isTrue 안에 들어있는 값이 true이기 때문에 if문이 실행됨
{
cout << "true" << endl;
}
isTrue = false; // 미리 선언한 isTrue의 값을 false로 바꾸어줌
if (isTrue) // isTrue 변수의 값은 false이기 때문에 else 문장이 실행됨
{
cout << "true" << endl;
}
else
{
cout << "false" << endl;
}
int a = 4; // 정수를 담을 수 있는 a라는 이름을 가진 변수를 하나 만들고 그 안에 4라는 값을 넣어줌
if (a == 1) // a == 1 일 때 if 문을 실행할 수 있는데 a는 4이기 때문에 실행 안되고 건너뜀
{
cout << "a = 1" << endl;
}
else if (a == 2) // a == 2 일 때 else if 문을 실행할 수 있는데 a는 4이기 때문에 실행 안되고 건너뜀
{
cout << "a = 2" << endl;
}
else if (a == 3) // 위와 동일
{
cout << "a = 3" << endl;
}
else // 위 if, else if, else if의 모든 조건에서 거짓이었기 때문에 else가 실행됨
{
cout << "a is not 1,2,3" << endl;
}
}
// 출력 결과
// true
// false
// a is not 1,2,3
switch (조건값) // 조건식이 아니고 조건'값'
{
case 값1: // ;이 아니고 :임
문장1;
break;
case 값2:
문장2; // 문장2, 문장3과 같이 하나의 case 문 내에는 여러 문장이 들어 있을 수 있음
문장3;
break;
case 값3: // 이처럼 case를 연달아 사용하여 같은 문장을 실행하게 할 수 있음
case 값4:
문장4;
break;
case 값5:
if (조건식) // 안쪽에 중첩문을 사용할 수 있음. if문 뿐만 아니라, 반복문, 함수 등 원하는 것 가능
{
문장5;
}
else
{
문장6;
}
break;
default: // 위의 모든 case에 해당하지 않을 때 default 문의 문장7을 실행하고 break를 만나 탈출
문장7;
break;
}
#include <iostream>
using namespace std;
int main() {
int a = 4; // 정수를 담을 수 있는 a라는 이름을 가진 변수를 하나 만들고 그 안에 4라는 값을 넣어줌
switch (a)
{
case 1:
cout << "a = 1" << endl;
break;
case 2:
cout << "a = 2" << endl;
break;
case 3:
cout << "a = 3" << endl;
break;
default: // a가 1,2,3이 아니었기 때문에, default문으로 옴
cout << "a is not one of 1,2,3" << endl;
break;
}
a = 1; // 이미 만들어진 변수 a에 기존의 값을 버리고 1이라는 값을 넣어줌
switch (a)
{
case 0: // a가 0이라면 아무것도 하지 않고 탈출
break;
case 1: // a가 1이라면 아무것도 실행하지 않지만, break를 만나지 않았으므로 case 2까지 내려감
case 2:
cout << "a = 1 or a = 2" << endl; // a가 1,2일때 실행됨
break; // 그리고 탈출
case 3:
cout << "a = 3" << endl;
break;
default:
cout << "a is not one of 1,2,3" << endl; // a가 0,1,2,3이 아닐 때, 즉 모든 case를 통과했을 때 실행됨, else와도 같음
break;
}
}
// 출력 결과
// a is not one of 1,2,3
// a = 1 or a = 2
위의 switch 문을 제외한 if 가 들어가는 조건문에서 특징은 if는 무조건 들어간다는 것이다. if 키워드를 통해서 그 이후에 나올 else if, else의 문장을 파악할 수 있다. 만약 if 키워드를 사용하지 않고 else if, else를 사용한다면 컴파일 에러가 난다.
또한 각 () 안에는 여러 개의 조건식을 논리 연산자로 조합하여 사용할 수 있지만, 그 외의 것을 편하게 보기 위해 하나의 조건식들만 사용했다. 여러 개의 조건식의 예제는 단일 if 문법 쪽에 예시로 있다.
참고한 글