Community

개발자 99% 커뮤니티에서 수다 떨어요!

← Go back
Assignment #09
#pragmatic
2년 전
509

💡 연습문제 16. 간단한 현실 점검. 다음 '불가능한' 것들 중 무엇이 실제로 일어날 수 있는가?

  1. 한 달이 28일보다 적은 것.

  2. 시스템 콜의 오류 메시지: 현재 디렉터리에 접근할 수 없음

  3. C++에서, a = 2; b = 3; 하지만 (a+b)는 5가 아님

  4. 내각의 합이 180도가 아닌 삼각형

  5. 1분이 60초가 아님

  6. (a + 1) <= a

✅ 풀이 과정

  1. 가장 짧은 달인 2월이 28일, 윤년에는 29일이므로 28일보다 적을 수 없다. (X)

  2. 디렉터리가 삭제, 변경되었거나 경로가 정확하지 않을 경우, 또는 디렉터리 접근 권한을 얻지 못한 경우 접근할 수 없다. (O)

  3. + 연산자를 오버로딩 했다면 (a+b)가 5가 아닐 수 있다. (O)

  4. 모든 삼각형의 내각의 합은 180도이기 때문에 불가능하다. (X)

  5. 윤초가 존재하므로 1분이 61초일 수도 있다. (O)

  6. a가 음수일 경우 (a+1) <= a 가 성립하지 않을 수 있다. (O)

💡 책에 있는 해답

  1. 1752년 9월은 30일이 아니라 19일 밖에 없다. 그레고리 교황의 달력 개혁의 일환으로 달력의 날짜를 맞추기 위해 이렇게 만들었다.

  2. 다른 프로세스가 디렉터리를 지웠을 수도 있고, 디렉터리를 읽을 권한이 없을 수도 있다. 드라이브가 마운트되지 않았을 수도 있고, 그 밖에 여러가지 문제가 있을 수 있다. 어떤 상황인지 감이 왔으리라.

  3. 이 문제의 함정은 a와 b의 타입을 명시하지 않았다는 점이다. 연산자 오버로딩 때문에 +, =, !=가 예상과는 다르게 동작할 수 있다. 또 a와 b가 동일한 변수를 가리키고 있을 수도 있다. 그럴 경우 두 번째 할당문이 첫번째 할당문에서 저장한 값을 덮어쓸 것이다. 또한 프로그램에 동시성이 있는데 이에 대한 고려가 되지 않아서 a의 값이 덧셈이 수행되기 직전에 바뀌었을 수도 있다.

  4. 비유클리드 기하학에서 삼각형 내각의 합은 180도가 아닐 수 있다. 구 표면에 그려진 삼각형을 생각해 보라.

  5. 윤초 때문에 61초일 수 있다.

  6. 언어에 따라서 숫자가 최대 숫자 한계를 넘어가는 바람에 a+1의 부호가 음수로 바뀔 수도 있다.