출처 : 인프런 - Readable Code : 읽기좋은코드-작성사고법
추상(抽象)
추상
추상이란
중요한 정보는 가려내어 남기고, 덜 중요한 정보는 생략하여 버리는 것이다.
추상과 구체
추상과 구체에서 먼저 봐야할것은 구체인데
구체란 사전적 의미로 사물이 개별적으로 일정한 모습을 갖추고 있다는것을 의미하고
추상은 반대로 구체적인 부분에서 중요한 정보만을 가져온것이다.
흔히 말하는 세줄요약 같은것도 추상이라고 볼수 있는것이다.
이처럼 적절한 추상화는 복잡한 데이터와 복잡한 로직을 단순화 하여 이해하기 쉽도록 도울수 있는데
반대로 적절하지 못한 추상화가 불러오는 문제는 생각보다 클수가 있다.
적절하지 못한 추상화를 한 원인중에는
중요한 정보를 부각시키지 못하였거나, 해석자가 동일하게 공유하는 문맥이 없거나 중요한 정보의 기준의 차이가 생기어
발생할수 있다.
잘못된 추상화가 야기하는 부작용은 생각 이상으로 크기에
적절한 추상화의 중요도가 크다고 할수 있다.
이름 짓기
가장 대표적으로 찾기 쉬운 추상화라고 한다면 이름짓기라고도 할수 있다.
하지만 동시에 가장 어려운 행위 이기도 하다, 어떤 방법으로 이름을 지어야 좋을지 모르기도 하면서
개인적으로는 비슷한 의미의 단어들이 반복된다면 오히려 더 헷갈릴수도 있을수 있기 때문이다.
이런것들을 방지하기 위해서 지켜야할 규칙이 있다.
1. 단수와 복수의 구분 (이것을 구분하는것 만으로도 읽는이에게 중요한 정보전달이 가능하다)
2. 이름 줄여서 사용하지 않기 (얻는것에 비해 잃는것이 더욱 큼으로 자제 하자 다만 많은 이들이 사용하는 줄임말 정도는 존재한다.)
3. 은어 또는 방언 사용하지 않기(되도록이면 도메인 용어 사용)
4. 좋은 코드를 보고 습득하기 (비슷한 상황에서 자주 사용하는 단어나 개념 습득)
메서드
메서드 와 추상화
잘 쓰여진 글이라면 한문단의 주제는 반드시 하나여야 한다는 말처럼
잘 쓰여진 메서드라면 한가지 주제에 대한 일을 하고있어야 한다.
하나의 메서드에 여러가지 일을 하고있다면
해당 메서드내에서 하나의 역할만 할수 있게 변경한후 정상 작동 하는지 검증을 해준다.
메서드명
추상화된 구체를 유추하기 쉽게 적절한 이름으로 수정을 해주어야 한다.
또한 해당하는 메서드명과 파라미터를 연결지어 더욱 자세한 정보를 전달할수 있게 된다.
파라미터
파라미터의 타입, 개수, 순서를 통해 의미를 전달한다.
파라미터는 외부 세계와 소통하는 창이기 때문에 적절한 명칭 등을 사용하여
사용하는 사람이 무엇을 입력해줘야 하는지 알수 있게 해야한다.
반환타입
메서드 시그니처(메서드명(파라미터) : 오버로딩) 에 납득이 가는, 적절한 타입의 반환값을 돌려줘야 한다.
void도 좋지만 대신 충분히 반환할 만한 값이 있다면 반환값을 정해주는것이 테스트에 용이해지기에 좋다.
추상화 레벨
이 추상화 레벨이 맞지 않는 다면 굉장히 어색한 코드가 될수있다.
예를들면
인터넷 서점에서 내가 원하는 주제의 책을 고르려고 쭉 책의 제목리스트를 보고 있는데 갑자기 중간에
책의 제목이 아닌 책의 상세내용만이 나와 뜬금없어질수가 있다.
이 추상화 레벨을 맞추는것이란 곧 읽는 사람으로서 자연스럼게 흘러갈수 있게 하는것이다.
매직 넘버, 매직 스트링
의미를 갖고 잇으나 상수로 추출되지 않은 숫자, 문자열 등을 의미하며
이 상수 추출로 이름을 짓고 의미를 부여 함으로써 가독성과 유지보수성이 올라갈수 있다.
반복적이며 고정적인 숫자 또는 문자를 공통의 것으로 바꾸어 이 한가지만 수정하더라도
모든곳에서 바뀔수 있게 할수 있다.
감상평
평소 개발을 하면서 시간에 쫒겨 그냥 넘어가거나 하는 부분에 대해 다시 생각할수 있는 계기가 되었다.
새삼 느끼는것이지만 빠르게 개발하는것이 진짜로 빠른것이 아니게 되는것이다.
사소한거 하나하나는 빠를지모르지만 전체를 볼때 점점 느려지게 되는것이다.
'인프런 > Readable Code: 읽기 좋은 코드를 작성하는 사고법 리뷰' 카테고리의 다른 글
섹션 4 : 객체 지향 패러다임 (0) | 2024.11.24 |
---|---|
섹션 3 : 논리, 사고의 흐름 (0) | 2024.11.17 |