스파게티는 마리나라, 페스토, 크리미한 파스타 소스를 뿌려 먹으면 정말 맛있지만, 제 코드와 관련이 있으면 끔찍하죠. 이 글은 스파게티 코드와 저의 (사랑?) 증오 관계에 관한 글입니다.
이 글이 끝날 때쯤이면 여러분도 저만큼 스파게티 코드를 싫어하게 되길 바라며, 서로의 경험을 공유하면서 위안을 삼을 수 있기를 바랍니다. 그게 아니라면 적어도 무언가를 배웠거나 웃음을 터뜨렸으면 좋겠습니다!
이 스파게티 코드 사랑-증오 이야기에서...
그럼 스파게티 코드 🙄란 무엇인가요?
이는 올바른 소프트웨어 개발 관행을 따르지 않는 코드를 작성할 때 발생하는 현상입니다. 이 글이 끝날 때쯤이면 스파게티 코드가 무엇인지, 적어도 어떤 모습인지(그리고 하지 말아야 할 것)가 명확해지길 바랍니다.
스파게티 코드의 공식적인 의미는 깊거나 넓은 종속성이 있을 때 발생하는 것을 말합니다. 즉, 코드가 애플리케이션의 너무 많은 부분 또는 너무 적은 부분에 의존하여 제대로 작동하지 않는다는 뜻입니다.
하지만 스파게티 코드를 구성하는 요소에 대한 다양한 아이디어가 있습니다. 제가 가장 좋아하는 정의는 "스파게티 코드는 적절한 하향식 분해의 규칙을 따르지 않을 때 발생하는 것"이라는 Alex Martelli의 말입니다.
'하향식'이라는 용어가 익숙하지 않은 분들을 위해 위키백과를 인용해 보겠습니다: "계층적 설계라고도 하는 하향식 설계는 상위 수준의 모듈을 정의하는 것으로 시작하여 개별 루틴이 정의될 때까지 연속적으로 하위 수준의 하위 모듈을 정의합니다."
즉, 이상적인 스파게티 조각은 현재 작성된 코드에서 다음 단계에 따라 코드가 수행해야 하는 작업으로 바뀝니다:
1) 이 스파게티 조각의 용도를 파악합니다.
2) 현재 수행 중인 작업이 원래 수행해야 하는 작업이 아닌 경우 필요한 작업을 수행하도록 코드를 다시 작성합니다(이 단계는 코드가 수행해야 하는 작업으로 세분화할 수 있습니다).
3) 코드를 작성합니다.
4) 모든 스파게티가 스파게티가 아닌 코드로 바뀔 때까지 반복합니다.
하지만 대부분의 사람들은 이 3과 4를 건너뛰고 2나 1(보통 1)로 바로 넘어간 다음, 깔끔한 코드 관행에 대한 고려 없이 미친 과학자처럼 코딩을 시작하고 몇 달 후 흔히 스파게티 코드라고 불리는 코드가 완성되는 경우가 많습니다.
스파게티 코드를 식별하는 방법은 무엇인가요?
첫째, 코드가 이해하기 어려운 난장판처럼 보인다면 이것이 첫 번째 힌트일 것입니다. 더 알아보기 어려운 스파게티 코드를 식별하기 위한 몇 가지 단서가 있습니다:
- 코드를 편집하거나 디버깅을 할 때 엄청난 좌절감을 느낀다면 스파게티 코드일 가능성이 높습니다.
- 특정 프로젝트에 대해 함께 작업하고 싶지 않거나 PR 요청을 검토하고 싶은 개발자가 없다면 스파게티 코드일 가능성이 높습니다.
- 관리자가 무작위로 분노를 폭발시킨다면 스파게티 코드를 많이 작성했을 가능성이 높습니다.
이 예시 중 자신에게 해당되는 것이 있더라도 걱정하지 마세요. 중요한 것은 스파게티 코드가 어떤 모습이라고 생각하는지입니다. 지금은 나쁘다고 생각하는 것이 이 글을 읽고 나면 실제로는 훨씬 더 나빠 보일 가능성이 높습니다.
그렇다면 스파게티 코드는 어떻게 생겼을까요?
이는 작성 중인 언어와 사용 중인 프레임워크/라이브에 따라 다릅니다. 여기서는 jQuery를 사용하여 자바스크립트로 작성된 스파게티 코드를 예로 보여드리겠습니다:
함수 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가 있습니다.
다른 모든 방법이 실패한다면 코딩 능력을 향상시킬 수도 있습니다. 하지만 진지하게 말하자면, 이는 가장 마지막, 마지막, 마지막에 해야 할 일입니다!