[해당 포스트는 개인적으로 공부를 하고 차후에 참고용으로 하고자 작성한 것입니다.
따라서 잘못된 부분이나 부족한 부분이 있을 수 있기에 참고하시기 바랍니다.]
개발자들이 코딩을 할 때 각자 개성에 맞게 소스 코드를 작성하는 습관이 있다.
소규모 프로젝트에선 각자 스타일에 맞게 작성을 해도 문제는 없지만, 큰 프로젝트에선 혼동이 발생할 수 있다.
코딩 스타일은 코드 유지보수에 영향을 끼치며, 공동작업에선 혼란이 발생할 수 있기에 서로 공통으로 맞춰 작성해야 할 필요가 있다.
이러한 문제를 해결하기 위해 국제적으로 사용하는 코딩 스타일이 3가지가 존재한다.
1. GNU
블록을 if문 아래에 작성하도록 한다. 블록이 if에 속한 블럭임을 표시하기에 구조를 잘 파악할 수 있다는 장점이 있지만, 들여 쓰기를 많이 하기 때문에 코드 줄이 늘어나는 단점이 있다.
if (...)
{
todo...;
}
2. K&R
제어문과 같은 행에 Scope를 넣는다. 코드 줄 수를 줄일 수 있으며, 한눈에 많은 코드를 볼 수 있고 많은 코드를 작성할 수 있다. 주로 Java계열의 기본 포맷에서 사용된다.
if (...) {
todo...;
}
3. BSD
GNU의 Block의 부분을 분명히 보여준다는 장점과 K&R의 수평으로 많은 코드를 작성할 수 있는 장점을 가져와 결합한 스타일이다. 줄 수는 GNU 스타일만큼 늘어나지만 수평으로는 K&R만큼 많이 쓸 수 있다. Visual Studio에서의 기본 포맷으로 사용된다.
if (...)
{
todo...;
}
- K&R과 BSD
같은 코드를 K&R과 BSD로 작성한 것을 비교해보자.
K&R
let a = true;
let b = false;
if (true) {
for (let i = 0; i <= 10; i++) {
if (a) {
console.log(a);
} else if (b) {
console.log(b);
}
}
}
BSD
let a = true;
let b = false;
if (true)
{
for (let i = 0; i <= 10; i++)
{
if (a)
{
console.log(a);
}
else
{
console.log(b);
}
}
}
한 눈에 봐도 BSD의 코드 길이가 길어지는 것을 볼 수 있다. 그래서 주로 출판되는 코딩 교제들은 페이지 길이를 절약하고자 K&R을 주로 쓴다. 따라서 학생들은 K&R 스타일에 자연스럽게 익숙해져 있다. 눈에 보기에도 K&R 스타일이 좋아 보이지만 이후 리펙토링 할 때 귀찮은 점이 발생한다.
만약 제어문 for를 제거한다고 해보자.
K&R
let a = true;
let b = false;
//한 줄만 지워선 해결이 안 된다.
if (true) {
// for (let i = 0; i <= 10; i++) {
if (a) {
console.log(a);
} else if (b) {
console.log(b);
}
}
}
BSD
let a = true;
let b = false;
//한 줄만 지워도 정상적으로 작동한다.
if (true)
{
// for (let i = 0; i <= 10; i++)
{
if (a)
{
console.log(a);
}
else
{
console.log(b);
}
}
}
BSD 방식에선 반복문 한 줄만 지워도 문제가 없이 동작하지만, K&R에선 Scope 한 개가 지워지므로 닫히는 Scope까지 같이 지워줘야하는 귀찮은 작업이 발생한다. 따라서 리팩터링이 좀 귀찮아진다.
참고: https://namu.wiki/w/%EC%BD%94%EB%94%A9%20%EC%8A%A4%ED%83%80%EC%9D%BC
'Coding Skill' 카테고리의 다른 글
[TDD] 테스트 주도 개발 (0) | 2019.09.04 |
---|---|
[Coding Skill] 변수 및 함수 명칭 작성 스타일 (0) | 2019.08.30 |