시니어 개발자들이 절대 놓치지 않는 10가지 코딩 습관

시니어 개발자들이 작성하는 코드는 단순히 작동할 뿐 아니라 오랜 시간 동안 유지보수가 가능합니다. 그 비결은 경험을 통해 터득한 코딩 습관에 있습니다. 아래에서 시니어 개발자들이 실천하는 10가지 코딩 습관과 그들이 코드를 깔끔하고 안정적이며 다루기 쉽게 유지하는 방법을 살펴봅시다.

1. 코드를 미래의 나를 위해 작성하라

새벽 3시에 디버깅해야 하는 상황을 상상해 보세요. x, y, temp 같은 이름을 사용하는 변수와 복잡하게 중첩된 함수들이 난잡하게 얽혀 있다면 고통스럽겠죠. 코드를 작성할 때는 미래의 자신이 코드를 리뷰한다고 생각하고 작성하세요.

나쁜 코드

1
2
3
4
function process(x, y) {
let temp = x * y;
return temp + 5;
}

좋은 코드

1
2
3
4
function calculateTotalPrice(itemPrice, quantity) {
let totalCost = itemPrice * quantity;
return totalCost + 5; // 배송비 포함
}

좋은 코드에서는 itemPrice, quantity, totalCost 같은 이름이 함수의 목적을 즉시 알 수 있게 해줍니다. 코드를 다시 살펴보지 않아도 이해할 수 있죠.

코드는 유지보수를 염두에 두고 작성해야 합니다. 구조, 의미 있는 이름, 논리적 흐름에 신경 써서 단순함을 추구하세요.

2. 이름 짓기는 중요하다

시니어 개발자는 변수, 함수, 클래스의 이름을 짓는 일이 중요하다는 것을 압니다. 모호한 이름은 혼란을 야기합니다.

나쁜 코드

1
let temp = fetchData();

좋은 코드

1
let userData = fetchUserData();

좋은 이름은 코드를 읽는 사람이 추가적인 맥락을 찾을 필요가 없게 만듭니다.

3. 중복을 피하라(DRY), 그러나 과유불급은 피하라

코드 중복은 시간 낭비를 초래합니다. DRY(Don’t Repeat Yourself) 원칙을 따르되, 지나친 추상화는 피하세요.

나쁜 코드

1
2
3
4
5
6
7
8
function calculateTax(price) {
return price * 0.13;
}

function calculateTotalWithTax(price) {
let tax = price * 0.13;
return price + tax;
}

좋은 코드

1
2
3
4
5
6
7
8
9
const TAX_RATE = 0.13;

function calculateTax(price) {
return price * TAX_RATE;
}

function calculateTotalWithTax(price) {
return price + calculateTax(price);
}

4. '무엇’을 설명하는 대신 '왜’를 설명하라

불필요한 주석은 코드 읽기를 방해합니다. 대신 복잡한 알고리즘의 이유나 가정 같은 맥락을 설명하세요.

좋은 주석

1
2
// 대규모 배열의 빠른 조회를 위해 이진 탐색 사용
function findUser(arr, target) { ... }

5. 단일 책임 원칙을 지켜라

함수는 하나의 작업만 수행해야 합니다. 이 원칙을 따르면 테스트가 쉬워지고, 코드가 더 읽기 쉽고 모듈화됩니다.

나쁜 코드

1
function fetchAndProcessAndSaveUserData() { ... }

좋은 코드

1
2
3
function fetchUserData() { ... }
function processUserData(data) { ... }
function saveUserData(data) { ... }

6. 버전 관리는 필수다 (의미 있는 커밋 메시지와 함께)

시니어 개발자는 의미 없는 커밋 메시지를 작성하지 않습니다.

나쁜 커밋 메시지

1
git commit -m "버그 수정"

좋은 커밋 메시지

1
git commit -m "검증이 누락되어 사용자 세부 정보가 저장되지 않는 문제 해결"

7. 에러를 우아하게 처리하라

애플리케이션이 충돌하며 “뭔가 잘못되었습니다” 같은 에러 메시지를 띄운다면, 이는 사용자 경험을 망칩니다. 의미 있는 에러 메시지와 로그를 제공하세요.

나쁜 에러 처리

1
2
3
4
5
try {
let data = fetchData();
} catch (error) {
console.log(error);
}

좋은 에러 처리

1
2
3
4
5
6
try {
let data = fetchData();
} catch (error) {
logError(error);
showErrorNotification('문제가 발생했습니다. 나중에 다시 시도해주세요.');
}

8. 테스트를 작성하라

테스트는 코드가 제대로 작동하는지 확인하는 중요한 도구입니다.

테스트 없는 코드

1
let price = calculateTotal(100);

테스트 작성

1
2
3
4
5
describe('calculateTotal', () => {
it('should return the correct total', () => {
expect(calculateTotal(100)).toBe(115); // 15% 세금 포함
});
});

9. 종속성 관리를 신중히 하라

불필요한 라이브러리 의존성은 프로젝트를 복잡하게 만들고, 보안 문제를 초래하며, 유지보수를 어렵게 합니다.

나쁜 관행

1
npm install lodash

좋은 관행

1
npm install lodash.debounce

10. 정기적으로 과감하게 리팩터링하라

코드는 정원을 가꾸는 것과 같습니다. 정기적으로 구조를 개선하고 읽기 쉽게 최적화해야 합니다.

나쁜 코드

1
2
3
4
5
6
7
function processOrders(orderList) {
for (let i = 0; i < orderList.length; i++) {
if (orderList[i].status === 'pending') {
// process the order
}
}
}

좋은 코드

1
2
3
4
5
6
7
8
9
10
function filterPendingOrders(orderList) {
return orderList.filter((order) => order.status === 'pending');
}

function processOrders(orderList) {
const pendingOrders = filterPendingOrders(orderList);
pendingOrders.forEach((order) => {
// process the order
});
}

마무리

위 10가지 실천법은 시니어 개발자의 작업 방식을 반영한 기본적인 습관들입니다. 이를 점진적으로 적용하면 더 깨끗하고 유지보수하기 쉬운 코드를 작성할 수 있습니다. 당신의 코드가 미래의 자신과 동료 개발자들에게 편리함을 제공하게 될 것입니다. 😉

Share