C++ Chapter 7.11 : 방어적 프로그래밍 개념

Date:     Updated:

카테고리:

태그:

인프런에 있는 홍정모 교수님의 홍정모의 따라 하며 배우는 C++ 강의를 듣고 정리한 필기입니다. 😀
🌜 [홍정모의 따라 하며 배우는 C++]강의 들으러 가기!


chapter 7. 함수 : 방어적 프로그래밍의 개념

Sematic errorViolated assumption를 방지하는 것.


🔔 Sematic error

Sematic error : 문법 상 문제는 없지만 의미적으로 잘못 코딩한 경우

if (x >= 5)
    cout << "x is greater than 5" << endl;

위 코드의 경우 문법상으론 전혀 문제가 없지만 “x 는 5보다 크다”는 것을 출력하고 싶었으면 if (x >= 5)가 아닌 if (x > 5) 조건을 걸었어야 했다. 이렇게 문법상으론 문제가 없어 컴파일 떄도, 런타임 때도 문제가 생기지 않지만 프로그래머의 의미에 맞지 않게 잘 못 코딩한 경우를 Sematic error라고 한다.


🔔 Violated assumption

Violated assumption : 가정 위반. 사용자가 개발자가 작성한 의도와 다르게 사용하는 경우

string hello = "Hello, my name is Jack";

cout << hello.length() << endl; // 22 출력

int ix;
cin >> ix;

cout << hello[ix] << endl; // 여기서 사용자가 1000를 입력해버리면 런타임 에러 발생

“Hello, my name is Jack” 문자열 리터럴로 초기화 되있는 변수 hello의 크기는 22 이기 때문에 사용자가 ix에 1024를 입력한 후 hello[ix]를 실행해버리면 런타임 에러가 발생한다. 이와 같이 사용자가 개발자가 작성한 의도와 다르게 사용하여 잘못된 방향으로 가는 것을 Violated assumption 라고 한다.

string hello = "Hello, my name is Jack";

while(true)
{
    int ix;
    cin >> ix;

    if (ix > = 0 && ix <= hello.size() - 1)
    {
        cout << hello[ix] << endl; 
        break;
    }
    
    else
        cout << "Please try again." << endl;
}

이렇게 사용자가 hello.size() 길이를 넘는 정수를 입력하면 다시 입력받을 수 있도록 코드를 짜야한다. 사용자가 개발자의 의도와 다르게 사용하는 여러가지 경우를 미리 생각해야 한다.



🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우 
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄

맨 위로 이동하기

댓글남기기