인프런 워밍업 스터디 클럽 3기 백엔드-code 1주 차 발자국
이 블로그 글은 박우빈님의 readable-code강의 를 참조하여 작성한 글입니다.
강의 수강 및 워밍업 스터디 참여 계기
나는 평소 가독성 좋은 코드, 유지보수 하기 좋은 코드에 대해 관심을 갖고 있었다.
그 이유는 지속적으로 변화하는 요구사항에 유연하게 대응하며 코드를 작성하기 위해서다.
우리는 개발자로서 새로운 기능 개발하는 시간 보다 기존 코드를 유지보수하는 시간이 더 많을 것이다. 또한, 코드를 읽는 시간이 작성하는 시간보다 훨씬 길다.
따라서, 읽기 쉬운 코드 작성 방법을 배우고자 이번 강의를 수강하게 되었다.
이때 강력한 동기부여 장치로 여러 동료들과 함께 성장할 수 있는 스터디 또한 참여하게 되었다.
학습 내용 요약
추상: 중요한 정보는 가려내어 남기고, 덜 중요한 정보는 생략하여 버린다
-> 구체에서 조각하듯이 정보를 덜어내고 정말 중요한 것만, 엑기스만 뽑아서 남겼을 때를 추상화했다고 표현함적절한 추상화: 해당 도메인의 문맥 안에서, 정말 중요한 핵심 개념만 남겨서 표현하는 것
적절한 추상화를 위한 방법
좋은 이름 짓기
단수, 복수 구분
이름 줄이지 않기
은어, 방어 사용 금지
추상화 레벨 동등하게 유지
매직넘버 상수화
의미를 갖고 있으나, 상수로 추출되지 않은 숫자 문자열 등은 상수화를 통해 이름 부여
뇌 메모리 적게 쓰기
인지적 경계성 추구
: 읽는 사람으로 하여금, 읽는 사람 뇌 메모리에 정보를 최대한 적게 올리도록 코드를 작성해보자!중첩 반복문 사용 자제 -> early return 활용하려 else 사용 지양하기
사용할 변수는 가깝게 선언하기
부정 연산자 피하기
부정어구를 쓰지 않아도 되는 상황인지 체크
부정의 의미를 담은 다른 단어가 존재하는지 고민하기 or 부정어구로 메서드 명 구성
부정 연산자(!)는 가독성이 떨어진다!!
객체지향 SOLID 5가지 원칙
SRP: 하나의 클래스는 하나의 책임만 가져야 한다.
OCP: 확장에는 열려 있고, 수정에는 닫혀 있어야 한다.
LSP: 부모 클래스 인스턴스를 자식 클래스의 인스턴스로 치환이 가능해야 한다.
ISP: 사용하지 않는 인터페이스에 의존하면 안 된다.
DIP: 구체화가 아닌 추상화에 의존해라.
보다 자세한 설명은 아래 링크에 정리해두었으니 참고 바랍니다!
https://jiihyunn.tistory.com/12
일주일 간의 학습 내용 회고
계속할 점
1차로 강의 보면서 노트 적극 활용하기!!
이후 강사님이 하신 것중 생각나는 대로 리팩토링 따라해본 후, 기억이 나지 않으면 강의 다시 보면서 학습할 것학습한 내용 중 중요한 부분 나만의 언어로 블로그에 정리하기
강의 진도표에 맞춰서 학습할 것. 밀리지 않기!
느낀 점
우테코 프리코스를 진행하면서 학습해왔던 가독성 좋은 코드 작성법을 강의를 통해 다시 한번 탄탄히 다질 수 있었다. 강의를 들으며 기존에 알고 있었던 내용을 복습하는 동시에, 두루뭉실하게 알고 있었던 부분도 확실히 예시를 통해 익힐 수 있어 더욱 의미 있는 시간이 되었다.
하나의 클래스에 100줄이 넘는 방대한 코드가 처음에는 절대 리팩토링할 수 없을 것처럼 느껴졌지만, 강사님께서 몇 차례 다듬으신 후 객체지향적으로 변하는 과정을 보며 큰 신선함을 느꼈다. 코드가 점점 명료하고 유연하게 개선되는 모습을 보면서 객체지향 설계의 강력함을 다시금 체감할 수 있었다.
리팩토링을 고려해봤을 때 조합, 다형성 이용 등 사용하는 것은 전혀 생각지도 못했는데, 강의를 통해 활용법을 배워서 재밌었다. 앞으로 혼자 지뢰찾기 게임 리팩토링을 다시 해보면서 강사님의 생각을 읽을 수 있도록 많이 복습해야겠다!
미션 회고
[DAY 2]
평소 추상에 대해 깊게 생각해보지 않았는데, 미션을 통해 추상이 무엇인지, 코드에는 추상화라는 걸 어떻게 적용시킬 수 있는지 좀 더 명확하게 알게 되었다.
[DAY 4]
미션 PR: https://github.com/Jiihyun/readable-code/pull/1
🤔 고민사항
Item
객체 생성할 때 마다 금액이 양수인지 검증을 해주었는데,Order
클래스에서 총 가격이 양수인지 검증을 다시 한번 해줘야 할지 엄청 고민이 되었다.
[출처]
댓글을 작성해보세요.