🍝

스파게티 코드

안녕하세요 Jercy입니다. 오늘은 스파게티 코드의 원인과 그 해결을 위한 프랙티스에 대해 알아보겠습니다.
스파게티 코드는 코드가 굉장히 복잡해서 정리하기 어려운 코드를 말할 때 사용하는 용어입니다. 이런 스파게티 코드의 특징으로는 유지보수가 어렵고, 코드 수정이 거의 불가능하며, 개발 속도가 느려지고 전반적인 생산성이 저하되는 모습을 보입니다.
스파게티 코드의 형태는 다양하지만, 제가 몇 가지 정리해보았습니다:
1.
복잡한 제어문을 가지고 있는 경우 - 이는 코드 읽기가 상당히 힘들어집니다.
2.
변수를 많이 사용하는 경우 - 이는 코드를 읽을 때 기억해야 할 내용이 많아진다는 것을 의미합니다.
3.
잘못된 상속으로 발생하는 스파게티 코드
4.
클래스 간 의존 관계가 정리되지 않아 복잡하게 얽혀있는 경우
5.
추상화 단계가 들쑥날쑥한 코드 - 이 역시 읽기 어렵고 난해한 코드를 만듭니다.
iOS 개발에서 예를 들면, UIViewController를 상속받은 클래스가 뷰를 관리하는 것과 상관없는 다른 동작들을 추가하는 경우가 있습니다. 이는 SRP(Single Responsibility Principle) 원칙에 어긋나는 행위입니다.
또 다른 예로, 어떤 클래스를 사용하려면 다른 수많은 클래스들을 함께 가져와야 하는 경우가 있습니다. 이는 클래스 간 의존성이 너무 강하게 커플링된 경우입니다.
스파게티 코드가 발생하는 주요 원인은 개발자의 태만과 경험 부족 때문입니다. 하지만 경험이 쌓이면 자연스레 해결될 문제라기보다는, 의식적인 노력이 필요한 부분입니다.
그럼 어떻게 하면 이런 스파게티 코드를 개선할 수 있을까요?
1.
복잡한 제어문, 반복문 등을 최소화하고 함수로 분리합니다.
2.
변수 사용을 최소화하고, 가능한 한 상수를 사용합니다.
3.
상속보다는 합성(composition)을 사용하는 것이 좋습니다.
4.
클래스 간 의존성을 약화시키고, 프로토콜을 활용합니다.
5.
일관되고 적절한 추상화 레벨을 유지합니다. 과도하게 자세한 구현이나 지나치게 추상적인 구현은 피합니다.
궁극적으로는 SOLID 원칙과 같은 객체지향 설계 원칙을 잘 따르는 것이 스파게티 코드를 방지하는 좋은 방법이 될 것입니다.
이상으로 Swift에서의 스파게티 코드에 대해 알아보았습니다.
생각해볼 점:
내가 짠 코드들을 다시 보면 스파게티 코드의 냄새가 나지는 않나요?
스파게티 코드를 방지하기 위해 내가 실천할 수 있는 방법들은 무엇일까요?
스파게티 코드를 리팩토링할 때 어떤 점들을 고려해야 할까요?
제 생각은 다음과 같습니다:
코드 리뷰를 통해 동료들과 코드 퀄리티에 대해 논의하는 시간을 가지는 것이 도움될 거 같아요.
설계 단계에서부터 SOLID 원칙을 염두에 두고, 클래스/함수의 역할을 명확히 분리하려 노력해야겠어요.
리팩토링할 때는 테스트 코드의 뒷받침이 있어야 하고, 한 번에 너무 많은 부분을 바꾸려 하지 않는 것이 좋겠네요. 점진적으로 개선해 나가는 것이 중요한 것 같아요.
스파게티 코드 해결을 위한 방안은 다음 영상에서 다룰 예정이며, 객체지향 설계 원칙(SOLID)과 리팩토링 기법까지 연결될 것임을 언급하였습니다.
생각해볼 거리와 질문거리:
1.
현재 작성하고 있는 코드에서 스파게티 코드의 형태가 나타나고 있지는 않은가?
2.
상속과 의존성을 사용할 때, 어떤 점을 주의해야 할까?
3.
함수와 클래스 내에서 일관된 추상화 레벨을 유지하기 위한 방법은 무엇일까?
4.
스파게티 코드를 해결하기 위해 어떤 노력을 기울여야 할까?
5.
SOLID 원칙과 리팩토링이 스파게티 코드 해결에 어떤 도움을 줄 수 있을까?