Skip to main content

5. 코드를 더 깊이 있게 이해하기

  • 아래에서는 코드를 깊게 이해하는 법에 대해 작성합니다.

5.1 '변수 역할' 프레임워크#

  • 코드를 추론할 때는 변수가 중심적인 역할을 합니다.

5.1.1 변수는 각자 다른 일을 한다#

  • 변수 역할 프레임워크는 변수들의 동작에 존재하는 차이점을 포착합니다.

5.1.2 11가지 역할#

  • 다음과 같은 11가지 역할로 분리할 수 있습니다.
이름설명
고정값(fixed value)초기화를 통해 값이 할당된 이후 값이 변경되지 않는 변수
스테퍼(stepper)루프를 반복 실행하며 값이 단계적으로 변하는 변수
플래그(flag)무엇인가 발생했거나 어떤 경우에 해당하는지를 나타내는 변수
워커(walker)워커는스태퍼와 유사하게 자료구조를 순한하지만, 스테퍼와 달리 루프 시작전에는 값을 모릅니다
최근값 보유자(most recent holder)어떤 값이 변해갈 때 가장 최근에 변경된 값을 갖는 변수
목적값 보유자(most wanted holder)목적에 해당하는 값 혹은 발견된 값 중에 찾고자 하는 조건에 부합하는 값을 갖는 변수
모집자(gatherer)모집자는 데이터를 모으거나 모은 데이터에 대해 어떤 연산을 수행하는 얻은 값을 저장하는 변수
컨테이너(container)값을 새로 추가하거나 삭제할 수 있는 자료구조(리스트, 배열, 스택, 트리...)
추적자(follower)어떤 알고리즘에서는 이전 값 혹은 다음 값을 추적하는 역할을 수행하는 변수
조직자(organizer)다른 값을 저장하기 위한 목적으로 사용하는 변수
임시(temporary)임시 변수는 잠시만 사용하기 위한 변수

역할을 객관화하여 볼 수 있음


5.2 역할과 패러다임#

5.2.1 역할의 이점#

  • 프레임워크를 같은 팀원과 공유하는 것은 도움이 됩니다.

변수 역할에 대한 실제적인 팁#

  • 코드를 작성할 때 변수 이름에 역할명을 포함하는 것도 하나의 방법이 될 수 있습니다.

5.2.2 헝가리안 표기법#

  • 과거에는 헝가리안 표기법이 의미가 있었으나 IDE가 등장했기 때문에 현재는 유용하지 않습니다.

앱 헝가리안 대 시스템 헝가리안#

  • 시스템 헝가리안 표기법도 있습니다.
    • lCustomers 과 같은 형태

5.3 프로그램에 대해 깊이 있는 지식을 얻으려면#

5.3.1 텍스트 지식 대 계획 지식#

  • 프로그래머가 소스 코드를 이해하는 두 개의 서로 다른 층위에 대한 모델이 있습니다.
    • 두 층위는 텍스트 구조 지식(text structure knowledge)계획 지식(plan knowledge)입니다.
  • 텍스트 구조 지식은 키워드가 하는 일이나 변수의 역할에 대한 내용입니다.
  • 계획 지식은 프로그래머가 프로그램을 작성할 때 계획한 것이 무엇인지를 의미합니다.

5.3.2 프로그램 이해의 여러 단계#

  • 프로그래머들은 코드를 읽을 때 일반적으로 코드의 초점(focal point)를 찾습니다.
  • 프로그래머의 이해는 핵심부터 증진되어 입력값에 대한 함수의 결과를 이해하거나 클래스가 가지고 있는 필드의 지식을 이해하는 것처럼 좀 더 큰 개념을 이해하도록 발전합니다.
  • 지식의 단계는 다음과 같습니다.
    1. 초점을 찾습니다.
    2. 초점으로부터 지식을 확장합니다.
    3. 관련된 개체로부터 개념을 이해합니다.
    4. 여러 개체에 걸쳐 있는 개념을 이해합니다.

5.4 텍스트를 읽는 것과 코드를 읽는 것은 유사하다#

  • 프로그래머는 평균적으로 자신의 업무 시간의 60%를 코드 작성이 아닌 읽는 것에 할애합니다.
  • 잘 읽는 것이 중요합니다.

5.4.1 코드를 읽을 때 우리 뇌에서는 무슨 일이 일어나는가?#

브로드만 영역#

  • 브로드만은 각 영역에 대해, 단어를 읽거나 기억하는 것 등 그 영역이 주로 담당하는 정신적 기능을 설명합니다.

5.4.2 프랑스어를 배울 수 있다면 파이썬도 배울 수 있다#

  • 개발 언어를 배우는 능력은 자연어를 배우는 능력과 유사합니다.
  • 숙련된 프로그래머는 초급자와 달리 순차적으로 읽지 않습니다. 초급자는 순차적 혹은 콜 스택을 따라가며 읽을 때가 많습니다.

5.5 코드 읽기에 적용해볼 수 있는 텍스트 이해 전략#

  • 텍스트 읽기에 대한 전략은 7개의 범주로 나뉩니다.
    • 활성화, 관련된 것들을 적극적으로 생각해서 이미 가지고 있는 지식을 활성화 하는 것
    • 모니터링, 텍스트를 읽으면서 이해한 것을 관찰하고 기록하는 것
    • 중요도 결정, 텍스트에서 어느 부분이 중요한지 결정하는 것
    • 추론, 텍스트에서 명시적으로 주어지지 않은 사실을 유추하는 것
    • 시각화, 깊이 있는 이해를 위해 텍스트에 대한 도표를 만드는 것
    • 질문, 텍스트에 대해 질문하는 것
    • 요약, 텍스트를 짧게 요약하는 것

5.5.1 기존 지식의 활성화#

  • 코드 스캔이 도움되는 이유.
    • 코드 내에 존재하는 개념과 문법적 요소들에 대한 일차적인 이해가 가능하기 때문입니다.

5.5.2 모니터링#

  • 코드를 읽을 때 현재 무엇을 읽고 있는지, 이해는 하고 있는지를 계속 추적하는 것이 중요합니다.
  • 이해되는 것뿐만 아니라 이해되지 않는 것도 머릿속에서 기억하고 있어야 합니다.
  • 이해되지 않는 부분을 표지하는 것은 다른 사람들에게도 유용합니다.

5.5.3 코드에서 중요한 라인을 결정하기#

  • 어떤 라인이 중요한지 파악하는 것이 유용할 때가 있습니다.

5.5.4 변수명의 의미를 추론하기#

  • 프로그램의 의미가 코드의 구조 자체에 담겨 있을 때가 많습니다.
  • 변수 이름은 중요한 표식입니다.

5.5.5 시각화#

  • 앞서 상태표나 코드 흐름이 시각화에 대한 예시입니다.
  • 연산 테이블도 이와 관련된 좋은 방법 중 하나입니다.

5.5.6 질문하기#

  • 코드를 읽을 때 스스로에게 질문하는 것이 코드의 목적과 기능에 대해 이해하는 데 도움이 될 때가 많습니다.

5.5.7 코드 요약#

  • 방금 전 읽은 코드를 요약함으로서 많은 이점을 얻을 수 있습니다.

요약#

  • 생소한 코드를 읽을 때는 스태퍼나 목적값과 같은 변수의 역할을 이해하는 것이 코드를 깊이 이해하는 데 도움이 됩니다.
  • 코드의 이해에 관해서는 텍스트 구조 지식과 계획 지식 사이에 차이가 있습니다.
    • 텍스트 구조 지식은 코드에 사용된 문법 개념을 아는 것을 의미하고
    • 계획 지식은 코드 작성자의 의도를 이해하는 것을 의미합니다.
  • 코드를 읽는 것과 자연언어 텍스트를 읽는 것 사이에는 유사한 점이 많고, 자연어를 배우는 능력으로 프로그래밍을 배우는 능력을 예측할 수 있습니다.
  • 시각화나 요약같이 자연언어 텍스트를 심도 있게 이해하기 위해 사용하는 전략들을 코드의 이해를 위해서도 적용할 수 있습니다.
Last updated on