티스토리 뷰

상수형 메서드

 const 키워드를 통해 상수를 만드는 방법은 간단하다. int a와 같은 변수 선언 앞에 const를 붙이면 a 값이 상수로 선언되며 초기 값을 그대로 유지하고 다른 값을 새로 대입할 수 없게한다. (volatile 키워드나 직접 메모리 주소에 접근하여 변경할 수도 있긴하다.)

 

 

상수 매개변수

이런 const 키워드는 일반 메서드, 클래스 멤버 메서드, 생성자의 매개변수에 키워드로도 붙일 수도 있다. 이렇게하면 const 값으로 지정된 매개변수는 읽기 전용으로 선언되어 변경이 되지 않아야할 매개변수를 수정하는 실수를 하지 않게된다.

 

const 매개변수
#include <iostream>

using namespace std;

void processData(const int data) {
    data = 10; // 컴파일 오류!!!: read-only 수정 오류
    cout << data << endl;
}

int main()
{
    // 사용자가 실수로 데이터를 변경하는 경우
    int value = 42;
    processData(value);
    return 0;
}

 

 

상수 메서드

const의 또 다른 쓰임새로는 멤버 메서드를 상수형으로 지정할 수 있다는 것이다. 메서드의 소괄호 뒤에 const를 적게되면 상수형 메서드가 선언되고 이는 메서드 내부에서 자기 자신의 객체(*this)의 멤버를 수정할 수 없다는 것을 의미한다. 즉, 클래스 객체의 상태를 변경하지 않고 읽기할 수 있도록 만든다.

 

실수 예방

이는 특정 값을 조회/반환하는 get 함수에 사용할 수 있으며, 실수로 데이터가 변경/손상될 가능성을 예방할 수 있게 된다.

 

상수형 메서드
class Account {
public:
    Account() : money(0) { }
    Account(int money) : money(money) { }
    
    void Deposit(int d) {
        money += d;
        cout << d << "원을 예금했다!!" << endl;
    }
    
    void Draw(int d) {
        if (money - d >= 0) {
        	money -= d;
        	cout << d << "원을 인출했다!!" << endl;
    	}
    }
    
    // 현재가진 잔액을 확인하는 함수
    int GetMoney() const { // 상수형 메서드
        money++; // 컴파일 에러!!
        return money;
    }
    
private:
	int money;
}

 

위 코드는 은행 잔금을 통제하는 기기로 조회 함수(GetMoney)에서 현재 잔액을 1원씩 증가시키는 오류를 const 선언을 통해 방지하고 있다.

 

상수형 메서드 호출

상수형 메서드의 다른 장점은 상수 클래스 인스턴스를 생성하면 해당 상수 인스턴스는 상수 메서드만 호출할 수 있다. 하여 상수 메서드를 사용할 수 있는 곳에는 최대한 사용하는 것이 좋다.

 

상수 메서드 호출
const Account doodle;
doodle.Deposit(50); // doodle은 상수이므로 상수형이 아닌 메서드를 호출할 수 없다!
cout << doodle.GetMoney() << endl; // GetMoney는 상수형 메서드이므로 호출할 수 있다!

 

'Computer Language > C & C++' 카테고리의 다른 글

[C++] 상속 2) 상속 관계의 생성/소멸자  (0) 2023.12.19
[C++] 상속 1) 상속의 기초  (0) 2023.12.19
[C++] 정적 멤버  (1) 2023.12.18
[C++] 깊은 복사와 얕은 복사  (0) 2023.12.14
[C++] 동적 할당  (1) 2023.12.14
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함