인프런 워밍업 클럽2기 백엔드 - 발자국 1주차
강의: Readable Code: 읽기 좋은 코드를 작성하는 사고법
### 섹션 2: 추상
이 섹션에서는 "추상"과 "구체"의 개념을 확실히 이해하는 것이 중요했습니다. 추상은 불필요한 세부 사항을 제거하고 핵심 개념에 집중하는 방식이었는데, 이를 통해 문제를 더 간단하게 다룰 수 있었습니다. 반대로 구체는 추상적 개념을 현실에 맞게 구체화하는 과정이었습니다. 다양한 추상화 기법과 레벨을 학습하면서, 코드에서 추상화를 어떻게 활용해야 시스템을 더 유연하게 설계할 수 있는지를 배울 수 있었습니다.
### 섹션 3: 논리, 사고의 흐름
코드를 작성할 때 논리적 흐름과 가독성을 고려하는 방법에 대해 다뤘습니다. 코드가 복잡해질수록 논리적인 흐름을 유지하는 것이 중요하며, 이를 통해 가독성이 크게 향상된다는 것을 깨달았습니다. 논리적 흐름이란 코드가 순서대로 자연스럽게 이해될 수 있도록 작성하는 것을 의미하며, 복잡한 코드도 쉽게 이해할 수 있도록 만드는 기법을 익혔습니다.
### 섹션 4: 객체 지향 패러다임
객체 지향 패러다임은 객체가 자신의 역할과 책임을 명확히 갖고, 다른 객체와 협력해 더 큰 작업을 수행하는 방식을 중심으로 다뤄졌습니다. 객체 간의 상호작용을 설계하고 이를 코드로 구현하는 방법을 학습했으며, 특히 SOLID 원칙을 깊이 있게 배우며 객체 지향 설계를 강화할 수 있었습니다.
#### SOLID 원칙
- Single Responsibility Principle(단일 책임 원칙): 객체는 하나의 책임만 가져야 한다는 원칙입니다.
- Open/Closed Principle(개방-폐쇄 원칙): 객체는 확장에는 열려있고, 수정에는 닫혀 있어야 합니다.
- Liskov Substitution Principle(리스코프 치환 원칙): 서브 타입은 언제나 기본 타입으로 치환 가능해야 한다는 원칙입니다.
- Interface Segregation Principle(인터페이스 분리 원칙): 특정 클라이언트를 위한 인터페이스를 분리하는 것이 중요하다는 원칙입니다.
- Dependency Inversion Principle(의존 역전 원칙): 고수준 모듈이 저수준 모듈에 의존하지 않도록 설계해야 한다는 원칙입니다.
### 섹션 5: 객체 지향 적용하기
이 섹션에서는 객체 지향 개념을 실제 코드에 적용하는 법을 배웠습니다. 상속과 조합을 통해 객체 간의 관계를 설계하고, VO(Value Object), 일급 컬렉션 같은 개념을 사용하여 데이터를 효율적으로 관리하는 방법을 익혔습니다. 이러한 기법을 통해 복잡한 시스템에서도 유연하고 재사용 가능한 코드를 작성할 수 있었습니다.
### 미션
- Day 2: 추상과 구체 이해하기
이 미션에서는 "추상"과 "구체"의 개념을 나만의 언어로 설명하고, 이를 예시로 코드에 표현해보는 작업을 했습니다. 추상화를 적용한 코드와 구체적인 코드를 비교하면서 각각의 코드가 어떤 상황에서 적합한지를 분석했습니다.
- Day 4: 코드 리팩터링 및 SOLID 원칙 적용
주어진 코드를 가독성 좋게 리팩터링하고, 배운 SOLID 원칙을 나만의 언어로 다시 정리하는 미션을 수행했습니다. 리팩터링 과정에서 SOLID 원칙을 적용하는 방법을 고민했고, 리팩터링 전후의 코드를 비교해 성능과 가독성에서 어떤 개선이 이루어졌는지 평가했습니다.
### 회고
이 강의를 통해 어렴풋이 알고 있던 개념들을 명확하게 정리할 수 있었습니다. 특히 추상과 구체의 개념을 이해하고 이를 적용하는 것이 생각보다 어렵다는 것을 깨달았습니다. 실제로 프로젝트에 적용하려면 더 많은 연습이 필요하다는 것도 느꼈습니다. 미션을 수행하면서 코드의 가독성과 객체 지향 설계를 더 깊이 이해할 수 있었고, 특히 SOLID 원칙을 내 코드에 적용하는 과정에서 많은 고민을 했습니다. 강의를 듣기 전 나름대로 리팩터링을 시도해 봤지만, 강의를 통해 배운 내용을 적용하니 더 개선할 부분이 많았다는 것을 깨달았습니다. 앞으로 더 많은 실습을 통해 이 개념들을 내 것으로 만들어야겠다고 생각했습니다.
댓글을 작성해보세요.