📚책 정보
- 좋은 코드, 나쁜 코드 (2022)
- 톰 롱 (구글 소프트웨어 엔지니어) 지음
📝2장: 추상화 계층
1. null 값 및 의사코드 규약
2. 왜 추상화 계층을 만드는가?
3. 코드의 계층
4. 마이크로서비스는 어떤가?
📍상위 수준의 문제 ~ 하위 수준의 문제
어떤 디바이스에서 유저가 서버로 메시지를 보낼 수 있는 기능을 만든다고 가정할 때,
상위 수준의 문제
- HTTP를 통해 서버로 메시지 전송 (어떻게?)
알고 있어야 할 하위 문제 (상위 문제에서 도출됨)
- HTTP 연결 열기
- 문자열 메시지 보내기
- HTTP 연결 닫기
알 필요 없는 하위 문제 (상위 문제에서 도출됨)
- 전송할 수 있는 형식으로 보낼 메시지 문자열 직렬화 (파싱)
- HTTP 프로토콜 조작
- TCP 연결
- 디바이스가 와이파이 또는 셀룰러 네트워크에 연결되었는지
=> 이미 다른 개발자들이 해결해 놓아서 신경 쓰지 않아도 됨
문제를 해결하기 위해 상위 -> 하위 문제로 나누어 내려가야 한다. 이렇게 올바른 추상화 계층을 만들며 복잡한 문제를 쉽게 다룰 수 있다.
📍체계적인 추상화 계층의 장점 4가지
1. 가독성
- 코드베이스의 모든 세부사항을 이해할 필요가 없고, 몇 개의 추상화 계층만 이해하면 되므로 가독성 향상
2. 모듈화
- 예를 들어, 인터넷 연결이 와이파이일 때, 셀룰러 네트워크일 때 각각 다른 모듈이 사용될 것임
- 모듈화된 코드는 기능을 갈아끼우기 편해서 하위 문제를 직접 처리할 필요 없음
3. 재사용성 및 일반화성
4. 테스트 용이성
- 잘 쪼개진 하위 문제들은 재사용 및 테스트가 용이함
📍추상화 계층을 생성하는 방법
- 코드를 서로 다른 단위로 분할하여 각 단위 간의 의존 관계를 보여주는 의존성 그래프를 그린다
이 때, 단위가 될 수 있는 요소
- 함수
- 클래스
- 인터페이스
- 패키지, 네임스페이스, 모듈
📍코드를 작성할 때 고려할 2가지 측면(with API)
1. 코드를 호출할 때 볼 수 있는 내용
- 퍼블릭 클래스, 인터페이스 및 함수(메서드) 등
=> 공개된 API에 기술할 수 있다
2. 볼 수 없는 내용
- 구현 세부 사항
=> API 뒤에 감춰짐
API는 호출하는 쪽에 공개될 개념만 정의한다.
그 이외의 것은 구현 세부 사항이므로, 추상화 계층이 명확하게 구분되게 하기 위해 외부로 노출하지 않는다.
📍추상화 계층을 위한 함수 사용법
1. 단일 업무만 수행하게 한다
- 가독성이 좋아진다
2. 잘 명명된 다른 함수(e.g. 헬퍼 함수)를 호출하게 구성한다
- 재사용이 쉽다