육각형 개발자 - 최범균
1장
개발이란
개발이란 구현 기술을 사용해서 코드를 작성하는 것 뿐만이 아니다.
코드를 작성하는 건 개발의 정말 일부분이다. 개발에는 프로젝트 일정, 요구 사항 분석, 위험 관리 등 여러가지가 있다. 이 책에서는 구현 기술, 설계 역량, 업무 관리와 요구 분석, 공유, 리드&팔로우에 대해 다룬다.
새로운 구현 기술 사용 != 성장
주니어일때는 새로운 구현 기술을 사용하는 것과 성장을 동일하다고 생각한다. 현 회사에서 새로운 기술을 사용하지 않는 것이 이직을 결심하는 계기가 되기도 한다. 하지만 새로운 구현 기술을 사용할 수 있는 기회는 언젠가 오고, 그 기회를 잡기 위해 스스로 준비를 하자.
2장 구현 기술과 학습
학습 대상
백엔드 개발자만 하더라도 ORM, Framework, RDBMS 및 각종 언어들을 학습해야 한다. 개발자가 익혀야 할 구현 기술이 너무 많다 보니 학습할 대상을 잘 선택해야 한다.
구현 기술을 학습하는데에도 전략이 필요하다.
- 현재 사용 중인 기술
- 문제를 해결하기 위한 기술
현재 사용 중인 기술은 당연히 학습해야 한다. 그리고 문제 해결을 위해서도 구현 기술을 학습해야 한다.
- 당장 해결해야 하는 문제
- 가까운 미래에 해결해야 하는 문제
당장 해결해야 하는 문제는 빠른 시일안에 해결할 수 있는 도구를 찾아서 익히고 적용해야 한다. 가까운 미래에 해결해야 하는 문제는 당장 서비스를 운영하는데 큰 문제는 없지만 곧 미래에 큰 장애가 발생할 확률이 높은 것들을 말한다.
기술 파기
개발자가 익혀야 할 기술이 많기 때문에 하나의 기술을 처음부터 끝까지 깊게 학습하기는 어렵다. 그러니 이렇게 하자.
- 기술을 처음 익힐 때는 핸즈온이나 튜토리얼 문서로 빠르게 감을 익힌다.
- 어떤 기술을 잘 활요앟려면 자연스럽게 손에 익을 정도가 되어야 한다. 그러니 따로 연습하거나 꾸준히 사용한다.
- 필요할때마다 기술을 조금씩 더 깊게 학습한다.
- 중요한 것은 더 나은 방법을 찾으려고 노력하는 것이다. 예를들어 자바를 처음 학습하면서 배열에 대해 학습하고 배열을 지금까지 잘 사용해왔다고 해서 리스트를 사용하지 않고, 배열 사용을 고집해서는 안된다.
학습 전략
- 개발 도구들은 대체 기술이 나오면 기존 기술이 한순간에 사라지기도 한다.
- 주력 기술을 집중적으로 학습하라. 주력 기술은 당장 또는 가까운 미래에 경제적 이익을 얻는 데 필요한 기술을 말한다. 시장 점유율이 높은 기술이라고 말할 수도 있다.
- 여러 기술을 꾸준히 탐색하라. 지금 당장 사용하지 않더라도 주기적으로 요즘 어떤 기술이 주목받고 있는지 조사하고 필요에 따라 핸즈온이나 별도 학습을 해서 빠르게 경험해봐라.
유행에 상관없는 구현 기술
- 유행에 따라 기술을 도입하면, 유지보수 문제가 발생한다. 나는 잘 알더라도 동료들이 해당 기술에 대한 지식이 없을 수 있기 때문이다.
- 유행하는 기술만 쫓다 보면 기초 지식을 놓치기 쉽다.
- 주니어 개발자라면 유행과 상관없는 지식을 1년에 1개 이상 학습하자. HTTP, 네트워크 프로그래밍 기초, 동시성 처리, 프로그래밍 언어 등
3장 소프트웨어 가치와 비용
소프트웨어 가치
소프트웨어 가치를 유지하려면 사용자를 붙잡아야 하는데 그러기 위해서는 세상의 변화에 맞춰 소프트웨어도 함께 변해야만 한다.
개발 비용
- 클린 아키텍처 책을 참고해보면 소프트웨어는 시간이 지날 수록 개발 비용은 계속해서 늘어나는데 막상 코드는 몇 줄 추가되지 않는다고 한다.
- 시간이 지날 수록 개발하기 난해해진다. 시간이 지날수록 간단해 보이는 기능조차도 초기에 만들 때보다 나중에 만들 때 개발 시간이 몇 배에서 수십 배 이상 소요되기 때문이다.
- 소프트웨어를 제때 변경하고 싶다면 유지보수 비용을 낮출 수 있는 방법을 찾아야 한다.
- 유지보수 비용을 낮추려면 다양한 방법을 적용해야 한다. 프로그래밍 패러다임을 알맞게 적용하는 방법이 있는데 이는 객체 지향, 함수형 프로그래밍을 알맞게 사용하여 변경 비용을 줄일 수 있다.
4장 코드 이해
개발자가 코드를 변경할 때 다음 2단계 과정을 거친다.
- 코드 이해
- 코드 수정
코드를 이해하는 시간을 줄이기 위해서는 2가지 역량이 요구된다.
- 코드를 제대로 이해할 수 있는 역량
- 쉬운 코드를 작성하는 역량
이해하기 좋은 코드를 만들면 코드를 이해하는 데 들어가는 시간을 줄일 수 있으며 결과적으로 개발 시간도 줄어든다.
코드 이해 도구
규모가 큰 코드를 분석할 때는 단순히 머리로만 이해하려 하면 금방 한계에 부딪힌다.
코드 시각화
코드를 분석하고 그 결과를 그림으로 그리면 수정할 위치나 수정 영향을 받는 범위를 찾을 때 큰 도움이 된다.
- UML 다이어그램 중 액티비티 다이어그램은 코드의 실행 흐름을 이해하는데 도움이된다.
- 클래스 다이어그램은 구성 요소 간 구조를 이해하는 데 도움이 된다.
- 상태 다이어그램은 모델의 상태 변화를 이해하는 데 도움이 된다.
코드 출력
코드를 종이에 프린트하여 보면서 색을 칠하고 노트를 하면 더 이해가 잘 도니다.
이해하기 좋은 코드
이해를 돕는 몇 가지 코드 작성법
이름
- 의미나 의도 또는 목적을 유추할 수 있는 이름을 사용하자.
- 클래스 이름과 달리 필드 이름은 짧아도 의미가 잘 전달된다. Member 클래스의 '이름' 필드는 memberName이 아니라 name으로만 해도 이해가 된다.
중첩 if 최소화
if (조건) { 엄청 긴 코드 }
return;
위와 같이 작성하면 if를 타지 않을 때 어떻게 되는지 보기 위해서는 한참 스크롤을 내려야 해서 가독성이 좋지 않다. 이런 경우에는 아래와 같이 if 조건을 역으로 바꾸자
if (!조건) { return; }
엄청 긴 코드
아래와 같은 중첩 if 문은 가독성이 좋지 않다.
if ( A ) {
B 조건 구함
if( B ) {
E 실행
}
}
위 코드는 아래와 같이 바꿀 수 있다.
if (!A) return;
B 조건 구함
if (!B) return;
E 실행
적절한 변수 사용 범위 정하기
- 사용되기 직전에 정의
- 짧은 루프 블록 안으로 한정
- 짧은 if-else 블록 안으로 한정
- 짧은 메서드로 한정
값 변경 최소화하기
변숫값이 중간에 계속해서 바뀌면 코드를 분석할 때 해당 변수에 담긴 값을 추적해야 한다.