스파게티 코드: 애증의 이야기

마리나라, 페스토, 크리미한 파스타 소스를 뿌려 먹으면 정말 맛있는 스파게티가 제 코드 라인과 관련이 있다면 끔찍하죠. 이 글은 스파게티 코드와의 애증의 관계에 대한 이야기입니다.

이 글이 끝날 때쯤이면 여러분도 저만큼 스파게티 코드를 싫어하게 되길 바라며, 서로의 경험을 공유하면서 위안을 삼을 수 있기를 바랍니다. 그게 아니라면 적어도 무언가를 배웠거나 웃음을 터뜨렸으면 좋겠습니다!

이 스파게티 코드 애증 이야기에서...

그럼 스파게티 코드 🙄란 무엇인가요?

이는 올바른 소프트웨어 개발 관행을 따르지 않는 코드를 작성할 때 일어나는 일입니다. 이 글이 끝날 때쯤이면 스파게티 코드가 무엇인지, 적어도 스파게티 코드가 어떻게 생겼는지(그리고 하지 말아야 할 것)가 명확해지기를 바랍니다.

스파게티 코드의 공식적인 의미는 깊거나 넓은 종속성이 있을 때 발생하는 것을 말합니다. 즉, 코드가 애플리케이션의 너무 많은 부분 또는 너무 적은 부분에 의존하여 제대로 작동하지 않는 것을 의미합니다.

하지만 스파게티 코드를 구성하는 요소에 대한 다양한 아이디어가 있습니다. 제가 가장 좋아하는 정의는 "스파게티 코드는 적절한 하향식 분해의 규칙을 따르지 않을 때 발생하는 것"이라는 Alex Martelli의 정의입니다.

'하향식'이라는 용어에 익숙하지 않은 분들을 위해 위키백과를 인용하겠습니다: "계층적 설계라고도 하는 하향식 설계는 상위 레벨 모듈을 정의하는 것으로 시작하여 개별 루틴이 정의될 때까지 연속적으로 하위 레벨의 하위 모듈을 정의합니다."

즉, 이상적인 스파게티 조각은 현재 작성된 코드에서 다음 단계에 따라 코드가 수행해야 하는 작업으로 바뀝니다:

1) 이 스파게티 조각의 용도를 파악하세요.

2) 현재 수행 중인 작업이 수행해야 하는 작업이 아닌 경우, 필요한 작업을 수행하도록 코드를 다시 작성합니다(이 단계는 코드가 수행해야 하는 작업으로 세분화할 수 있습니다).

3) 코드를 작성합니다.

4) 모든 스파게티가 스파게티가 아닌 코드로 교체될 때까지 반복합니다.

그러나 대부분의 경우 사람들은 이 3과 4를 건너뛰고 바로 2나 1(보통 1)로 넘어간 다음, 깔끔한 코드 관행에 대한 고려 없이 미친 과학자처럼 코딩을 시작하고 몇 달 후 흔히 스파게티 코드라고 불리는 코드가 완성됩니다.

스파게티 코드를 식별하는 방법은 무엇인가요?

첫째, 코드가 이해하기 어려운 엉망진창처럼 보인다면 이것이 첫 번째 힌트일 것입니다. 식별하기 더 어려운 스파게티 코드를 알아내기 위한 몇 가지 단서가 더 있습니다:

  • 코드를 편집하거나 디버깅하는 데 엄청난 좌절감을 느낀다면 스파게티 코드일 가능성이 높습니다.
  • 특정 프로젝트에 대해 함께 작업하고 싶지 않거나 PR 요청을 검토하고 싶어하는 개발자가 없다면 스파게티 코드일 가능성이 높습니다.
  • 관리자가 갑자기 화를 내면 스파게티 코드를 많이 작성하고 있을 가능성이 높습니다.

이 예시 중 자신에게 해당되는 것이 있더라도 걱정하지 마세요. 중요한 것은 스파게티 코드가 어떤 모습이라고 생각하느냐입니다. 지금 보기에 나쁘다고 생각하는 코드가 이 글을 읽고 나면 실제로는 훨씬 더 나빠질 가능성이 높습니다.

그렇다면 스파게티 코드는 어떻게 생겼을까요?

이는 작성 중인 언어와 사용 중인 프레임워크/라이브에 따라 다릅니다. 여기서는 jQuery를 사용하여 JavaScript로 작성된 스파게티 코드를 예로 보여드리겠습니다:

함수 KFCSecretMenu() { //생성자

this.getKrushers = function() {

} } $(document).ready(function(){ //event listener for DOM Ready $(‘.welcome’).click(function (){ //event listener for click on element with class name of welcome $(‘.menu-item’).addClass(‘active’); //class to be added if the submenu is opened.

$(‘.menu-item’).find(‘.description’).slideDown(); //sliding down effect for description text }) }); function MenuItemClicked (e) { var itemID = $(e.target).parent().attr(‘id’); //gets ID of parent menu item var description = $(e.target).next().text() KFCSecretMenu.getKrushers({‘itemID’:itemID,’description’:description}); //calling function below }

팔로우할까요? 아니요, 스파게티 괜찮아요! 🕵️

이 스파게티 코드가 왜 그렇게 나쁜지, 다른 코드보다 더 나쁜 이유는 무엇인지, 그리고 이를 고치기 위해 무엇을 할 수 있는지 살펴보겠습니다. 그렇다면 스파게티 코드가 나쁜 이유는 무엇일까요? 저는 이것이 스파게티 코드를 만드는 가장 유용한 목록이라고 생각합니다: 중복되거나 지나치게 복잡한 함수, 메서드 및 변수 따라가기 어렵거나 들여쓰기가 없는 구조 따라가기 어렵거나 긴 함수 읽기 어려운 공백 논리를 따라가기 어려운 주석 부족 비정상적인 코딩 스타일(너무 열심히 시도) 좋은 변수 이름.

이 외에도 코드를 엉망으로 만들 수 있지만 반드시 스파게티 코드라고 할 수는 없는 몇 가지 다른 요소도 있습니다: 비효율적인 알고리즘 큰 파일 크기 잘못 설계된 소프트웨어 테스트 부족 스파게티 코드는 사용되는 언어, 프레임워크, 라이브러리마다 다르게 보입니다. 어떤 언어에서는 스파게티가 될 수 있는 것이 다른 언어에서는 스파게티가 아닐 수도 있습니다. 그렇기 때문에 스파게티 코드가 어떻게 생겼는지 정의하기 어렵습니다. 몇 년 전에는 무엇이 스파게티 코드였을지, 코드의 가장 큰 문제는 무엇이었을지 되돌아보는 것이 필요합니다. 위의 목록에 있는 실수 중 몇 가지를 저질렀을 가능성이 높으므로 과거 코드의 문제점을 비교하고 이 글을 읽는 동안 그 목록을 염두에 두세요.

스파게티 코드를 확인했다면 어떻게 처리해야 하나요?

실제로 스파게티 조각을, 그러니까 코드를 어떻게 만들어야 하는지 논의하기 전에 몇 가지 중요한 사항을 알아두어야 합니다:

참고 1: 코드를 작성하지 않는 방법에는 수백 가지(어쩌면 수천 가지)의 방법이 있습니다. 여기서는 코드 작성 방법에 대한 기본적인 지식이 있는 분들을 위해 가능한 한 간단하게 설명하려고 합니다. 공백과 주석을 추가하는 것만으로도 얼마나 많은 일을 할 수 있는지 놀라실 겁니다!

참고 2: 스파게티 코드를 직접 수정하려고 시도하기 전에 자신이 무엇을 하고 있는지 이해하는 것이 중요합니다. 그렇지 않으면 문제를 더 악화시킬 뿐입니다! 이해가 되지 않는다면 이 글을 다시 읽고 이해한 다음 여기로 돌아와 주세요.

참고 3: 현재 스파게티를 지저분하게 만드는 원인을 조사하고 있지만, 애초에 스파게티를 지저분하게 만들 수 있는 원인에 대해서는 조사하지 않고 있습니다(따라서 에디터를 열기 전에 다시 한 번 생각해야 합니다).

스파게티 코드의 장점은 무엇인가요?

아무것도 없습니다. 다음 포인트!

향후 스파게티 코드를 방지하는 방법은 무엇인가요?

이탈리아로 이사를 가서 불결한 코드를 작성할 때마다 화난 이탈리아 남자가 생 스파게티로 머리를 때리는 것 말고도 다음과 같은 일을 시도해 볼 수 있습니다.

  • 스파게티 코드를 피하는 좋은 방법은 함수와 메서드를 짧게 유지하는 것입니다. 즉, 함수는 해야 할 일만 해야 하며, 10가지 다른 일을 하거나 100줄로 구성된 함수는 필요 없으므로 불필요한 것은 제거하세요!
  • 스파게티 코드를 피하는 또 다른 팁은 이미 수행한 작업이 변경되지 않도록 하는 것입니다. 즉, 다른 루프 안에 루프를 깊게 중첩시키지 말아야 한다는 뜻입니다. 즉, 중첩할 필요가 없는 것을 중첩시키지 말아야 한다는 뜻입니다!
  • 코드 서식도 잊지 마세요. 공백과 들여쓰기는 스파게티 코드에 기적을 일으킬 수 있습니다! 코드가 보기 좋을수록 읽기 쉬워집니다.
  • 레트로 - 항상 잘된 점을 검토하여 다음번에는 이를 추적하고 구현할 수 있도록 하세요!
  • 또는 코딩을 개선할 수도 있습니다.
  • 스파게티 코드의 모양을 계획할 때 마지막으로 팁을 드리자면, 에디터에서 직접 코드를 작성하는 대신 원하는 기능을 그래프로 그려보세요(즉, 실제로 구현하기 전에 각 함수가 수행해야 하는 기능을 살펴보세요). 문제가 발생하면 한 걸음 물러나서 다시 시작하세요.

이 간단한 규칙만 지키면 지금 쓰고 있는 글이 스파게티가 되지 않을 거라고 거의 장담할 수 있지만, 제가 뭘 알겠어요? 이모가 스파게티라고 부르던 것이 사실은 스파게티 코드로 변장한 것일 수도 있습니다.

스파게티 코드에 대한 최종 생각

스파게티를 인생의 유일한 기쁨의 원천으로 여기며 스파게티를 사랑할 수도 있습니다! 이 방법이 효과가 없다면 대안을 시뮬레이션하는 이 훌륭한 GIF가 있습니다.

작업 및 회의에 대한 개발자 밈 엔지니어 스프린트 백로그 검토

다른 모든 방법이 실패한다면 코딩 능력을 향상시킬 수도 있습니다. 하지만 진지하게 말하자면, 코딩 능력 향상은 마지막, 마지막, 마지막, 마지막에 해야 할 일입니다!

tl;dv 비즈니스용
tl;dv 는 조직 전체에서 회의에서 가치를 창출할 수 있도록 도와줍니다. 여러분과 조직에 유용한 회의 인사이트를 기록, 전사, 요약, 생성 및 자동화하세요. 몇 분 안에 설정하세요.
무제한 녹화 및 대본
AI 요약
물어보기 tl;dv AI
30개 이상의 언어로 지원
멀티미팅 AI 보고서
+5000개 이상의 통합

tl;dv 블로그

블로그 구독하기

미팅, 영업, Customer Success, 생산성 및 직장 문화에 관한 최신 팁과 뉴스를 구독하고 최신 정보를 받아보세요.