깔끔한 C# 코드 작성을 위한 필드 가이드
C# 개발 시 코드의 가독성, 유지보수성, 팀 협업에 크게 영향을 미치는 요소는 바로 코드 스타일 가이드입니다. 특히 게임 개발에서 Unity를 사용하는 경우, 일관된 스타일은 팀의 생산성 향상과 프로젝트의 확장성을 위해 필수적입니다. 이번 포스트에서는 C# 스타일 가이드의 주요 내용을 알아보겠습니다.
1. 깨끗한 코드의 중요성
깨끗한 코드는 누구나 쉽게 이해하고 수정할 수 있는 코드입니다. 특히 팀 프로젝트에서는 코드 스타일이 제각각일 경우, 나중에 유지보수가 어려워집니다. 따라서 팀의 일원으로서 일관된 코드 스타일을 지키는 것이 중요합니다.
- 이해 가능한 코드: 사람과 협업하며 미래의 자신도 쉽게 이해할 수 있어야 합니다.
- 자기 설명적 코드: 코드 자체로 기능을 설명할 수 있도록 변수와 메서드 이름을 의미 있게 지어야 합니다.
// Bad: 의미 없는 변수 이름
int x = 10;
// Good: 자기 설명적 변수 이름
int playerHealth = 10;
2. 네이밍 컨벤션
네이밍 컨벤션은 일관성과 가독성을 위해 중요합니다. C#에서 추천하는 네이밍 스타일은 CamelCase와 PascalCase입니다.
- CamelCase: 주로 로컬 변수와 매개변수에 사용합니다. 예를 들어 playerName과 같은 형식입니다.
- PascalCase: 클래스, 메서드, 프로퍼티, 그리고 퍼블릭 필드에 사용합니다. 예를 들어 PlayerHealth입니다.
// 클래스 이름 (PascalCase)
public class GameManager { ... }
// 로컬 변수와 매개변수 이름 (CamelCase)
int playerScore = 0;
void AddScore(int scoreToAdd) { ... }
3. 포맷팅 스타일
포맷팅 스타일을 지키면 코드를 쉽게 읽고 이해할 수 있습니다. 가독성 높은 코드 작성을 위해 다음과 같은 포맷팅 규칙을 추천합니다.
- 한 줄에 한 문장: 선언과 초기화를 한 줄에 하나씩 작성합니다.
// Bad: 여러 변수를 한 줄에 선언
int a = 10, b = 20;
// Good: 한 줄에 한 변수 선언
int a = 10;
int b = 20;
- 중괄호 위치: 팀에 따라 선호하는 중괄호 스타일이 다를 수 있습니다. K&R 스타일은 같은 줄에 {을, Allman 스타일은 새 줄에 {을 배치합니다. 중괄호 위치는 팀의 가이드에 따라 통일성을 유지하는 것이 중요합니다.
if(condition){
// K&R 스타일
}
if(condition)
{
// (BSD)Allman 스타일
}
4. 인덴트 스타일
인덴트 스타일은 코드를 읽기 쉽게 해줍니다. 대부분의 C# 프로젝트에서는 4 스페이스 인덴트를 권장하며, 각 줄을 정렬하는데 일관성을 유지하는 것이 중요합니다. 코드 에디터의 자동 인덴트 설정을 활용하면 편리하게 관리할 수 있습니다.
5. 기타 추천 가이드
- 주석 작성: 코드만으로 이해하기 어려운 부분은 주석을 추가하되, 필요한 곳에만 간결하게 작성합니다.
// 플레이어의 최대 체력
public int MaxHealth = 100;
- 바 사용: 타입이 명확할 경우 var를 사용할 수 있으나, 코드만으로 타입을 파악하기 어려운 경우 var 사용을 피하는 것이 좋습니다.
// Bad: 타입이 불명확한 var 사용
var result = CalculatePower();
// Good: 명확한 타입 사용
int result = CalculatePower();
- 프로퍼티 활용: 클래스 멤버의 접근 제한을 관리하고, 간결한 게터/세터를 설정할 때 프로퍼티를 사용합니다.
// Private 필드
private int _maxHealth = 100;
// Public 프로퍼티 (겟터/셋터)
public int MaxHealth
{
get { return _maxHealth; }
set { _maxHealth = Math.Min(value, 100); }
}
이 외에도 깔끔한 코드를 작성하기 위해서 피해야 할 관행을 배우는 것도 좋습니다.
유지보수하기 어렵게 코딩하는 방법 (피해야 할 관행)
책에서는 "유지보수가 어려운" 코드를 작성하는 여러 방식에 대해 이야기하며, 그 방식을 피함으로써 더 나은 코드를 작성하도록 가이드합니다. 여기에서는 몇 가지 주의할 만한 내용을 소개합니다.
1. 필요하지 않은 기능 추가하기
- 설명: 현재 사용하지 않지만, 나중에 필요할 수도 있다는 이유로 코드를 과도하게 설계하는 것은 유지보수를 어렵게 만듭니다.
- 해결 방법: 현재 필요한 기능에 집중하고, 확장 가능하게 설계하되 실제 기능은 나중에 추가하는 방식으로 코드를 관리하세요.
2. 널 체크 남발하기
- 설명: 널 체크로 문제를 임시 해결하는 대신, 왜 널 값이 발생했는지 근본 원인을 찾아 수정해야 합니다.
- 해결 방법: 널 값이 생기는 원인을 먼저 파악하고, 해당 상황을 방지하도록 코드 로직을 수정하세요.
3. 불필요한 코드 주석 남기기
- 설명: 코드 자체가 충분히 설명적이지 않다면 주석을 남기는 경우가 많지만, 시간이 지나면 이 주석들이 업데이트되지 않아 혼란을 유발합니다.
- 해결 방법: 코드가 스스로 설명할 수 있도록 명확하게 작성하고, 꼭 필요한 경우에만 주석을 사용하세요.
4. 같은 기능 반복하기
- 설명: 비슷한 기능을 가진 코드를 복사-붙여넣기 방식으로 여러 번 작성하면 코드가 불필요하게 길어지고, 수정 시 모든 복사본을 관리해야 합니다.
- 해결 방법: 공통 기능을 메소드나 클래스로 분리하여 재사용성을 높이고, 유지보수가 용이하도록 합니다.
5. 코드의 일관성 무시하기
- 설명: 코드의 네이밍 규칙, 중괄호 사용, 들여쓰기 스타일을 일관성 없이 사용하는 것은 다른 개발자가 코드를 읽기 어렵게 만듭니다.
- 해결 방법: 팀 내 스타일 가이드를 따르거나, 하나의 스타일을 정해 일관되게 사용하는 것이 좋습니다.
이 책에서 다루는 내용을 통해 ‘이렇게 작성하면 절대 안 된다’는 관점에서 피해야 할 코딩 방식에 대한 유용한 통찰을 얻을 수 있습니다.
유지보수성 낮추기: 반면교사의 코드 작성법
책 유지보수하기 어렵게 코딩하는 방법에서는 개발자가 피해야 할 다양한 코딩 방식을 반면교사로 제시하고 있습니다. 여기서는 이를 참고하여, 코드 유지보수를 어렵게 만드는 방법과 이를 피하는 최선의 방법을 함께 살펴보겠습니다.
1. 혼란스러운 변수명과 함수명 사용하기
- 내용: 변수나 함수 이름을 전혀 의미 없게 짓거나, 의도적으로 헷갈리게 작성해 이해를 어렵게 만듭니다.
- 피해야 할 방식: 예를 들어, int a와 같은 이름 대신 int playerHealth와 같이 코드의 역할을 명확하게 표현해야 합니다.
2. 주석을 과하게 사용하거나 부족하게 하기
- 내용: 코드와 관련 없는 내용을 주석으로 장황하게 쓰거나, 필요한 설명 없이 생략함으로써 다른 개발자가 혼란을 겪게 합니다.
- 피해야 할 방식: 코드 자체가 설명이 가능하도록 작성하고, 필요한 경우에만 간단하게 주석을 추가하세요.
3. 불필요하게 복잡한 로직 작성
- 내용: 단순하게 작성할 수 있는 로직을 복잡하게 만들어 코드 이해와 유지보수를 어렵게 합니다.
- 피해야 할 방식: 코드의 간결함을 유지하고, 로직을 필요 이상으로 분기하지 않도록 합니다.
4. 불필요한 기능 추가
- 내용: 현재 필요하지 않은 기능을 미리 구현하여 코드의 복잡성을 높입니다.
- 피해야 할 방식: 현재 필요에 집중하고, 나중에 필요한 기능은 확장할 수 있는 구조만 마련해두는 것이 좋습니다.
5. 의도적으로 헷갈리는 코드 스타일 사용하기
- 내용: 다양한 스타일을 혼용하여 코드 일관성을 해치는 방법입니다. 예를 들어, 소문자 l과 숫자 1을 구분하기 어렵게 사용하거나, 여러 언어를 혼용하여 변수명을 작성하는 등입니다(C# 스타일 가이드).
- 피해야 할 방식: 명확하고 일관된 코드 스타일을 사용하여 팀 내의 이해도를 높입니다.
이러한 내용은 유지보수가 어려운 코드를 방지하는 데 도움을 주며, 일관성 있고 가독성 높은 코드를 작성하는 데 유용한 가이드가 될 것입니다.
결론
코드 스타일 가이드는 팀 협업에서 중요한 역할을 합니다. 일관된 네이밍과 포맷팅 스타일을 유지하면 코드가 깔끔해지고, 다른 팀원들이 쉽게 이해하고 수정할 수 있습니다. 앞으로 팀 내에서도 이러한 가이드를 철저히 지키며 깔끔한 코드 작성을 목표로 해 보세요.
https://learn.microsoft.com/ko-kr/dotnet/csharp/fundamentals/coding-style/coding-conventions
https://unity.com/kr/blog/engine-platform/clean-up-your-code-how-to-create-your-own-c-code-style
https://unity.com/kr/how-to/naming-and-code-style-tips-c-scripting-unity
'Programming > C#' 카테고리의 다른 글
C# 이벤트 핸들러(Event Handler) 이해와 활용 (0) | 2024.07.11 |
---|---|
C# 소켓 통신 서버 개발하기 Windows에서 개발하여 Linux CentOS 7.6 서버에서 실행하기 (0) | 2024.07.11 |
C# 멀티스레드 프로그래밍 Thread-Local Storage(TLS)의 이해와 활용 (2) | 2024.07.01 |
C# 멀티스레드 프로그래밍 커스텀 재귀적 락과 스핀락 정책 구현 (0) | 2024.07.01 |
C#에서의 동기화 전략: ReadWriteLock의 이해와 활용 (0) | 2024.07.01 |