[워밍업 클럽 2기 - Clean Code & Test Code] 1주차 발자국

워밍업 클럽 2기: Clean Code & Test Code의 1주차 발자국 작성입니다.

 

학습 내용 복습

 

Q. 클린 코드를 작성하는 이유?

  • 미래의 나, 미래의 동료가 더러운 코드로 인해 고통 받지 않도록 하기 위해서 클린 코드를 작성한다.

  • 코드를 작성하는 순간부터 그 코드는 사실상 기술 부채를 가지게 된다. 기술 부채를 최대한 줄이기 위해서 클린 코드를 작성한다.

 

Q. 클린 코드를 작성하기 위해서 사용하는 가장 핵심적인 개념은?

  • 추상화라고 생각한다. 추상화의 본질은 핵심 개념만 드러내고, 불필요한 정보는 감추는 것이다.

  • 추상화 레벨이 높아질수록 더 함축적인 개념을 다루고, 낮아질수록 구체적인 동작과 세부 구현에 집중한다.

  • 추상화 레벨이 높아지면 높아질수록 정보의 함축 수준이 높아지고 이해하기 쉬워진다. 그렇다고 너무 함축시키면 실제 구체(정보)의 재현이 어렵기 때문적절한 추상화가 필요하다.

 

Q. 적절한 추상화란?

  • 적절한 추상화란 해당 도메인 내에서 핵심적인 부분만 드러내면서 구체적인 구현은 필요에 따라 숨기는 것이다

  • 핵심적인 부분과 불필요한 정보의 구분은 문맥에 따라 언제든지 달라질 수 있다

  • 도메인을 파악하는 것이 중요하다

 

Q. 효과적인 네이밍은?

  • 네이밍(이름짓기)을 통해서 의도를 드러낼 수 있다. 높은 추상화 레벨에서는 세부 사항을 숨기고, 큰 개념을 드러내는 네이밍을 사용한다. 낮은 추상화 레벨에서는 더 구체적인 동작을 설명하는 이름을 사용한다.

  • 대부분의 경우 내부로 들어갈수록 추상화 레벨이 낮아진다

  • 주변 코드와의 추상화 레벨이 동떨어져 있는지 지속적으로 확인하는 것이 좋다

 

Q. 가독성이 좋은 코드는?

  • 가독성이 좋은 코드는 불필요한 정보를 덜 인지 해도 되면서 이해하기 수월한 코드라고 생각한다.

 

Q. 가독성이 좋은 코드를 작성하는 방법들은?

  • early return 사용하기

  • 이중 반복문, 분기문의 depth를 줄일 수 있는지 고민하기

  • 부정어 표현 !을 제거할 수 있는 방법이 있는지 고민하기

 

Q. 객체란?

  • 캡슐화

    • 비공개 데이터(필드), 비공개 로직(프라이빗 메서드)을 가질 수 있다

    • 공개 메서드를 통해서 외부와 소통한다

  • 객체 간 상호작용(협력)을 한다

  • 하나의 객체로 관심사가 모이기 때문에 유지보수하기 쉬워진다

 

Tip. 객체 사용시 주의점

  • 하나의 관심사를 가지는지 확인하자

  • 웬만하면 setter의 사용을 자제하고, 값의 변경은 updateXxx, addXxx 같은 명확한 네이밍을 사용하자

 

Q. SOLID(객체 지향 설계의 5개 원칙)는 무엇인가?

 

Q. 상속 보다 조합을 권장하는 이유는?

  • 상속 관계에서 자식과 부모간의 결합은 매우 강하다. 이는 부모 클래스의 변경은 자식 클래스에도 영향을 준다는 의미이다.

     

  • 변경의 가능성이 매우 적고, 상위 클래스의 활용이 필요한 경우가 아니라면 조합과 인터페이스의 사용이 훨씬 유연한 구조를 제공한다

 

🤔 회고

  • 코드를 같이 따라치면서 학습하는 것이 더 효율적일 것 같다. 주말 동안 코드도 같이 따라 치면서 복습할 생각이다.

  • 토이 프로젝트에 배운 내용을 직접 적용해보면서 학습할 예정이다.

 

참고

댓글을 작성해보세요.

채널톡 아이콘