코딩을 하는 것은 쉽지만 좋은 코드를 작성하는 것은 어렵습니다. 코딩에 정도는 없지만 기본 프로그래밍 원칙을 알고 적용하면 읽기 쉽고, 효율적이고, 유지 보수하기에 용이한 코드를 작성할 수 있습니다. 효과적인 코드를 작성하는 프로그래밍 원칙에 대해 소개합니다.
※ 이 글은 아래 기사 내용을 토대로 작성되었습니다만, 필자의 개인 의견이나 추가 자료들이 다수 포함되어 있습니다.
- 원문: 10 Basic Programming Principles Every Programmer Must Know
- URL: https://www.makeuseof.com/tag/basic-programming-principles/
1. KISS 원칙 준수
KISS는 'Keep It Small and Simple' 또는 'Keep It Short and Simple'의 첫 글자를 따서 만든 약어로, 간단하고 알기 쉽게 만드는 편이 좋다는 원리를 뜻합니다. 1960년에 미국 해군이 고안한 디자인 원리라고 전해집니다.
KISS는 코딩에도 적용되는 가장 중요한 원칙 중 하나입니다. 코드는 가능한 한 간단하게 작성해야 합니다. 한 줄로 스크립트를 작성할 수 있다면 한 줄로 작성하세요. 다음은 간단한 함수의 예입니다.
function addNumbers(num1, num2) {
return num1 + num2;
}
읽기도 쉽고, 무슨 역할을 하는 함수인지 정확히 알 수 있습니다. 이러한 정신에 따른 프로그래밍 원칙 중 하나는 명확한 변수 이름을 사용하는 것입니다. 코딩 라이브러리를 활용하고 기존 도구를 사용하세요. 6개월 후에 들여다 보더라도 바로 업무에 복귀할 수 있도록 하세요. 일을 단순하게 유지하면 불필요한 고통을 덜 수 있습니다.
2. DRY 코드 작성
DRY(Don't Repeat Yourself) 원칙은 동일한(또는 거의 비슷한) 코드를 반복하지 않는다는 것을 의미합니다. 흔한 코딩 실수입니다. 코드를 작성할 때 데이터나 로직의 중복을 피하세요. 프로그램 내에서 코드를 복사하여 붙여넣은 적이 있다면 이는 DRY 코드가 아닙니다. 다음 스크립트를 보세요.
function addNumberSequence(number) {
number = number + 1;
number = number + 2;
number = number + 3;
number = number + 4;
number = number + 5;
return number;
}
줄을 복제하는 대신 루프를 사용하는 알고리즘을 찾아보세요. DRY 코드는 유지 관리가 쉽습니다. 각각 한 번의 반복을 처리하는 50개의 코드 블록보다 50번의 반복을 처리하는 하나의 루프를 디버깅하는 것이 더 쉽습니다.
3. 개방/폐쇄
이 프로그래밍 원칙은 코드를 확장에는 개방하고 수정에는 폐쇄하는 것을 목표로 해야 함을 의미합니다. 요구 사항이 변경되더라도 수정할 필요가 없는 코드를 생성할 수 있습니다. 이는 다른 사람들이 사용할 라이브러리나 프레임워크를 출시할 때 중요한 원칙입니다.
예를 들어 GUI 프레임워크를 유지관리하고 있다고 가정해 보세요. 코더가 릴리스된 코드를 직접 수정하고 통합할 수 있는 버전을 릴리스할 수 있습니다. 하지만 4개월 후에 대규모 업데이트를 출시하면 어떻게 될까요? 기존의 코드는 깨질 것이고 동료를 매우 불행하게 만들 가능성이 높습니다. 핵심 동작을 수정된 동작과 분리해서 작성하면 코드가 더 안정적이고 유지 관리가 더 쉽습니다.
4. 상속보다 구성
객체지향 프로그래밍을 사용하여 코드를 작성한다면 이 프로그래밍 원칙이 매우 유용하다는 것을 알게 됩니다. 상속(inheritance)에 대한 구성(composition) 원칙은 복잡한 동작을 가진 객체가 개별 동작을 가진 객체의 인스턴스를 포함해야 한다고 명시합니다. 클래스를 상속받아서 새로운 동작을 추가해서는 안 됩니다.
상속에 의존하면 두 가지 주요 문제가 발생합니다. 첫째, 상속 계층 구조가 갑자기 지저분해질 수 있습니다. 또한 특별한 경우의 동작을 정의할 때 유연성이 떨어집니다. 공유할 동작을 구현한다고 가정해 보겠습니다.
컴포지션 프로그래밍은 작성하기가 더 깔끔하고 유지 관리가 더 쉬우며 동작을 유연하게 정의할 수 있습니다. 각 개인의 행동은 그 자체의 클래스입니다. 개별 동작을 결합하여 복잡한 동작을 만들 수 있습니다.
5. 단일 책임
단일 책임(The single responsibility) 원칙은 프로그램의 모든 클래스나 모듈이 하나의 특정 기능만 제공해야 한다고 명시합니다. 클래스가 더 복잡해짐에 따라 너무 많은 책임을 추가하지 않도록 주의하세요. 리팩토링하고 더 작은 클래스와 모듈로 나눕니다.
클래스 오버로드의 결과는 두 가지입니다. 첫째, 문제 해결을 위해 특정 모듈을 분리하려고 하면 디버깅이 복잡해집니다. 둘째, 특정 모듈에 대한 추가 기능을 생성하는 것이 더 어려워집니다. 좋은 프로그래밍 원칙은 이러한 문제가 해결해야 할 문제가 되기 전에 예방합니다.
6. 관심 사항 분리
관심 사항 분리(The separation of concerns) 개념은 단일 책임 원칙의 추상적 버전입니다. 이 아이디어는 서로 다른 부분으로 프로그램을 설계해야 하며 이러한 부분이 서로 액세스할 수 없어야 함을 나타냅니다. 이에 대한 잘 알려진 예는 MVC(모델-뷰-컨트롤러) 디자인입니다 . MVC는 프로그램을 데이터(모델), 로직(컨트롤러), 페이지에 표시되는 내용(뷰)이라는 세 가지 영역으로 구분합니다. MVC의 변형은 오늘날 가장 널리 사용되는 웹 프레임워크에서 일반적입니다.
예를 들어, 데이터베이스를 처리하는 코드는 브라우저에서 데이터를 렌더링하는 방법을 알 필요가 없습니다. 렌더링 코드는 사용자로부터 입력을 받지만 처리는 논리 코드에서 처리합니다. 각 코드 조각은 완전히 독립적입니다. 그 결과 디버깅하기 쉬운 코드가 탄생했습니다. 렌더링 코드를 다시 작성해야 하는 경우 데이터가 저장되는 방식이나 로직이 처리되는 방식에 대해 걱정하지 않고 다시 작성할 수 있습니다.
7. 너무 앞서가지 말 것
YAGNI(You Aren't Going to Need It)이라고 불리는 이 원칙은 나중에 필요할 수도 있는 경우를 대비해 기능을 코딩해서는 안 된다는 것을 의미합니다. 컴퓨터 프로그래밍에서 배워야 할 가장 중요한 원칙 중 하나는 존재하지 않는 문제를 해결하려고 해서는 안 된다는 것입니다.
DRY 코드를 작성하려는 노력으로 프로그래머는 이 원칙을 위반할 수 있습니다. 경험이 부족한 프로그래머는 가능한 가장 추상적이고 일반적인 코드를 작성하려고 시도하는 경우가 많습니다. 그러나 너무 많은 추상화는 유지 관리가 불가능한 코드를 비대하게 만듭니다.
필요할 때만 DRY 프로그래밍 원칙을 적용합니다. 반복해서 작성된 코드 덩어리가 보이면 추상화 계층을 구현하세요. 현재 코드 배치를 희생하면서 너무 앞서 생각하지 마시기 바랍니다.
8. 코드 문서화
코딩 원칙에 대한 이 모든 이야기를 하다 보면 결국에는 여러분의 코드에 직접 접근하게 될 상대방의 인간을 잊어버리기 쉽습니다.
모든 고위 개발자는 적절한 주석을 사용하여 코드를 문서화하는 것의 중요성을 강조합니다. 모든 언어가 이를 제공합니다. 쓰는 습관을 들여야 합니다. 객체를 설명하고, 변수 정의를 강화하고, 함수를 더 쉽게 이해할 수 있도록 주석을 남깁니다. 다음은 코드를 안내하는 주석이 포함된 JavaScript 함수입니다.
// This function will add 5 to the input if odd, or return the number if even
function evenOrOdd(number) {
// Determine if the number is even
if (number % 2 == 0) {
return number;
}
// If the number is odd, this will add 5 and return
else {
return number + 5;
}
}
특히 다른 사람과 공동 작업할 때 상황이 모호하거나 불분명해질까 봐 우려가 된다면 모든 곳에 추가 노력을 기울여 주석을 남기는 것이 좋습니다. 동료 개발자에게 구문을 해독하도록 강요하여 좌절시키지 마세요. 프로그램을 작성하고 6개월 동안 그대로 두었다가 다시 수정해 보세요. 프로그램 작동 방식을 기억하기 위해 모든 기능을 일일이 살펴보는 대신 프로그램을 문서화 해 두면 크게 도움이 됩니.
9. 리팩토링
처음부터 코드가 완벽할 수는 없습니다. 코드를 리팩토링(refactoring)한다는 것은 코드를 검토하고 최적화하는 방법을 찾아 결과를 정확히 동일하게 유지하면서 코드를 더욱 효율적으로 만드는 것을 의미합니다. 이는 보다 깨끗하고 고품질의 코드를 작성하기 위한 고려 사항입니다.
프로그래밍의 원칙 중 하나는 코드 전체를 다시 방문하고, 다시 작성하고, 심지어 재설계하는 것이 일상적이라는 점을 기억하는 것입니다. 이것은 프로그램을 작성할 때 성공하지 못했다는 의미는 아닙니다. 시간이 지남에 따라 필연적으로 프로젝트에 더 익숙해지게 됩니다. 그 지식을 사용하여 자신을 발전시켜 나갑니다.
10. 어떤 희생을 치르더라도 깔끔하게 코딩
모든 기본 프로그래밍 원칙 외에도 자존심을 버리고 영리한(clever) 코드를 작성해야 한다는 사실을 잊어 버리세요. 낯선 사람에게 깊은 인상을 주기 위해 코딩하는 것이 아닙니다. 여러분은 문제를 해결하기 위해 이 직업에 종사하고 있습니다.
수많은 논리를 한 줄에 담으려고 하지 마세요. 의견과 문서에 명확한 지침을 남겨주세요. 코드가 읽기 쉽다면 일반적으로 유지 관리도 쉽습니다.
좋은 프로그래머와 읽기 쉬운 코드는 서로 밀접하게 연관되어 있습니다. 필요한 경우 주석을 남기고, 스타일 가이드를 준수하고, 가능할 때마다 다음 사람의 입장이 되어 보세요.
'Python' 카테고리의 다른 글
새로 출시된 장고(Django) 5.0의 주요 특징과 기능 (0) | 2023.12.10 |
---|---|
개발자 가이드: Python을 사용하여 암호화폐 지갑을 구축하는 방법 (56) | 2023.12.07 |
Python에서 데이터 분석을 위해 Pandas를 사용하는 방법 (45) | 2023.12.03 |
Python If-Else 문을 사용하는 방법 (2) | 2023.12.01 |
Python과 데이터베이스를 사용하여 등록 앱을 만드는 방법 (2) | 2023.11.14 |