[Rookiss C++] 조건문

황교선·2023년 3월 16일
0

cpp

목록 보기
5/19

프로그래밍은 큰 시야로 바라보면 데이터를 저장하고 가공하고(변수), 어떤 조건에는 무엇을 해야하고(조건문), 어떤 문장들을 내가 원하는 조건일 때만 반복하는 것(반복문)이라고 볼 수 있다. 반복문은 방금 말했듯이 ‘원하는 조건’일 때만 반복이기에 조건문이 들어가는 형태이기에 조건문을 잘 아는 것이 중요하다. 조건문과 반복문을 사용할 수 있으면 프로그래밍의 대부분을 할 수 있다고 생각하면 된다.

조건문

주어진 조건식의 결과에 따라 별도의 명령을 수행하도록 제어하는 명령문

코드 블록

조건문이나, 반복문, 함수 등을 사용하여 실행하고 싶은 문장들은 하나가 아닐수도 있다. 프로그램이 커질수록 더많은 문장들을 실행할 것이다. 이 안에 둘러싸여있는 문장들의 영역을 코드 블록이라 하고, {}로 둘러싸여 있다. 하나의 문장만 있으면 {}를 쓰지 않아도 되지만 추천하지 않는다. 어쨌든 조건문과 반복문을 사용할 때는 이 코드 블록 영역을 잘 생각하면서 코딩하면 좋다.

if

  • if 문의 조건식이 참일 때 그 안에 있는 문장들이 실행됨
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 / else

  • if 의 조건식이 참이면 if 내의 문장들이 실행되고, 거짓이면 else 내의 문장들이 실행됨
if (조건식) // 조건식이 참이면 문장1 실행, 거짓이면 문장2 실행
{
	문장1;
}
else
{
	문장2;
}

if / else if

  • else if는 여러 개일 수 있음

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 / else if / else

  • else if는 여러 개일 수 있음

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

  • 여러 개의 조건을 각각 처리해야할 때 편함
  • if 문의 else if 문을 연달아 사용하는 것보다 성능 상의 이점이 있을 수 있음
  • int형으로 승격할 수 있는 값만이 사용될 수 있음
    • char, short, int, 리터럴, 열거체
  • 보통 열거체(enum)를 사용하여 가독성과 유지보수 측면을 높임
  • case 문을 연달아 사용하여 같은 문장을 처리하게 할 수 있음
  • break
    • case 문을 탈출하기 위하여 사용해야하는 키워드
    • if 문에서도 사용할 수 있지만 if 문에서 사용하기 위해서는 빠져나가야하는 반복문 안에서 사용하고 있을 때 가능
  • default 문은 반드시 존재해야하는 것은 아님
switch (조건값) // 조건식이 아니고 조건'값'
{
	case1: // ;이 아니고 :임
		문장1;
		break;
	case2:
		문장2; // 문장2, 문장3과 같이 하나의 case 문 내에는 여러 문장이 들어 있을 수 있음
		문장3;
		break;
	case3: // 이처럼 case를 연달아 사용하여 같은 문장을 실행하게 할 수 있음
	case4:
		문장4;
		break;
	case5:
		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 문법 쪽에 예시로 있다.


참고한 글

profile
성장과 성공, 그 사이 어딘가

0개의 댓글