게임강의
각종 노하우 분류

각종 노하우 게임 개발의 기초 c/c++ 강의 - 기본3

컨텐츠 정보

본문

[출처: Gamezone]
작성자: 작성자 없음

 

안녕하세요 llafjkl입니다~!!


한번 코드를 분석해 가면서 가 볼까요!!


연산자축약형


연산자축약형이란 말 그대로 연산자를 줄여서 사용한다는 뜻입니다.


ex) int Number = 10;


Number = Number + 5;


라고 식을 추가할 때


Number += 5; 이렇게 축약을 해서 사용할 수가 있습니다!


여기서


std::cout << "Number = " << Number << std::endl;


코드를 치게 되면 Number의 값을 확인할 수 있습니다.


한번 다른 코드를 쳐 볼까요


이번엔


Number = 3; 이라고 할 때


Number ^= 5;


라는 연산자축약형을 넣어볼게요


std:;cout << "Number = " << Number << std::endl;


를 치면


Number = 6이라고 나옵니다!


한번 맞는 결과인지 식을 계산해볼까요?


3을 2진수로 변경하면


3 / 2 = 1 --- 1       0b11이 나옵니다.


5를 2진수로 변경하면


5 / 2 = 2 ---- 1


2 / 2 = 1 --- 0       0b101이 나옵니다.


 101


^011


------


  110   =  6이 나오게 되네요!!


주의해야 할 연산자가 있는데 바로 나누기 연산자랍니다.


나누기 연산자의 경우 정수 / 정수를 하게 되면 소수점 자리는 사라지고 정수부 분만 남게 됩니다.


ex) Number = 11 / 3;


을 하게 됐을 때


std::cout << "Number = " << Number << std:;endl;


코드를 작성하여 값을 확인해 보면 3.66666666666666....가 아닌 3이라는 정수 값만이 나오게 됩니다.


여기서 결과를 실수로 나오게 하려면 두 개의 값 중 하나를 반드시 실수여야 합니다.


ex) float fNumber = 11 / 3.f


위의 식처럼 .f를 넣게 되면


std::cout << fNumber << std::endl;


결괏값이 3.33333이 나오게 된다.


또 실수를 정수에 대입할 경우 형변환이라는 것을 해야 합니다.


int iNumber = 0;


iNumber = 11 / 3.f;


를 하게 되면 warning이 뜨는 것을 확인할 수 있는데 이 warning 때문에 추후에 버그가 생길 수 있어 형변환을 해야 합니다.


iNumber = (int)(11 / 3.f); 아니면 iNumber = static_cast(11 / 3.f); 이런식으로요


이렇게 말이죠!


증감연산자


다음으로는 증감연산자에 대해서 알아볼 건데


증감연산자는 ++, -- 두 종류가 있습니다.


++ 는 1을 증가시킨다


-- 는 1을 감소시킨다라는 개념을 갖고 있는데


여기서 중요한게 전치 연산이냐, 후치 연산이냐가 중요합니다.


전치 연산이란 : 변수 앞에 증감연산자를 부여하는 것을 의미하고 값을 먼저 1 증가 or 1 감소를 시키고 해당 연산을 진행합니다.


후치 연산이란 : 변수 뒤에 증감연산자를 부여하는 것을 의미하고 연산을 진행한 후 값을 1 증가 or 1 감소를 진행합니다.


iNumber = 10;이라고 가정했을 때


// 전치 연산
std::cout << "iNumber = " << ++iNumber << std::endl;
// 후치 연산
std::cout << "iNumber = " << iNumber++ << std::endl;
// 후치 연산으로 인한 결과 값
std::cout << "iNumber = " << iNumber << std::endl;


의 결과를 확인해보면


iNumber = 11


iNumber = 11


iNumber = 12


의 순서인 것을 확인할 수 있습니다.


처음에 전치 연산을 해서 iNumber += 1의 형태가 되어 11이 된 거고


두 번째 후치 연산의 경우에는 iNumber에 연산을 진행한 후 값을 증가시키기 때문에 그대로  11인 것을 확인할 수 있다.


마지막으로 iNumber의 경우는 아무것도 진행하지 않았지만 위에서 후치 연산을 진행했기 때문에


12로 바뀐 것을 볼 수 있습니다.


삼항연산자


삼항연산자는 조건 ? 값1 : 값2의 형태로 사용이 된답니다.


앞의 조건이 true라면 값1의 형태가 되고 조건이 false면 값2가 되는 형태입니다.


ex) Number = 10; 이라고 값을 부여한 뒤


int Number1 = Number < 5 ? 15 : 30;


이렇게 식을 나열하고


std::cout << "Number1 = " << Number1 << std::endl;


의 코드를 치게 되면


Number1 = 30


가 나오게 됩니다.


Number라는 변수를 10이라고 정했는데 5보다 크니깐 false고


false가 되면 값 2에 해당하는 값을 얻기 때문에 Number1 = 30이 되는 방식입니다.


조건문 


if문


조건문이란 특정한 조건을 측정하여 true인지 false인지에 따라서 특정한 동작을 할 것인지 판단할 때 사용합니다.


영어 if랑 비슷한 거 같아요 만약에 ~라면??


식의 구조는


if (조건)


{


    조건이 true일 때 동작되는 코드


}


로 구성되어 있습니다.


예로 저의 몸무게로 예시를 들어볼게요


int weight = 69; 저의 몸무게가 69kg이라고 가정을 했을 때 이걸 if변수로 표현을 해볼게요


 


if (weight < 70)


{


    std::cout << "내 몸무게는 70kg 이하다." << std::endl;


}


이런 식으로 작성을 하게 되면 괄호 안에 있는 조건식이 true가 되어


내 몸무게는 70kg 이하다.라고 출력이 되는 것을 확인할 수 있습니다.


또 조건식에서 {} 중괄호를 코드 블록이라고 하는데


이 코드 블록은 괄호 안에 있는 코드만을 인식해 그 코드를 동작시키는 블록입니다.


또 코드 블록에 있는 내용이 한 줄이라면 코드 블록을 생략할 수 있습니다.


ex)


if (weight < 70)


    std::cout << "내 몸무게는 70kg 이하다." << std::endl;


이런 식으로 사용할 수 있습니다.


또 if구문에는 else와 else if란게 있는데


우선 else부터 설명드릴게요


else의 경우에는 독단적으로 사용할 수 없는 구문이에요. 반드시 if와 함께 사용해야 합니다.


if 조건식이 true 일 때 코드 블록을 실행시킨다면 else 같은 경우는


if 조건식이 false 일 때 else의 코드 블록 코드를 실행시킨다고 생각하면 됩니다.


이번엔 else구문을 설명하기 위해 논리연산자를 이용해 퀴즈를 만들어 보겠습니다.


ex)


// 논리연산자를 이용한 if구문 활용


// AND연산자의 경우 둘 다 참일 경우에만 참이기 때문에 조건식이 true 이면 if 구문의 코드 블록을 실행시키고


// false라면 esle 구문의 코드 블록을 실행시킨다.


#include



int main()
{
    int weight = 0;
    // 내 몸무게를 69이라고 가정
    weight = 69;
    // 코드 실행 시 처음에 나오는 문제 및 설명
    std::cout << "퀴즈 : 내 몸무게는 몇 kg 일까?" << std::endl;
    std::cout << "몸무게를 입력하세요." << std::endl;
    // 입력 변수를 만들기 위해 Number란 변수를 생성
    int Number;
    // cin을 이용해 숫자 입력
    std::cin >> Number;
    // 논리연산자를 활용한 if구문
    if ((68 < Number) && (Number < 70))
    {
        std::cout << "내 몸무게는 " << weight << " 이다." << std::endl;
    }
    else
    {
        std::cout << "틀렸습니다." << std::endl;
    }

return 0;
}


 


이렇게 코드를 작성하고 출력을 하면


퀴즈 : 내 몸무게는 몇 kg 일까?


몸무게를 입력하세요.라는 문구가 나오게 되고


(몸무게를 입력할 수 있다)


여기서 몸무게를 69를 입력을 하면 조건식이 둘 다 참이 되어 if구문으로 들어가


내 몸무게는 69kg이다. 가 출력이 되고


다른 숫자를 입력했을 경우 조건식이 false가 되어 else 구문의 코드 블록을 실행해서


틀렸습니다. 라는 문구가 나오게 됩니다.


다음은 else if란 것에 대해서 설명드리겠습니다


else if 도 마찬가지로 독립적으로 사용할 수 없고


if의 조건식이 false일 경우 else if의 조건식을 순차적으로 검사 후


그 조건식 중 true가 나오면 해당 코드 블록을 실행 후 종료하는 개념입니다.


 


위의 코드를 참고해서 하나 더 만들어볼게요.


#include


int main()
{
    int weight = 0;
    // 내 몸무게를 69이라고 가정
    weight = 69;
    // 코드 실행 시 처음에 나오는 문제 및 설명
    std::cout << "퀴즈 : 내 몸무게는 몇 kg 일까?" << std::endl;
    std::cout << "몸무게를 입력하세요." << std::endl;
    // 입력 변수를 만들기 위해 Number란 변수를 생성
    int Number;
    // cin을 이용해 숫자 입력
    std::cin >> Number;
    // 논리연산자를 활용한 if구문
    if ((68 < Number) && (Number < 70))
    {
        std::cout << "내 몸무게는 " << weight << " 이다." << std::endl;
    }


    else if ((60 < Number) && (Number < 66))
    {
        std::cout << "조금 근접합니다." << std::endl;
    }


    else if ((65 < Number) && (Number < 69))
    {
        std::cout << "완전 근접합니다" << std::endl;
    }


    else if ((69 < Number) && (Number < 75))
    {
        std::cout << "완전 근접합니다" << std::endl;
    }


    else if ((74 < Number) && (Number < 80))
    {
        std::cout << "완전 근접합니다" << std::endl;
    }
    else
    {
        std::cout << "틀렸습니다." << std::endl;
    }

return 0;
}


 


뭔가 내용이 이상하긴 한데 어쨌든!! 이런 식으로 활용할 수가 있습니다!


switch문


if문에서는 조건식이 참인지 거짓인지를 판단해 동작을 시켰는데


switch문은 어떤 값인지를 판단해서 동작시킬 때 활용을 합니다.


switch문 형태는


switch(변수(값))


{


case 체크하고자하는 값(상수):


    break;


}


의 형태로 이루어져 있습니다.


 


여기서 중요한 게 case 뒤에 변수를 넣으면 안 된다는 점입니다.(보통은 enum class를 넣어주어 활용합니다)


무조건 상수를 넣어야 합니다.


 


예를 들어서


int Number = 1;


int Number1 = 5;


switch (Number1)


{


case Number: <-- 이렇게 사용할 수 없습니다.


    break;


}


 


또 여기서 중요한 게 있는데 case구문 끝나는 시점에 break; 가 없으면 해당 구문 이후의 구문까지 한 번에 출력이 된다


 


int Number1 = 4;  // 라고 가정했을 때


 


switch (Number1)

{

case 1:

    std::cout << "Number1 의 값은 1입니다." << std::endl;

    break;

case 2:

    std::cout << "Number1 의 값은 2입니다." << std::endl;

    break;

case 3:

    std::cout << "Number1 의 값은 3입니다." << std::endl;

    break;

// case 4: 구문 끝나는 시점에 break;가 없으면 그 뒤에 구문까지 출력이 된다.

case 4:
    std::cout << "Number1 의 값은 4입니다." << std::endl;

case 5:
    std::cout << "Number1 의 값은 5입니다." << std::endl;
    break;

}


이렇게 코드 구성을 하게 되면 switch의 조건의 값이 4이기 때문에


case 4: 의 구문의 코드를 수행하는데 마지막에  break; 가 없어


case 5:의 코드까지 수행을 하게 된다.


ex)


Number1 의 값은 4입니다.


Number1 의 값은 5입니다.


또 switch문에는 if문의 else처럼 default란게 있는데 이 default는


조건이 case 구문중에 하나도 없을 경우 default 코드 블록을 실행하게 된다.


 


int Number1 = 7


switch (Number1)

{

case 1:

    std::cout << "Number1 의 값은 1입니다." << std::endl;

    break;

case 2:

    std::cout << "Number1 의 값은 2입니다." << std::endl;

    break;

case 3:

    std::cout << "Number1 의 값은 3입니다." << std::endl;


    break;

default:

    std::cout << "체크할 수 없는 숫자입니다." << std::endl;


    break;

}


 


조건의 값이 7인데 case 구문에 7이란 상수값이 없기 때문에 default의 코드를 수행하여


체크할 수 없는 숫자입니다. 라는 문구가 나오게 된다.


열거체


switch문을 배우면서 열거체 타입이란 것도 배웠습니다!


열거체란 상수에 이름을 부여해줄 수 있는 문법입니다.


열거체의 코드 구성은


enum 원하는 열거체 이름


{


};


입니다


여기서 열거체 이름은 없어도 상관이 없다고 합니다

만약에 열거체 이름을 작성해준다면 열거체 이름은 해당 열거체의 변수 타입이 됩니다.

즉, 사용자가 변수 타입을 만들 수 있게 되는 것이라고 합니다.


선생님께서 직업을 활용해서 설명을 해주셔서 저도 직업으로 한번 만들어 보겠습니다



#include 


// 가독성을 위해서 std::를 생략하겠습니다.
using namespace std;
// enum을 활용해 JOB종류 구성.
enum JOB
{
    JOB_NONE,         // 0   
    JOB_KNIGHT,       // 1
    JOB_ARCHER,       // 2
    JOB_MAGICION,     // 3
    JOB_ASSASSIN      // 4
};

int main()
{


// cout을 활용한 직업 선택 멘트 구성
    cout << "직업을 선택해주세요" << endl;
    cout << "1. 나이트" << endl;
    cout << "2. 아쳐" << endl;
    cout << "3. 매지션" << endl;
    cout << "4. 어쌔신" << endl;
// 스위치 값을 선택하기 위한 인트 변수 활용
    int jNumber = 0;
// cin을 활용해 본인이 원하는 직업을 선택할 수 있게끔 설정
    cin >> jNumber;
// 스위치문 값에 jNumber을 넣음으로써 본인이 원하는 직업 선택 가능.
    switch (jNumber)
    {
    case JOB_KNIGHT:
        cout << "당신은 나이트를 선택하였습니다." << endl;
        break;
    case JOB_ARCHER:
        cout << "당신은 아쳐를 선택하였습니다." << endl;
        break;
    case JOB_MAGICION:
        cout << "당신은 매지션을 선택하였습니다." << endl;
        break;
    case JOB_ASSASSIN:
        cout << "당신은 어쌔신을 선택하였습니다." << endl;
        break;


// 잘못 선택했을 경우의 default 값
    default:
        cout << "잘못 선택하였습니다." << endl;
        break;
    }

return 0;
}


 

관련자료

댓글 0
등록된 댓글이 없습니다.
전체 422 / 7 페이지
번호
제목
이름

강의실

🏆 포인트 랭킹 TOP 10
순위 닉네임 포인트
1 no_profile 타키야겐지쪽지보내기 자기소개 아이디로 검색 전체게시물 82,042
2 no_profile 라프텔쪽지보내기 자기소개 아이디로 검색 전체게시물 51,280
3 no_profile 동가리쪽지보내기 자기소개 아이디로 검색 전체게시물 32,591
4 no_profile Revolution쪽지보내기 자기소개 아이디로 검색 전체게시물 28,199
5 서번트쪽지보내기 자기소개 아이디로 검색 전체게시물 23,416
6 no_profile 닥터스쪽지보내기 자기소개 아이디로 검색 전체게시물 22,310
7 no_profile 불멸의행복쪽지보내기 자기소개 아이디로 검색 전체게시물 13,822
8 no_profile 호롤롤로쪽지보내기 자기소개 아이디로 검색 전체게시물 13,500
9 no_profile 검은고양이쪽지보내기 자기소개 아이디로 검색 전체게시물 13,246
10 no_profile 하늘2쪽지보내기 자기소개 아이디로 검색 전체게시물 13,239
알림 0