새로운 내용을 공부할 때
새로운 내용의 공부를 시작할 때 용어의 정의를 이해하지 못하거나 정확하게 알지 못한다면 그 용어가 포함된 문장을 이해하지 못합니다.
작은 단어 하나가 내용을 이해하지 못하게 하기 때문에 용어를 정확하게 이해하는 것이 중요합니다.
TIL) 코드 가독성과 추상화를 공부했습니다.
📌 2025-03-01 TIL
1. 오늘의 학습 주제
- 코드 가독성높이는 방법
- 추상화는 가독성을 높이는 방법 중 하나다.
2. 학습 내용 요약
개발자에게 추상화라는 단어는 어디서든 들어볼 수 있습니다.
흔히 대화를 할 때에도 “이렇게 표현하는 건 너무 추상적이다” 라고 합니다.
추상화에 대해서 그동안 잘 못 알고 있었습니다.
저는 그동안 추상화는 표현이 두루뭉실 하다. 애매하게 표현하다. 구체적이지 않게 설명하다 이렇게 생각했습니다
다시 공부를 통해 생각한 추상화는 이렇게 정의해보았습니다
사용자가 이해할 수 있는 문맥 내에서 중요한 부분을 제외하고 덜 중요한 부분은 덜어내는 것.
개발자는 올바른 추상화를 통해서 사용자가 이해할 수 있는 핵심 적인 기능을 표현하며, 유지보수를 해야하는 개발자가 코드를 읽는 사고 과정에서도 흐름을 놓치지 않고 읽을 수 잇도록 제공하기 위해서 필요합니다.
올바르지 않은 추상화는 사용자나 유지보수하는 개발자에게도 어떤 기능이나 값을 저장하는 지 생각하게 만들며 이는 추가적인 리소스가 필요하게 됩니다.
그러므로 올바른 추상화를 통해 코드 가독성을 높일 수 있습니다.
2-1 학습 내용
목차
- 가독성이 좋은 코드를 왜 작성해야할까
- 구체적인 원칙은 뭐가 있을까?
가독성이 좋은 코드는 왜 작성해야할까
- 개발자는 코드를 작성하는 시간보다 읽는 시간이 많습니다.
- 코드를 읽는 다는 것은 유지보수를 하기 위해서 입니다.
- 코드를 읽는 시간이 오래 걸리는 것은 개발에 필요한 리소스가 추가되는 것입니다.
- 코드를 읽는 시간을 줄이는 것이 유지보수나 확장할 때 필요합니다.
정리하면 이렇게 정리할 수 있습니다.
우리가 가독성이 좋은 코드를 작성하면 유지보수와 기능 확장하기 위해서 필요한 개발 리소스를 줄여준다.
구체적인 원칙에 대해서
- 변수명은 추상화를 기반으로 한다.
- 메서드도 추상화를 통해 표현한다.
변수명 짓기
데이터를 담는 그릇도 추상화를 기반으로 한다.
컴퓨터는 숫자 1을 저장하기 위해 메모리 1bit 데이터 공간을 32개를 활용하여 저장하며 메모리 주소는 숫자로 가지고 있습니다.
사용자(개발자)는 int memberAge = 13
으로 작성하는 것도 프로그래밍 언어가 제공하는 추상화된 기능을 사용하는 거라고 볼 수 있습니다.
변수명 짓는 것도 추상화에 일부로 할 수 있습니다.
- 은어나 줄임말을 쓰지 않는다
- 읽는이가 이해할 수 잇는 문맥 내에서 작성한다. 도메인 용어가 같다면 용어 문서를 만드는 것도 좋다.
- 단수/복수형을 구분한다.
메서드 만들기
메서드는 반환타입,메서드명,매기변수 타입,매개변수 명을 어떻게 작성하는지에 따라 사용자의 가독성을 높여줄 수 있습니다.
메소드명
메서드는 하나의 기능만 담고 있어야한다는 표현은 저는 이해가 가지 않습니다.
제가 생각한 메서드명는 메서드는 하나의 추상화된 주제를 담고 있어야 한다.로 생각합니다.
예를 들어
void 물건을_주문한다(코드 물건코드){
물건_코드가_올바른지_확인();
물건_코드의_재고가_있는지_확인();
물건의_재고를_감소한다();
사용자가_선택한_주소를_가져온다();
물건_주문을_생성한다();
}
여기 메서드를 추상화해보면 결국은 물건을 주문하기 위한 여러가지 기능을 실행하는 것입니다.
이 메서드를 사용하는 사용자는 내부의 구체적인 로직은 관심이 없고 어떤 기능인지 메서드 명을 보고 알 수 잇어야합니다.
매개변수 타입, 매개변수 명
사용자는 메서드의 매개변수 타입과 매개변수 명을 보고 기능을 이용하기 위해서 어떤 데이터를 제공해야하는지 바로 알 수있어야합니다.
void 주문한_기록_조회(String localDateString);
void 주문한_기록_조회(LocalDate orderDate);
사용자는 두 메서드 중에서 내부 로직을 확인하지 않고 데이터를 전달할 수 있을까요?
저라면 아래가 더 편하다고 생각합니다
- 날짜 문자열에는 어떤 양식을 넣어야하는지 사용자는 고민해야합니다(애매한 정보)
- 날짜 문자열에 어떤 날짜 문자열을 넣어야하는지 알수가 없습니다.
자바 라이브러리에서도 이런 부분의 애매한 부분을 해결하기 위해서 클래스를 통해 제공합니다.
void 날짜문자열포멧변경하기(DateFormat dateFormat)
반환타입
반환타입은 가독성뿐만 아니라 테스트 코드를 작성할 때에도 필요합니다.
그리고 실무에서도 단순히 확인 용도를 하는 것이라도 나중에 어떤 요구사항 변경이 생길지 모르기에 반환타입이 있는 것이 좋다는 것을 느꼈습니다.
댓글남기기