[인프런 워밍업 클럽 백엔드 스터디 2기] 2주차 발자국

오늘은 2주차 Readable Code의 완강시점으로 한 주간 진행되었던 강의에 대해 정리하고, 배우고 느낀 점을 적도록 하겠습니다.

 

Day -7 리팩토링 연습

섹션7 리팩토링 연습을 듣고 작성한 글입니다.

  1. 메서드 추출로 추상화 레벨 맞추기

  2. Optional을 통한 null 반환 안하기

  3. 객체에 메시지를 보내서 물어보자

  4. 객체의 책임과 응집도 - IO 통합, 일급컬렉션, display(), Order 추출

  5. 추상화 관점의 차이 - FileHandler

     

해당하는 내용에서 2가지가 가장 크게 와닿았습니다.

 

첫 번째 - 추상화 레벨 맞추기

이부분은 이전에 [인프런 워밍업 클럽 백엔드 스터디 2기] 1주차 발자국 에 작성하였습니다.

간단한 정리하자면

  1. 고수준 추상화 레벨은 소스코드에 전반적인 흐름에 대한 내용입니다.

  2. 저수준 레벨은 세부사항에 대해 작성하는 코드입니다.

     

하지만 실무에서는 추상화 레벨을 고려하지 않고 코드를 구현하다 보면 개발자가 쉽게 피로해지고, 유지보수하기 어렵다. 때문에 지속적으로 인지하고 변경하자는 내용이였습니다.

 

두 번째 - 데이터에 대한 추상화 스펙

제가 강의를 보면서 제일 중요하다고 생각했던 부분은 방법에대한 추상화가 아닌 어떤 데이터를 필요로 하는지에 대한 스펙을 뽑느게 더 나은 추상화라는 구문이였습니다.

데이터 중심의 추상화방법 중심의 추상화를 비교하면, 개발에서 중요한 것은 어떤 데이터를 필요로 하는지 정의하고 이를 통해 시스템의 요구 사항을 명확히 하는 것이라는 점 이였습니다.

개발 초기에는 종종 구현 방법에 집중하여, "어떻게 코드를 작성할 것인가"에 대해 고민하게 됩니다. 예를 들어, 스타크래프트 게임에서 "배럭을 통해 마린, 파이어뱃, 고스트를 생산"한다고 가정했을 때, 일반적인 구현은 각 유닛을 객체로 만들고, 사용자가 선택할 때마다 객체를 생성하는 방식일 수 있습니다. 이 접근법은 구체적인 객체와 그 생성 방법에 중점을 둡니다.

그러나, 의존성 역전 원칙(DIP, Dependency Inversion Principle)을 적용하면, 유닛에 대한 데이터를 추상화하고 이를 생성자를 통해 전달받는 방식으로 코드를 구성할 수 있습니다. 이렇게 하면 구체적인 구현에서 벗어나 유연한 객체 구조를 만들 수 있습니다. 구체적으로는, 배럭이 직접 유닛 객체를 생성하는 것이 아니라, 유닛의 속성(이름, 공격력, 체력 등)에 대한 데이터만을 전달받고 유닛 객체는 외부에서 주입된 데이터를 기반으로 생성되는 구조로 전환됩니다.

이와 같은 방식으로 데이터를 추상화하면 다음과 같은 장점이 있습니다:

  1. 확장성: 새로운 유닛이 추가되더라도, 별도의 객체 생성 코드 변경 없이 데이터만 추가하면 됩니다.

  2. 유연성: 유닛 생성 방법이 변경되더라도, 추상화된 데이터를 기반으로 유닛을 생성하므로, 코드 수정이 최소화됩니다.

  3. 재사용성: 동일한 추상화된 구조를 다른 상황에서도 쉽게 적용할 수 있습니다.

따라서, 방법에 초점을 맞추기보다는 필요한 데이터의 스펙을 먼저 정의하고 추상화하는 것이 더 나은 설계로 이어질 수 있다는 것을 전달해주었고, 저에게 크게 와닿았습니다.

 

지속하고 싶은 부분

이번 클린 코드를 들으면서 기존에 들었던 내용과 새로운 내용들이 많이 있었습니다. 알고 있던 내용들은 다시 상기시킬 수 있어서 너무 좋았으며, 새로운 내용들은 지속적으로 인지하도록 노력할 것입니다. 그러기 위해 개인 블로그에 정리할 예정이며, 개발에 대해 고민이 있을 때 꺼내 보도록 하겠습니다.

 

아쉬웠던 점

코드 리뷰를 받을 수 있는 자리가 있었는데 날짜를 잘못 봐서 못해봤다는 것이 너무나도 아쉬웠고, 다음에는 미션을 좀 일찍 끝내서 리뷰를 받을 수 있게 할 것입니다.

추가적으로 코드 리뷰 상세하게 해주셔서 감사합니다.

시도해볼 점

같은 프로젝트를 진행하는 팀원들에게도 공유한다면 지금보다 더 성장할 수 있는 개발자가 될 것이라고 생각되었고, 공유하는 자리를 주도적으로 만들어 보도록 하겠습니다.


2주차 Readable Code 강의 정리

주요 학습 내용

  1. 리팩토링 연습

    • 메서드 추출로 추상화 레벨 맞추기

    • Optional을 통한 null 반환 지양

    • 객체에 메시지 보내기

    • 객체의 책임과 응집도

    • 추상화 관점의 차이

가장 인상 깊었던 두 가지 개념

1. 추상화 레벨 맞추기

  • 고수준 추상화: 소스코드의 전반적인 흐름

  • 저수준 추상화: 세부사항

  • 중요성: 코드 가독성 향상 및 유지보수 용이성

2. 데이터에 대한 추상화 스펙

  • 방법보다 필요한 데이터 스펙 정의가 중요

  • 데이터 중심 추상화 vs 방법 중심 추상화

  • 예시: 스타크래프트 유닛 생산 시스템

  • 장점: 확장성, 유연성, 재사용성 향상

개선 및 실천 계획

  1. 지속할 점

    • 학습 내용 개인 블로그에 정리

    • 개발 시 학습 내용 적극 활용

  2. 아쉬웠던 점

    • 코드 리뷰 기회를 놓친 것

    • 향후 미션 일정 조율 필요

  3. 시도해볼 점

    • 팀원들과 학습 내용 공유

    • 공유 자리 주도적으로 만들기

       

 

댓글을 작성해보세요.

채널톡 아이콘