C++ Chapter 7.11 : 방어적 프로그래밍 개념
카테고리: Cpp
태그: Cpp Programming
인프런에 있는 홍정모 교수님의 홍정모의 따라 하며 배우는 C++ 강의를 듣고 정리한 필기입니다. 😀
🌜 [홍정모의 따라 하며 배우는 C++]강의 들으러 가기!
chapter 7. 함수 : 방어적 프로그래밍의 개념
Sematic error
와 Violated 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() 길이를 넘는 정수를 입력하면 다시 입력받을 수 있도록 코드를 짜야한다. 사용자가 개발자의 의도와 다르게 사용하는 여러가지 경우를 미리 생각해야 한다.
🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄
댓글남기기