[인프런 워밍업 스터디 클럽 2기_BE] 1주차 회고록 정리
오랜만에 인프런 워밍업 클럽을 진행했다.
기존에 한 번 들었던 강의들이지만 너무 알차고 맛있는 강의였기 때문에 다시 듣는 마음에 설레였다.
이번 주차에서는 가장 중요하다고 생각한 것들이 있는데
추상과 구체
논리, 사고의 흐름
객체 지향 패러다임
SOLID
객체 지향 적용하기
이 흐름이었는데, 정말로 강의를 보면서 느낀 것은
생각하는 방법에 대해 알려주기 → 생각을 직접 해보기 → 생각한 것에 대한 구현을 진행하기라는 순서로 이루어져 있다는 것을 깨달았다.
추상화를 잘하는 것은 핵심을 파악하는 것이며, 분석하는 능력을 키울 수 있다고 생각했다!
첫 주차 과제를 진행하며, 추상과 구체를 작성하는 방법을 배웠고 실생활에서 구체화를 하는 작업을 해보았다.
이름이랑 메서드명, 심지어 띄어쓰기를 하는 것조차 추상화의 과정이라는 점이 너무 신기했다.
추상화 레벨이라는 내용도 있었는데, 상당히 많은 도움이 된 것 같았다. 코드를 읽으면서 "이건 구체화된 내용이지 않을까? 가독성이 좋은가?"라는 생각을 끊임없이 이어갔다.
내가 부족했던 부분은 핵심을 파악하고 간추리는 생각이었는데, 생각하는 방법을 기르는 연습을 한 것이 너무 좋았다. 구현은 어떻게든 할 수 있지만, 어떤 방식으로 설계할지는 나의 몫이라고 생각했다!
생각한 후에는 그에 맞는 객체를 설계해야 하는데,
설계 과정에서 주의해야 할 점이 머릿속에 박혔다. "무례한 행동"이라는 말이 머릿속에 박혀 토이 프로젝트나 개발을 진행하면서 getter나 setter를 사용하려고 할 때 많이 떠올랐다.
객체를 설계할 때 높은 응집도와 낮은 결합도가 핵심이었다. 용어를 알고 개발하는 것과 모르고 하는 것의 차이가 크다는 것을 알았다.
응집도: 하나의 클래스가 기능에 집중하기 위한 모든 정보와 역할 결합도: 모듈 간의 상호 의존성을 나타내는 개념
점진적인 리팩토링 방법도 배우고 정말 꿀팁만 얻은 느낌이다.
도메인 지식은 생각하는 것이 아닌 발견하는 것이다. 도메인 주도 개발을 공부할 때, 도메인 지식을 어떻게든 생각해서 개발을 진행했는데, 하다 보면 도메인이 발견되고 그에 맞게 개발을 하며 점진적인 리팩토링을 하는 궁극적인 개발 방법을 배운 것 같다.
SOLID 원칙에 대해 이론적으로만 공부했었는데, 직접 코드를 작성하며 배우니까 확 와닿았다.
단일 책임 원칙 (SRP): 하나의 클래스는 단 한 가지의 변경 이유만을 가져야 한다.
개방-폐쇄 원칙 (OCP): 확장에는 열려있고, 수정에는 닫혀 있어야 한다.
리스코프 치환 원칙 (LSP): 상속 구조에서 부모 클래스의 인스턴스를 자식 클래스의 인스턴스로 치환할 수 있어야 한다.
인터페이스 분리 원칙 (ISP): 클라이언트는 자신이 사용하지 않는 인터페이스에 의존하면 안 된다.
의존성 역전 원칙 (DIP): 상위 수준의 모듈은 하위 수준의 모듈에 의존해서는 안 된다.
전체적으로는 이전에 배운 책임과 역할에 대해 이론적으로 가장 많이 정리된 느낌이었다. 그중에서 SRP와 DIP가 가장 와닿았으며, 책임과 역할별로 클래스를 나누고 추상화된 인터페이스를 참조하여 사용하는 것을 직접 코드로 작성하며 배웠다. 기존에 작성했던 코드에 대해 많은 반성을 하게 되었다. 책임이 없는 나쁜 코드였던 것 같다.
섹션 5에서 직접 객체 지향을 코드에 적용해 보았다.
각 내용을 정리해보면,
Entity는 식별자를 통해 고유성을 가지며, 시간에 따라 상태가 변할 수 있지만, VO는 불변성을 가지며 모든 속성이 동일하면 같은 객체로 간주된다.
일급 컬렉션은 컬렉션을 감싸는 클래스로, 컬렉션을 포함한 비즈니스 로직과 불변성을 보장하여 관리하는 객체이다.
Enum은 상수의 집합이며, 상수와 관련된 로직을 담을 수 있는 공간이다.
다형성 활용하기 부분에서는 전략 패턴과 함께 적용해서 회사에서도 코드 작성을 더 깔끔하게 해 보았다. 아직 일급 컬렉션에 대해서는 확실히 와닿지는 않아서 추후에 공부하면서 "아, 이런 개념이 있었구나"라고 언젠가 깨달을 것 같다.
2주차 과제는 주어진 메서드에 대해 객체를 설계하고 적용해 보는 내용이었다. 섹션을 보고 큰 키워드를 떠올리며 개선을 했는데, 딱딱 맞아떨어지면서 "아, 이렇게 다음에 큰 규모의 코드가 있을 때 바꾸면 되겠구나"라고 어느 정도 감을 잡았던 것 같다.
관련 코드: GitHub 링크
아직 객체 지향에 대해 공부를 많이 하지는 않았고 익숙하지는 않지만, 조금씩이라도 이런 식으로 하면 좋겠다는 생각을 한 것 자체로 성공이라고 생각한다. 2주차를 진행하면서 더 확 와닿을 수 있기를 기대하며 계속 공부를 이어가야겠다.
댓글을 작성해보세요.