코드 가독성과 확장성 좋게 만드는 작업. 소프트웨어의 겉보기 동작은 그대로 유지한 채, 코드를 이해하고 수정하기 쉽도록, 내부 구조를 변경하는 기법.
유지보수를 용이하게 하기 위해서는 코드의 가독성과 확장성이 좋아야 함.
개발자 도구 활용해서 의미없는 속성 골라내는 것도 좋은 방법
개발자가 보내는 시간 중 코드를 짜는 시간은 10% 밖에 안됨. 90% 시간은 모두 코드를 읽고 해석하면서 시간을 보냄. 내가 짠 코드를 미래의 내가, 그리고 협업하는 다른 팀원들이 읽기 쉽게 만드는 일은 가장 기본이면서 가장 중요한 일.
Semantic Tag를 이용해서 HTML을 작성하면 SEO 최적화, 접근성 향상, 가독성 높은 코드 등의 이점을 얻을 수 있음.
<form>
, <table>
, <img>
, <header>
, <nav>
, <aside>
, <section>
, <article>
, <footer>
, <details>
, <figcaption>
, <figure>
, <time>
, <summary>
, <main>
, <ul>
, <li>
alt 속성은 중요하기 때문에 src 속성보다 먼저 작성.
<!-- Bad -->
<input type="password"></input>
<!-- Good -->
<input type="password" />
<br />
, <hr />
, <img />
, <meta />
, <link />
, <input />
레이아웃에 영향을 많이 주는 순서대로, 인접 속성끼리 묶어서 작성
각자 다른 CSS 선택자들 사이에는 한 줄씩 공백을 주는 게 가독성 측면에서 좋음.
.login-btn {
height: 2.5rem;
margin: 0.625rem 0px;
border: 0;
border-radius: 0.3125rem;
background-color: var(--disabled);
color: var(--white);
font-weight: 700;
font-size: 0.9375rem;
}
.find-password {
margin: 3.75rem 0 1.25rem 0;
color: #00376b;
text-align: center;
font-size: 12px;
}
.enabled-btn {
background-color: var(--enabled);
cursor: pointer;
}
.disabled-btn {
background-color: var(--disabled);
cursor: default;
}
block 요소에 불필요하게 display:block; 을 부여. block 요소에 불필요하게 width:100% 를 부여.
참고 자료 : CSS Default Values Reference
레이아웃을 구성할 때 부모요소의 높이를 미리 정해두고 자식요소의 크기를 정하는 top-down 방식이 아닌, 자식요소의 높이에 따라 부모요소의 높이가 유동적으로 결정되는 bottom-up 방식으로 구성.
레이아웃을 구성할 때 부모요소의 크기를 고정적으로 정해둔다면, 자식요소의 크기가 변함에 따라서 부모요소의 크기가 유동적으로 변하지 않음.
이런 상황에서 만약 자식요소의 크기가 변해야 한다면, 부모요소의 CSS도 같이 수정해줘야 하는 불편함이 있음.
이런 구성이 겹겹이 쌓인다면 추후에 CSS 유지보수가 매우 힘들어짐.
CSS 유지보수가 Javascript 유지보수보다 힘듦.
// bad
.feedList {
height:100vh;
}
.feed{
height:300px;
}
// good
.feedList {
padding-top:20px;
}
.feed{
height:300px;
}
bad예시는 여러 feed들을 감싸고 있는 feedList에 고정height를 부여함. feedList가 안에 feed가 몇 개나 생성될 지 모르기에 feedList 크기는 feed의 개수에 따라서 유동적으로 조정되어야 함.
하지만 feedList는 고정 height를 가지고 있으므로, 자식요소의 크기에 따라서 부모의 크기가 유동적으로 조정이 안되고 있음.
good의 예시를 보면 feedList에는 고정 height를 부여하지 않음. 이 경우에는 feedList의 크기가 자식요소의 크기만큼 자동으로 조정됨.
feedList의 높이가 내부의 자식요소의 높이 + 20px(padding-top 값) 로 유동적으로 변함.
참고도서 : 리팩토링 2판 ( 저자: 마틴 파울러 )