프로그래밍/C++

C++ 기본 문법: 데이터 타입, 변수, 상수, 연산자, 조건문 및 반복문

shimdh 2025. 1. 31. 21:56
728x90

1. 데이터 타입 (Data Types)

데이터 타입은 프로그래밍에서 데이터를 표현하는 방법을 정의합니다. C++에서는 다양한 데이터 타입을 제공하며, 각 타입은 특정한 종류의 값을 저장하기 위해 설계되었습니다. 데이터 타입을 올바르게 이해하고 사용하는 것은 프로그램의 효율성과 정확성을 높이는 데 필수적입니다.

1.1 기본 데이터 타입

C++의 기본 데이터 타입은 크게 정수형, 실수형, 문자형, 부울형으로 나뉩니다.

1.1.1 정수형 (Integer)

정수형은 정수를 저장하는 데 사용됩니다. int, short, long, unsigned int 등이 있으며, 각각의 크기와 표현 범위가 다릅니다.

#include <iostream>
using namespace std;

int main() {
    int age = 25; // 일반적인 정수형
    long population = 7800000000; // 더 큰 범위의 정수형
    unsigned int positiveNumber = 100; // 음수가 아닌 정수

    cout << "나이: " << age << endl;
    cout << "세계 인구: " << population << endl;
    cout << "양수: " << positiveNumber << endl;

    return 0;
}

1.1.2 실수형 (Floating Point)

실수형은 소수점을 포함한 숫자를 저장합니다. floatdouble이 있으며, double이 더 높은 정밀도를 제공합니다.

#include <iostream>
using namespace std;

int main() {
    float height = 5.9f; // float는 f 접미사를 사용
    double pi = 3.14159; // double은 더 높은 정밀도

    cout << "키: " << height << " feet" << endl;
    cout << "원주율: " << pi << endl;

    return 0;
}

1.1.3 문자형 (Character)

문자형은 단일 문자를 저장하는 데 사용됩니다. char는 작은 따옴표(')로 묶인 문자를 저장합니다.

#include <iostream>
using namespace std;

int main() {
    char initial = 'A'; // 단일 문자 저장
    cout << "이니셜: " << initial << endl;

    return 0;
}

1.1.4 부울형 (Boolean)

부울형은 참(true) 또는 거짓(false) 값을 저장합니다. 조건문에서 주로 사용됩니다.

#include <iostream>
using namespace std;

int main() {
    bool isStudent = true; // 참 또는 거짓 값 저장
    cout << "학생인가요? " << (isStudent ? "네" : "아니오") << endl;

    return 0;
}

1.2 사용자 정의 데이터 타입

기본 데이터 타입 외에도 C++에서는 사용자 정의 데이터 타입을 만들 수 있습니다. 이를 통해 더 복잡한 데이터를 효과적으로 관리할 수 있습니다.

1.2.1 구조체 (Struct)

구조체는 여러 데이터 타입을 하나로 묶는 방법입니다. 예를 들어, 사람의 이름과 나이를 하나의 구조체로 묶을 수 있습니다.

#include <iostream>
#include <string>
using namespace std;

struct Person {
    string name;
    int age;
};

int main() {
    Person person1;
    person1.name = "John";
    person1.age = 30;

    cout << "이름: " << person1.name << ", 나이: " << person1.age << endl;

    return 0;
}

1.2.2 열거형 (Enum)

열거형은 관련된 상수에 이름을 부여하여 코드의 가독성을 높입니다. 예를 들어, 색상을 나타내는 상수를 정의할 수 있습니다.

#include <iostream>
using namespace std;

enum Color { RED, GREEN, BLUE };

int main() {
    Color favoriteColor = GREEN;

    switch (favoriteColor) {
        case RED: cout << "좋아하는 색상: 빨강" << endl; break;
        case GREEN: cout << "좋아하는 색상: 초록" << endl; break;
        case BLUE: cout << "좋아하는 색상: 파랑" << endl; break;
    }

    return 0;
}

1.3 형변환 (Type Casting)

형변환은 한 데이터 타입을 다른 데이터 타입으로 변환하는 과정입니다. C++에서는 암묵적 형변환과 명시적 형변환이 있습니다.

1.3.1 암묵적 형변환

컴파일러가 자동으로 형변환을 수행합니다.

#include <iostream>
using namespace std;

int main() {
    int a = 10;
    double b = a; // int -> double로 자동 변환

    cout << "a: " << a << ", b: " << b << endl;

    return 0;
}

1.3.2 명시적 형변환

개발자가 직접 형변환을 지정합니다. static_cast를 사용하는 것이 일반적입니다.

#include <iostream>
using namespace std;

int main() {
    double c = 9.8;
    int d = static_cast<int>(c); // double -> int로 변환

    cout << "c: " << c << ", d: " << d << endl;

    return 0;
}

2. 변수와 상수 (Variables and Constants)

2.1 변수 (Variables)

변수는 데이터를 저장하는 메모리 공간입니다. 프로그램 실행 중에 값이 변경될 수 있습니다. 변수를 사용하면 데이터를 임시로 저장하고 필요할 때 다시 사용할 수 있습니다.

#include <iostream>
using namespace std;

int main() {
    int age = 25; // 변수 선언 및 초기화
    cout << "나이는: " << age << endl; // 출력: 나이는: 25

    age = 30; // 변수 값 변경
    cout << "변경된 나이는: " << age << endl; // 출력: 변경된 나이는: 30

    return 0;
}

2.1.1 변수의 특징

  • 값 변경 가능.
  • 다양한 데이터 타입(int, float, char 등)으로 선언 가능.
  • 프로그램의 유연성을 높임.

2.2 상수 (Constants)

상수는 한 번 설정된 값을 변경할 수 없습니다. const 키워드를 사용하여 정의하며, 주로 고정된 값이나 매직 넘버 대신 사용됩니다.

#include <iostream>
using namespace std;

int main() {
    const float PI = 3.14; // 상수 정의
    cout << "원주율: " << PI << endl; // 출력: 원주율: 3.14

    // 다음 줄은 오류가 발생함 (PI는 수정 불가능)
    // PI = 3.14159;

    return 0;
}

2.2.1 상수의 특징

  • 값 변경 불가능.
  • 코드의 가독성과 안정성을 높임.

3. 연산자 (Operators)

연산자는 데이터와 변수를 조작하는 데 사용됩니다. C++에서는 다양한 연산자가 제공되며, 각각의 역할과 사용법이 다릅니다.

3.1 산술 연산자

산술 연산자는 기본적인 수학적 계산을 수행합니다.

#include <iostream>
using namespace std;

int main() {
    int a = 10, b = 3;

    cout << "덧셈: " << (a + b) << endl; // 13
    cout << "뺄셈: " << (a - b) << endl; // 7
    cout << "곱셈: " << (a * b) << endl; // 30
    cout << "나눗셈: " << (a / b) << endl; // 3
    cout << "모듈로: " << (a % b) << endl; // 1

    return 0;
}

3.2 비교 연산자

비교 연산자는 두 값을 비교하여 불리언(true 또는 false) 값을 반환합니다.

#include <iostream>
using namespace std;

int main() {
    int x = 5, y = 10;

    cout << (x == y ? "같습니다." : "다릅니다.") << endl; // 다릅니다.
    cout << (x < y ? "x는 y보다 작습니다." : "x는 y보다 크거나 같습니다.") << endl; // x는 y보다 작습니다.

    return 0;
}

3.3 논리 연산자

논리 연산자는 여러 조건을 결합하거나 반전시키는 데 사용됩니다.

#include <iostream>
using namespace std;

int main() {
    bool a = true, b = false;

    if (a && !b) {
        cout << "조건 만족" << endl; // 조건 만족
    }

    if (a || b) {
        cout << "하나 이상의 조건 만족" << endl; // 하나 이상의 조건 만족
    }

    return 0;
}

3.4 대입 연산자

대입 연산자는 변수에 값을 할당할 때 사용됩니다. 복합 대입 연산자도 있습니다.

#include <iostream>
using namespace std;

int main() {
    int num = 5;

    num += 2; // num은 이제 7
    cout << "num: " << num << endl; // 출력: num: 7

    num *= 3; // num은 이제 21
    cout << "num: " << num << endl; // 출력: num: 21

    return 0;
}

4. 조건문과 반복문 (Conditionals and Loops)

4.1 조건문 (Conditional Statements)

조건문은 주어진 조건이 참인지 거짓인지에 따라 프로그램이 다른 경로를 선택하도록 합니다.

4.1.1 if 문

#include <iostream>
using namespace std;

int main() {
    int number = 10;

    if (number > 0) {
        cout << "양수입니다." << endl;
    } else if (number < 0) {
        cout << "음수입니다." << endl;
    } else {
        cout << "제로입니다." << endl;
    }

    return 0;
}

4.1.2 switch 문

#include <iostream>
using namespace std;

int main() {
    char grade = 'B';

    switch (grade) {
        case 'A': cout << "우수" << endl; break;
        case 'B': cout << "좋음" << endl; break;
        case 'C': cout << "보통" << endl; break;
        default: cout << "기타" << endl;
    }

    return 0;
}

4.2 반복문 (Loops)

반복문은 지정된 횟수만큼 또는 특정 조건이 만족될 때까지 코드를 반복 실행합니다.

4.2.1 for 루프

#include <iostream>
using namespace std;

int main() {
    for (int i = 0; i < 5; i++) {
        cout << "안녕하세요! (" << i + 1 << "번째)" << endl;
    }

    return 0;
}

4.2.2 while 루프

#include <iostream>
using namespace std;

int main() {
    int count = 0;

    while (count < 5) {
        cout << "카운트: " << count + 1 << endl;
        count++;
    }

    return 0;
}

4.2.3 do-while 루프

#include <iostream>
using namespace std;

int main() {
    int j = 0;

    do {
        cout << "j값: " << j + 1 << endl;
        j++;
    } while (j < 3);

    return 0;
}

5. 실습 예제

5.1 나이 계산 프로그램

#include <iostream>
using namespace std;

int main() {
    int birthYear, currentYear = 2023;

    cout << "출생 연도를 입력하세요: ";
    cin >> birthYear;

    int age = currentYear - birthYear;
    cout << "나이는 " << age << "세입니다." << endl;

    return 0;
}

5.2 성적 평균 계산 프로그램

#include <iostream>
using namespace std;

int main() {
    int score1, score2, score3;

    cout << "세 과목의 점수를 입력하세요: ";
    cin >> score1 >> score2 >> score3;

    double average = (score1 + score2 + score3) / 3.0;
    cout << "평균 점수는 " << average << "입니다." << endl;

    return 0;
}

6. 추가 개념 및 심화 예제

6.1 배열 (Arrays)

배열은 동일한 데이터 타입의 여러 값을 저장하는 데 사용됩니다. 배열은 고정된 크기를 가지며, 인덱스를 통해 각 요소에 접근할 수 있습니다.

#include <iostream>
using namespace std;

int main() {
    int numbers[5] = {1, 2, 3, 4, 5}; // 크기가 5인 정수형 배열

    for (int i = 0; i < 5; i++) {
        cout << "numbers[" << i << "] = " << numbers[i] << endl;
    }

    return 0;
}

6.2 포인터 (Pointers)

포인터는 메모리 주소를 저장하는 변수입니다. 포인터를 사용하면 메모리 주소를 직접 조작할 수 있으며, 동적 메모리 할당과 같은 고급 기능을 구현할 수 있습니다.

#include <iostream>
using namespace std;

int main() {
    int num = 10;
    int* ptr = &num; // num의 주소를 저장

    cout << "num의 값: " << num << endl;
    cout << "num의 주소: " << ptr << endl;
    cout << "포인터를 통해 접근한 값: " << *ptr << endl;

    return 0;
}

6.3 함수 (Functions)

함수는 특정 작업을 수행하는 코드 블록입니다. 함수를 사용하면 코드를 재사용하고 모듈화할 수 있습니다.

#include <iostream>
using namespace std;

// 두 수를 더하는 함수
int add(int a, int b) {
    return a + b;
}

int main() {
    int result = add(5, 3);
    cout << "5 + 3 = " << result << endl;

    return 0;
}

6.4 클래스 (Classes)

클래스는 객체 지향 프로그래밍의 핵심 개념입니다. 클래스를 사용하면 데이터와 함수를 하나로 묶어 캡슐화할 수 있습니다.

#include <iostream>
using namespace std;

class Rectangle {
private:
    int width, height;
public:
    Rectangle(int w, int h) : width(w), height(h) {}
    int area() {
        return width * height;
    }
};

int main() {
    Rectangle rect(5, 10);
    cout << "사각형의 면적: " << rect.area() << endl;

    return 0;
}

7. 결론

C++의 기본 문법인 데이터 타입, 변수, 상수, 연산자, 조건문 및 반복문은 프로그래밍의 핵심 요소입니다. 이러한 개념들을 이해하고 활용하면 더 복잡한 프로그램을 작성하는 데 큰 도움이 됩니다. 예제를 통해 직접 코드를 작성해 보며 익숙해지는 것이 중요합니다. C++ 프로그래밍의 기초를 탄탄히 다져보세요! 추가적으로 배열, 포인터, 함수, 클래스와 같은 고급 개념도 학습하면 더욱 강력한 프로그램을 작성할 수 있습니다.

728x90