← 최신 논문
💻 computer science

The Influence of Code Smells in Efferent Neighbors on Class Stability

본 연구는 100 개 주요 GitHub 프로젝트의 커밋 기록을 분석하여, 해당 클래스 내부가 아닌 의존하는 이웃 클래스 (efferent neighbors) 에 존재하는 코드 스멜과 그 상호작용이 클래스의 안정성에 미치는 영향을 규명했습니다.

원저자: Zushuai Zhang, Elliott Wen, Ewan Tempero

게시일 2026-02-17
📖 3 분 읽기☕ 가벼운 읽기

원저자: Zushuai Zhang, Elliott Wen, Ewan Tempero

원본 논문은 CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/) 라이선스로 제공됩니다. 이것은 아래 논문에 대한 AI 생성 설명입니다. 저자가 작성하거나 승인한 것이 아닙니다. 기술적 정확성을 위해서는 원본 논문을 참조하세요. 전체 면책 조항 읽기

🏠 비유: "나쁜 이웃"이 내 집을 불안정하게 만든다

이 연구의 핵심 아이디어는 **"내 집 (코드) 이 아주 깨끗하고 완벽해도, 내 이웃 (의존하는 다른 코드) 이 문제가 있으면 내 집도 자주 수리를 받아야 한다"**는 것입니다.

1. 문제의식: 왜 내 집은 깨끗한데 자주 고쳐야 할까?

소프트웨어 개발자들은 보통 "내 코드에 버그나 나쁜 설계 (코드 스멜) 가 있으면 자주 고쳐야 한다"고 생각합니다. 하지만 이 연구는 **"내 코드는 깨끗한데, 내가 의존하는 다른 코드가 나쁘면 내 코드도 자주 흔들린다"**는 사실을 발견했습니다.

  • 비유: 당신이 아주 깔끔하고 완벽한 집을 지었다고 칩시다. 그런데 당신의 이웃이 매일 밤 시끄러운 파티를 열거나, 집이 무너져 내릴 듯 위태롭다면? 당신은 그 소음이나 붕괴 위험 때문에 당신의 집도 자주 수리하거나 방어를 해야 하지 않겠습니까?
  • 연구의 질문: "내 집 (클래스) 이 깨끗해도, **내 이웃 (Efferent Neighbor)**이 나쁜 상태라면 내 집이 얼마나 자주, 얼마나 많이 고쳐져야 하는가?"

2. 핵심 개념: "코드 스멜"과 "연쇄 반응"

  • 코드 스멜 (Code Smell): 코드가 냄새나는 상태입니다. 예를 들어, 한 사람이 모든 일을 다 하려고 하거나 (신경질적인 클래스), 너무 복잡하게 얽혀 있는 경우죠.
  • 이웃 (Efferent Neighbor): 내 코드가 "의존"하는 다른 코드들입니다. 내 코드가 작동하려면 그 이웃들의 도움이 필요하다는 뜻입니다.
  • 연쇄 반응 (Ripple Effect): 이웃이 수정되면, 그 영향이 내게까지 퍼져나가는 현상입니다.

3. 이 연구가 발견한 두 가지 중요한 현상

이 논문은 단순히 "이웃이 나쁘다"는 것을 넘어, 두 가지 더 구체적인 상황을 분석했습니다.

① 서로 냄새가 섞인 경우 (Interrelation)

  • 상황: 내 집에도 나쁜 냄새가 있고, 이웃 집에도 나쁜 냄새가 있는 경우입니다.
  • 비유: 내가 술에 취해 있고, 이웃도 술에 취해 있다면, 둘이 부딪히면 상황이 훨씬 더 엉망이 되겠죠?
  • 결과: 두 곳 모두 문제가 있으면, 그 영향이 겹쳐서 내 집이 훨씬 더 자주, 더 크게 고쳐져야 합니다.

② 직접적인 연결 고리 (Interaction)

  • 상황: 내 코드의 나쁜 부분과 이웃 코드의 나쁜 부분이 직접적으로 연결되어 있는 경우입니다.
  • 비유: 내 집의 수도관 (나쁜 설계) 이 이웃 집의 수도관 (나쁜 설계) 과 직접 연결되어 있다면, 이웃이 수도관을 고칠 때 내 수도관도 함께 고쳐야 할 확률이 훨씬 높아집니다.
  • 결과: 단순히 이웃이 나쁜 것보다, 나쁜 부분끼리 직접 손잡고 있는 경우가 시스템의 안정성을 가장 크게 해칩니다.

4. 연구 방법: 어떻게 확인했나요?

연구진들은 GitHub 에 있는 인기 있는 Java 프로젝트 100 개를 선정했습니다.

  • 관측 기간: 1 년 동안의 수정 기록 (커밋) 을 분석했습니다.
  • 측정: "내 집이 얼마나 자주 수정되었는지 (빈도)"와 "한 번 수정할 때 얼마나 많은 코드가 바뀌었는지 (크기)"를 잰 뒤, 그 이웃들의 상태 (냄새 유무, 연결 상태) 와 비교했습니다.
  • 통계: 수학적인 모델을 사용하여 "이웃이 나쁘면 실제로 내 집이 더 불안정해지는가?"를 증명했습니다.

5. 결론: 우리에게 어떤 교훈이 있나요?

이 연구는 소프트웨어 개발자들에게 다음과 같은 중요한 메시지를 줍니다.

  1. 나만 깨끗하면 된다는 생각은 위험합니다. 내 코드만 잘 짜도, 의존하는 외부 라이브러리나 다른 모듈이 나쁘면 내 코드도 자주 고쳐야 합니다.
  2. 이웃을 관리하세요. 프로젝트의 안정성을 높이려면, 내가 의존하는 '이웃' 코드들의 상태도 함께 점검하고 리팩토링 (정리) 해야 합니다.
  3. 직접 연결된 나쁜 코드는 가장 위험합니다. 나쁜 코드끼리 직접 연결되어 있다면, 그 영향력이 배가되므로 가장 먼저 해결해야 할 우선순위입니다.

📝 한 줄 요약

"내 집이 아무리 깨끗해도, 나쁜 이웃과 직접 연결되어 있으면 내 집도 자주 고쳐야 한다. 그래서 소프트웨어를 만들 때는 '나'뿐만 아니라 '내 이웃'의 상태도 함께 챙겨야 한다."

이 연구는 소프트웨어 유지보수 비용을 줄이고, 더 안정적인 시스템을 만들기 위해 우리가 시야를 넓혀야 함을 보여줍니다.

연구 분야의 논문에 파묻히고 계신가요?

연구 키워드에 맞는 최신 논문의 일일 다이제스트를 받아보세요 — 기술 요약 포함, 당신의 언어로.

Digest 사용해 보기 →