워밍업 클럽 4기 1주차 발자국 (25.05.26 ~ 25.06.01)
+) 06.02 수정. 타 수강생의 발자국을 보니 제가 너무 자세한 내용을 써서 수정했습니다😁
What I learned?
읽기 좋은 코드를 작성하기 위한 초석 다지기
추상 & 논리, 사고의 흐름
추상의 관점에서 코드를 작성하고, 인지적 경제성을 메모리에 적용해서 최소한의 데이터로 최대한의 효과를 내어야 한다. 즉, 적은 정보를 올리도록 코드를 짤수록 읽기 쉬워진다.
추상의 관점에서 생각해 볼 수 있는 것은 이름, 메서드 선언부, 추상화 레벨, 매직 넘버·매직 스트링이 있다. 이것들을 적절히 추상화했을 때 가독성과 유지보수성이 높아진다.
데이터는 논리, 사고의 흐름 관점에서 생각해야 한다. 복잡한 if ~ else if ~ else문 대신 early Return을 적용해보자. 중첩 반복문, 중첩 분기문에서는 메서드 추출로 dept를 줄일 수 있다. 길고 긴 로직은 공백을 주어 내용을 가시적으로 구분지을 수 있다. 놓치기 쉬운 부정연산자(!) 대신 메서드 이름 자체에 not 등으로 부정을 표현할 수 있다. 또는 로직의 구성을 변경해 긍정의 이름을 부여할 수도 있다. 예외 상황을 어떻게 처리하는 지도 읽기 쉬운 코드를 위한 방법 중 하나이다.
객체 지향
객체는 어떤 목적을 가지고 추상화된 데이터와 코드의 집합이고, 추상의 관점에서 관심사의 분리가 일어난다.
객체는 메서드와 마찬가지로 생성된 순간 내부 세계와 외부 세계로 나뉜다. 공개 메서드를 통해서만 내외부 세계간 소통이 가능하고, 객체 내부는 비공개다.
관심사가 한 곳에 모이기 때문에 유지보수성이 증가하고, 사용자는 구체적인 구현에는 신경쓰지 않고 도메인 로직을 다룰 수 있다는 장점이 있다.
대신 객체마다 1개의 관심사로 명확하게 책임이 정의되어야 한다.
또한 외부에서 검증받지 않은 데이터로 바꾸는 것을 지양하기 위해 "Setter"의 사용은 자제해야 한다.
"Getter"도 필요한 순간에 추가해보자.
SOLID는 객체 지향 설계에서 지켜야 할 5개의 소프트웨어 개발 원칙이다.
SRP, OCP, LSP, ISP, DIP가 있다.
What I solved?
한 주간 진행한 미션
MISSION 1. 추상
추상에 대해 학습하고 실생할에서의 어떤 행동을 추상, 구체로 나눠 표현하는 미션을 실행했다.
미션 포스트 : https://inf.run/SNAKB
회고
그동안 코드에 대해 추상화, 추상화, 말은 많이 했지만 정말 추상적으로만 알고 있었다는 사실을 이번에 깨달았다.
미션을 하면서 추상, 구체를 조금 더 명확하게 받아들였고, 코드에 어떻게 적용할 지를 생각해 보게 되었다.
MISSION 2. 리팩토링 & SOLID 나만의 언어로 정의하기
논리, 사고의 흐름 섹션에서 배운 것을 바탕으로 주어진 코드의 리팩토링을 진행했고,
SOLID를 나만의 언어로 정의해보았다.
미션 포스트 : https://inf.run/MiB5d
회고
그동안 리팩토링이라고 하면 이름 변경, 중복 코드 제거 등만 해왔는데, 수업을 들으며 "어떤 것"을 "어떻게", 즉, 리팩토링의 대상과 방법을 구체화하게 되었다. 그것을 반영해서 최대한 "읽기 쉬운" 코드를 만들고자 했다.
SOLID를 나만의 언어로 정의하는 것은 쉬운 듯 하면서 어려웠다. 나름 이해하기 쉬운 단어로 표현해보려 했지만 아직 부족하게 느껴진다. 미션은 제출했지만, 이 부분은 면접을 대비해서라도 조금 더 생각해 봐야겠다.
END.
개인적으로 준비할 일이 겹쳐서 조금 바빴던 한 주였다.
수업을 다시 내 것으로 만들어볼 시간이 부족했다.
이번 주부터는 부지런하게 공부해보자!
댓글을 작성해보세요.