이 글에서 소스코드 공부에 임하는 요령을 몇가지 소개했습니다. 이번 글에서는 심화해서 요령을 더 말씀드려보겠습니다. 소스코드 실행 흐름을 알아차리는 요령입니다.
저 글에서 소개한 변수 선언문을 예로 들면요.
int a = 10;
이 구문을 딱 보면 우선 자료형 변수명 대입기호 값 이렇게 구성 성분 분류를 떠올려보셔야 하는데요. 여기에는 이유가 있습니다.
우선 변수니까 메모리에 값을 저장하는 공간을 예약한다고 생각해야 하는데요. 이는 처리할 값이 어떤 목적 달성을 위해 지정되어야 한다는 것을 의미합니다. 정수형 자료형인 int이니, 뭔가 정수로 표시하는 처리를 한다는게 유추되죠.
많은 경우 경험상 정수형 값으로 할 수 있는 작업은
• 숫자끼리 더하거나 빼거나 곱하거나 나누거나… 등등의 작업
• 프로그램 작동 상황에서 숫자를 표시하기 위한 준비 과정
• 그외 다른 작업
이런 용도가 있을 것임을 미루어 짐작해볼 수 있을 것입니다.
이렇게 용도를 미루어 짐작할 수 있다면 프로그램 실행 흐름을 아는 것이고, 실행 결과도 심상으로 이어가면서 소스코드를 읽는게 되서 익숙해질수록 읽는 속도도 빨라지고 기능 추론도 빨라집니다.
실재로 위와 같은 변수 선언이 나오고 아래에 이렇게 더 나오면
int b = 5;
int c = a + b;
이렇게 나오면 10과 5를 더한다는 의미가 되니 추론이 맞다면 예측한게 되죠.
이보다 조금더 난이도가 있는 구문인
for (int i = 0; i < 10; i++) {
i = i + 1;
}
이 구문도 그냥 확 임해서 들여다보면 좋습니다.
중요한게 for 가 우선 나왔으니 for 루프라는 것이구요. for 루프의 규칙에 의해 실행됨을 떠올려보면 됩니다. 괄호안에 들어간 조건이 중요한데요. 우선 i를 0으로 초기화해서 10보다 작을 동안 한순번에 i를 1씩 증가시킨다는 의미입니다.
이 조건에서 블락안의 구문을 이해하면 되는 것이죠. i = i + 1;은 위 조건에서 보면 i가 10보다 작은 동안 1씩 증가시킨게 i 이듯이
• i = 0부터 i < 10까지 10번 동안 루프가 돌게 됨
• 이로부터 i 값이 정해지고 블락안의 실행이 10번 돌면서 i의 최종값이 도출됨
이런식으로 되는데요. i = 0일때는 i = 0 + 1, i = 1일때는 i = 1 + 1, i = 2일때는 i = 2 + 1, … 이렇게 이어지면서 10번 반복해서 i = 10이 되는 것임을 이해하면 됩니다.
이런 흐름 예측이 성공하면 난이도를 조금씩 높혀서 객체지향 방법론으로 정의된 MVVM 구조와 같은 것도 이해가 되게 됩니다.
무엇보다도 중요한게 코드를 언어화해서 표현해보는 능력도 있으면 좋다는 것입니다. 물론 현업에서 종사하시는 엔지니어들의 경우에도 논리적으로 근본적인 현상은 언어 표현이 복잡해질 수 있어서 보여주어야 할때 소스코드 자체를 보여주는 경우가 많은데요. 이런 것도 한번쯤 언어로 표현한다는 느낌으로 보면 좋습니다. 이 때 중요한게 소스코드 각 구성 요소들의 이름을 잘 알아두는 것입니다.
void sum(int a, int c);
이런 구문이 무엇인지 아시나요? 특별히 괄호안의 매개변수를 나열하는 부분이나 전체 함수명까지 통틀어 말하면 “함수 시그니처”라고 하면 됩니다. 때로는 C 언어라면 함수 프로토타입이라고 해서 용도가 조금 다른 이름도 쓰구요. 제일 중요한 것이 이런 사소한 부분의 이름도 잘 알아두면 언어화하는 효율이 높아져서 기억도 오래남고 개념 확장도 잘 된다는 것입니다.
그런데 누구나 이런 것을 설명에서 알려주지는 않으니, 최대한 많은 교재, 인터넷 자료, 논문들을 찾아보는게 중요하죠.
소스코드 읽을때 표류안하는 또하나의 방법이었습니다.
한가지 더 참고로 제 경우 정보철학서와 같이 원리를 논구하는 분야의 글을 자주 읽으면서 언어감각을 끌어올렸는데요. 철학처럼 배후의 원리를 추구하는 분야도 함께 참조하면 심상이어가는 것도 단련되고 정련된 언어가 가능해지니 여러분도 살펴보시길 추천드립니다.