Program Language/C++ 언어

11. C++ 함수의 범위와 클래스

parkes811 2024. 6. 7. 01:45

 

  • C++ 함수와 범위에 대한 이해

- C++ 프로그래밍 언어는 강력한 기능을 제공하며, 그 중 함수와 범위는 핵심적인 개념입니다.

- 이를 통해 코드의 가독성과 유지보수성을 높일 수 있는 방법을 배울 수 있습니다.

 

함수 선언과 정의

- C++에서 함수는 프로그램의 여러 부분에서 반복적으로 사용할 수 있는 코드 블록입니다. 함수는 선언과 정의로 나뉩니다. 선언은 함수의 이름과 매개변수를 명시하고, 정의는 실제 함수의 동작을 구현합니다.

// 함수 선언
int add(int a, int b);

// 함수 정의
int add(int a, int b) {
    return a + b;
}
  • 함수 참조

- 함수 참조는 함수가 정의된 위치와 다른 곳에서 그 함수를 사용할 수 있게 해줍니다. 이는 코드의 재사용성을 높여주며, 모듈화된 프로그래밍을 가능하게 합니다.

 

 

  • 기본 인수

- 기본 인수는 함수 호출 시 인수를 생략할 수 있게 해주는 기능입니다. 기본값을 미리 정의해 두면, 호출 시 특정 인수를 제공하지 않아도 됩니다.

void printMessage(string message = "Hello, World!") {
    cout << message << endl;
}

 

 

  • 함수 오버로딩

- 함수 오버로딩은 같은 이름의 함수를 여러 개 정의할 수 있게 해줍니다. 다만 매개변수의 타입이나 개수가 달라야 합니다. 이는 함수 사용의 유연성을 높여줍니다.

int multiply(int a, int b) {
    return a * b;
}

double multiply(double a, double b) {
    return a * b;
}

 

 

  • 인라인 함수

- 인라인 함수는 호출 시 함수 호출 오버헤드를 줄이기 위해 사용됩니다. 

- 컴파일러는 인라인 함수를 호출하는 대신 함수 본문을 호출 위치에 삽입합니다.

inline int square(int x) {
    return x * x;
}

 

 


 

C++ 범위와 네임스페이스

 

  • 변수의 범위와 생명주기

- 변수의 범위는 변수가 유효한 코드 영역을 의미합니다.

- 변수는 함수 내에서 선언될 수도 있고, 전역적으로 선언될 수도 있습니다. 각 변수는 자신의 범위 내에서만 유효합니다.

int globalVar = 10; // 전역 변수

void func() {
    int localVar = 5; // 지역 변수
    // localVar은 func 함수 내에서만 유효
}

 

 

  • 범위 링크

- 범위 링크는 변수나 함수가 다른 파일에서 참조될 수 있게 하는 기능입니다.

- extern 키워드를 사용하면 다른 파일에 선언된 변수를 참조할 수 있습니다.

// 파일 1
int sharedVar = 100;

// 파일 2
extern int sharedVar;

 

 

  • 네임스페이스

- 네임스페이스는 이름 충돌을 방지하고 코드를 조직화하는 데 도움을 줍니다.

- 네임스페이스를 사용하면 동일한 이름을 가진 함수나 변수를 다른 네임스페이스에서 사용할 수 있습니다.

namespace Math {
    int add(int a, int b) {
        return a + b;
    }
}

namespace Physics {
    int add(int a, int b) {
        return a - b;
    }
}

 

 


 

C++ 클래스

  • 클래스의 개념

- 클래스는 객체 지향 프로그래밍의 기본 단위로, 데이터와 데이터를 처리하는 함수를 하나의 단위로 묶는 역할을 합니다.

- 클래스는 객체의 설계도와 같은 역할을 하며, 객체는 클래스의 인스턴스입니다.

class Car {
public:
    string brand;
    int year;

    void displayInfo() {
        cout << "Brand: " << brand << ", Year: " << year << endl;
    }
};

 

 

  • 생성자와 소멸자

- 생성자는 객체가 생성될 때 호출되는 특수한 함수로, 주로 객체의 초기화를 담당합니다.

- 소멸자는 객체가 소멸될 때 호출되며, 주로 자원을 해제하는 데 사용됩니다.

- 생성자와 소멸자는 클래스 이름과 같으며, 생성자는 매개변수를 가질 수 있지만 소멸자는 매개변수를 가질 수 없습니다.

class Car {
public:
    string brand;
    int year;

    // 생성자
    Car(string b, int y) {
        brand = b;
        year = y;
    }

    // 소멸자
    ~Car() {
        cout << "Destructor called for " << brand << endl;
    }

    void displayInfo() {
        cout << "Brand: " << brand << ", Year: " << year << endl;
    }
};

 

 

  • 멤버 변수와 멤버 함수

- 클래스는 데이터 멤버(변수)와 멤버 함수(메서드)로 구성됩니다.

- 데이터 멤버는 객체의 상태를 저장하며, 멤버 함수는 객체의 동작을 정의합니다.

class Car {
public:
    string brand;
    int year;

    void displayInfo() {
        cout << "Brand: " << brand << ", Year: " << year << endl;
    }
};

 

 

  • this 포인터

- this 포인터는 객체 자신을 가리키는 포인터입니다.

- 멤버 함수 내에서 객체의 멤버에 접근하거나 객체 자신을 반환할 때 유용합니다.

- 특히 동일한 이름을 가진 매개변수와 멤버 변수를 구분할 때 사용됩니다.

class Car {
public:
    string brand;
    int year;

    Car(string brand, int year) {
        this->brand = brand;
        this->year = year;
    }

    void displayInfo() {
        cout << "Brand: " << brand << ", Year: " << year << endl;
    }
};