C·Java·Python 코드 실행 추적법
연산자, 함수 호출, 객체와 컬렉션의 상태를 줄 단위로 추적해 코드형 문제를 푸는 방법입니다.
관련 시험 정보처리기사9급 컴퓨터일반
C의 식과 포인터
C 코드는 선언으로 자료형과 초기값을 적은 뒤, 각 문장의 대입 결과를 별도 표에 기록해야 합니다. 포인터는 주소를 저장하고 *p는 그 주소의 값을 읽거나 바꾸므로 p, *p, &p를 같은 값으로 취급하면 안 됩니다.
- 후위 증감은 현재 식에서 기존 값을 사용한 뒤 값을 바꾼다.
- 배열 이름은 많은 식에서 첫 원소 주소로 변환되지만 배열 자체와 포인터 변수는 동일하지 않다.
- 정수 나눗셈은 소수부를 버리므로 피연산자 자료형을 먼저 확인한다.
Java의 객체와 다형성
참조 변수의 선언형은 호출 가능한 멤버를 제한하고, 실제 객체형은 오버라이딩된 인스턴스 메서드의 실행 대상을 결정합니다. 필드와 static 메서드는 다형적 디스패치와 다르게 해석될 수 있어 표로 분리해야 합니다.
- 오버로딩은 매개변수 목록, 오버라이딩은 상속 관계와 같은 시그니처가 기준이다.
- finally는 일반적으로 예외 여부와 관계없이 실행되지만 강제 종료 상황은 예외다.
- equals와 ==는 객체의 논리적 동등성과 참조 동일성을 구분한다.
Python의 컬렉션과 범위
Python은 들여쓰기가 블록을 만들며 슬라이스의 끝 인덱스는 포함하지 않습니다. 리스트는 변경 가능하고 튜플은 변경 불가능하므로 함수에 전달한 뒤 원본이 바뀌는지 판단할 때 객체의 변경 가능성을 확인합니다.
- range(start, stop, step)의 stop은 포함되지 않는다.
- and와 or는 항상 bool만이 아니라 평가를 결정한 피연산자를 반환할 수 있다.
- 얕은 복사는 중첩 객체를 공유할 수 있다.
시험에 바로 쓰는 비교표
| 구분 | 먼저 확인할 것 | 대표 함정 | 검산 방법 |
|---|---|---|---|
| C | 자료형·초기값·연산 순서 | 정수 나눗셈, 포인터 역참조 | 변수별 값 표 작성 |
| Java | 상속 관계·선언형·실제형 | 오버로딩과 오버라이딩 | 호출 가능한 멤버와 실행 메서드 분리 |
| Python | 자료형·변경 가능성·범위 | 슬라이스 끝, 얕은 복사 | 각 반복 직후 컬렉션 상태 기록 |
지문 표현을 판단 기준으로 바꾸기
- 기존 값을 식에 사용한 뒤 1 증가 → 후위 증가
- 실제 객체의 재정의 메서드 실행 → 동적 바인딩
- 끝 인덱스를 포함하지 않는 부분 추출 → 슬라이싱
자주 틀리는 판단
- 증감 연산의 사용 시점과 실제 값 변경 시점을 혼동
- Java 참조 변수형과 실제 객체형을 같은 역할로 판단
- Python 슬라이스의 끝 인덱스를 포함한다고 계산
개념을 확인했다면 실제 문제에서 판단 기준을 적용해보세요.
분야별 문제 풀기