Refactoring for Novices in Java: An Eye Tracking Study on the Extract vs. Inline Methods

이 연구는 32 명의 Java 초보자를 대상으로 한 아이 트래킹 실험을 통해, 추출 리팩토링이 복잡한 작업에서는 이해도와 성능을 향상시키지만 단순한 작업에서는 오히려 탐색 빈도와 소요 시간을 증가시켜 초보자에게는 과도한 모듈화가 비효율적일 수 있음을 밝혔습니다.

José Aldo Silva da Costa, Rohit Gheyi, José Júnior Silva da Costa, Márcio Ribeiro, Rodrigo Bonifácio, Hyggo Almeida, Ana Carla Bibiano, Alessandro Garcia

게시일 2026-03-06
📖 3 분 읽기☕ 가벼운 읽기

Each language version is independently generated for its own context, not a direct translation.

이 논문은 **"코드를 읽을 때, 함수를 따로 떼어내는 것 (Extract Method) 이 정말로 초보자에게 도움이 될까?"**라는 질문에 답하기 위해 진행된 흥미로운 연구입니다.

연구팀은 32 명의 Java 초보 개발자를 대상으로 실험을 했으며, 그들의 **눈동자 움직임 (아이 트래킹)**을 추적해서 코드를 읽는 과정에서 뇌가 얼마나 힘들게 노력하는지 측정했습니다.

이 복잡한 연구를 일상적인 비유로 쉽게 설명해 드릴게요.


🍳 요리책 비유: "레시피" vs "한 번에 다 하기"

코드를 요리한다고 상상해 보세요.

  1. 인라인 (Inline Method): 모든 재료를 한 냄비에서 한 번에 섞고 끓이는 방식입니다.

    • 장점: 재료가 한눈에 들어옵니다. "소금 넣기, 후추 넣기, 끓이기"가 한 줄에 다 적혀 있어요.
    • 단점: 요리가 길어지면 한눈에 들어오지 않아서 혼란스러울 수 있습니다.
  2. 추출 (Extract Method): "소금 넣기"나 "끓이기" 같은 과정을 따로 작은 레시피 카드 (함수) 로 만들어서, 메인 레시피에는 "소금 넣기"라고만 적는 방식입니다.

    • 장점: 메인 레시피가 깔끔해 보이고, "이건 소금 넣는 과정이야"라고 이름만 봐도 내용을 유추할 수 있습니다.
    • 단점: 요리할 때 메인 레시피를 보다가 "아, 소금 넣는 건 어딨지?" 하고 레시피 카드를 찾아서 다시 돌아와야 합니다.

🔍 연구의 핵심 발견: "초보자는 이름만 보고 넘어가지 못한다!"

연구팀은 이 두 방식이 초보자들의 눈동자 움직임에 어떤 영향을 미치는지 봤습니다. 결과는 놀라웠습니다.

1. 복잡한 요리 (예: 팩토리얼 계산, 리스트에서 최고 점수 찾기)

  • 상황: 요리 과정이 복잡하고 재료가 많을 때입니다.
  • 결과: **함수를 따로 떼어낸 방식 (추출)**이 훨씬 좋았습니다.
  • 이유: 복잡한 과정을 "소금 넣기"라는 이름의 작은 레시피로 분리해 주니, 초보자들이 전체 흐름을 이해하기 쉬웠습니다. 눈이 왔다 갔다 하는 횟수 (재귀적 움직임) 가 줄어들고, 문제를 푸는 속도도 빨라졌습니다.
  • 비유: 복잡한 레시피를 작은 단계로 나누어주니, 요리사가 당황하지 않고 차분하게 따라 할 수 있었습니다.

2. 간단한 요리 (예: 정사각형 넓이 구하기, 짝수인지 확인하기)

  • 상황: "변수 × 변수"처럼 한 두 줄로 끝나는 아주 간단한 계산입니다.
  • 결과: 함수를 따로 떼어낸 방식이 오히려 해가 되었습니다!
  • 이유: 아주 간단한 일을 위해 따로 레시피 카드를 만들어서 찾아다니게 하니, 초보자들은 오히려 더 지쳤습니다.
    • 눈동자 데이터에 따르면, 초보자들은 "이 함수가 뭘 하는지 이름으로 알겠는데, 진짜 맞는지 확인하려고" 다시 함수 몸체 (본문) 로 눈을 돌려야 했습니다.
    • 통계: 간단한 작업에서 함수를 추출했을 때, 해결 시간이 166% 증가했고, 눈이 뒤로 돌아간 횟수 (재귀) 가 200% 증가했습니다.
  • 비유: "물 한 잔 마시기"라는 아주 간단한 일을 위해, "물 마시는 법"이라는 별도의 두꺼운 설명서를 만들어서 찾아보게 한 꼴입니다. 오히려 더 귀찮아지고 시간이 더 걸린 것입니다.

🧠 왜 이런 일이 일어날까요? (눈동자가 말해주는 것)

  • 신호등 (Beacon) 의 오해: 전문가들은 함수 이름만 봐도 "아, 이거 소금 넣는 구나"라고 바로 이해하고 넘어갑니다 (신호등 효과). 하지만 초보자들은 이름만 믿지 못합니다. "이름이 '소금 넣기'인데, 진짜 소금을 넣는 건가? 아니면 다른 걸까?"라고 의심하며 다시 본문으로 눈을 돌려 확인합니다.
  • 눈의 피로: 이 확인 과정 때문에 초보자들의 눈은 코드를 위아래로 왔다 갔다 (Regressions) 하게 되고, 이는 뇌에 큰 피로 (Visual Effort) 를 줍니다.

💡 이 연구가 우리에게 주는 교훈

  1. 초보자에게는 "적당한 복잡성"이 중요합니다.

    • 코드가 너무 복잡하면 함수를 나누어주는 것이 좋지만, 너무 단순한 코드까지 나누면 오히려 초보자를 혼란스럽게 합니다.
    • 교육자나 선배 개발자들은 "무조건 깔끔하게 함수를 나누자"라고 가르치기보다, **"이 작업이 정말로 복잡해서 분리할 필요가 있을까?"**를 먼저 고민해야 합니다.
  2. 눈동자 추적 (Eye Tracking) 의 중요성.

    • 기존에는 "코드 길이나 복잡도" 같은 숫자만 보고 판단했지만, 이 연구는 사람의 눈이 어떻게 움직이는지를 봐야 진짜 이해도를 알 수 있음을 보여줍니다.
  3. 결론:

    • 복잡한 작업: 함수를 나누어주세요 (추출).
    • 아주 간단한 작업: 그냥 한 줄에 다 써주세요 (인라인).
    • 초보자의 눈과 뇌는 생각보다 더 많은 에너지를 써서 코드를 따라갑니다.

이 연구는 **"무조건 좋은 것 (모듈화) 이 모든 상황에 좋은 것은 아니다"**라는 사실을, 초보자들의 눈동자를 통해 증명해낸 매우 의미 있는 결과입니다.