워밍업 클럽 4기 백엔드 - 1주차 발자국

강의 내용

추상

변수, 메소드, 객체를 정의하는 것을 결국 추상화의 한 과정이다.

추상화를 통해 구체적인 구현 방식을 모르더라도 코드를 이해할 수 있게 되고, 이는 곧 한정된 뇌의 메모리 공간에 더 추상적인, 넓은 범위의 정보를 저장할 수 있는 인지적 경제성으로 이어진다.

추상화의 이점을 제대로 활용하기 위해서는 읽는 사람으로 하여금 올바르게 추상을 이해할 수 있도록 코드를 작성해야 한다. 예를 들어, 컬렉션 이름을 단수로 짓는 등 오해할 여지를 남겨서는 안 된다. 읽는 사람이 직관적으로 유추하고 이해하기 어려운 축약어 사용을 지양하고, 도메인에 특화된 용어라면 해당 표현을 정리한 사전을 만들어 두는 것도 도움이 된다. 일반적으로 많이 사용하는 좋은 용어, 개념을 수집해 사용하는 것도 좋은 방법이다.

하나의 세계 안에서는 추상화의 수준을 동등한 수준으로 맞춰줄 필요가 있다. 추상화의 수준이 다르면 코드를 읽는 흐름이 깨질 위험이 있다.

 

논리, 사고의 흐름

사람의 뇌는 한정된 기억 공간을 갖는다. 따라서 코드를 읽을 때, 한 순간에 기억하고 있어야 하는 정보의 수를 줄이는 것이 읽기 좋은 코드를 작성하는 핵심이다. 이를 위해서는 중첩된 조건/반복문 사용을 지양하는 등 주의가 필요하다.

예외에 대한 세심한 처리도 중요하다. 개발할 때는 기본적으로 해피케이스를 상정하고 코드를 작성하기 때문에, 예외적인 상황에 대해서는 의도적으로 고민하고 의심하며 처리할 필요가 있다.

객체지향 패러다임

객체는 추상화의 결과다. 객체를 정의해 사용함으로써 눈에 잘 보이지 않는 개념을 가시화 할 수 있고, 이를 이용해 코드에 대한 이해도 및 코드의 유지보수성을 높일 수 있다. 객체를 설계할 때는 SOLID 원칙에 입각하여 각 객체가 적절한 수준의 책임을 가지도록 해야 한다. 객체에 둘 이상의 책임을 부여해서도 안 되고, 다른 객체에 자신의 책임을 전가해서도 안 된다. 상속, 다형성 같은 개념에 대해 잘 이해하고 값 객체, 일급 컬렉션 등의 패턴을 활용하면 객체지향 패러다임의 장점을 잘 활용한 코드를 작성할 수 있다.

 

회고

퇴근 후에 매일 강의를 챙겨 듣는 과정이 솔직히 쉽지는 않았다. 스스로 고민하면서 체득하는 과정이 필요했기에 더 그랬던 것 같다. 그래도 강의를 듣고 미션을 수행하면서 스스로 고민해보고, 코드를 개선해보면서 즐거움을 느꼈다. 사소한 의문이 들었던 순간이 종종 있었지만, 다음 주제의 리팩토링을 진행할수록 쌓였던 의문이 해소되는 과정을 경험하면서 강의 구성이 좋다는 생각이 들었다. 강의를 들으면서 많은 인사이트를 얻었는데, 특히 추상화의 레벨이나 객체지향 파트는 정말 도움이 많이 되었다.

 

미션

Day2

추상화의 예시를 작성하는 미션이었다. 이왕이면 컴퓨터나 개발과 관련된 예시를 찾고 싶어서 고민을 해봤고, 키보드 입력 예시를 들어보기로 결정했다. 처음에는 단순히 '키보드로 문자를 입력한다'라는 추상적인 문장을 써놓은 뒤에 조금씩 구체화 했다. 3-5 문장이라는 요건에 맞춰서 구체화를 했는데, 나름대로 추상화의 레벨을 맞춰서 쓰려고 노력해봤다. 대학에서 운영체제 수업을 들을 때는 추상화라는 단어를 알지 못 하고 있던 터라 미처 몰랐는데, 우리가 사용하는 컴퓨터는 끝없는 추상화의 산물이라는 생각이 들었다. 물론 컴퓨터 외에도 추상화는 언어부터 시작해 모든 분야에 필수적이지만, 특히 컴퓨터공학을 공부할 때 추상화라는 개념을 아는 것과 모르는 것의 차이는 결코 작지 않은 것 같다.

Day4

코드 리팩토링과 SOLID 원칙에 대해 정리하는 미션이었다. 처음에는 섹션3에서 다룬 내용만을 활용해 미션을 해결했다. early return, 중첩 조건문 제거, 부정 연산자 제거 및 메소드 이름 수정 등을 통해 리팩토링을 진행했다. 마치고 보니 조금 아쉬운 느낌이 들어서 더 나아가 섹션4에서 배운 객체지향 패러다임의 내용을 적용해 보았다. 리팩토링 된 코드를 보니까 확실히 잘 읽힌다는 생각이 들었는데, 내가 짠 코드라서 더욱 그렇게 보이는 것이 아닌가 싶은 의구심도 함께 들었다. 미션의 코드는 간단한 예제라서 더 나아졌지만, 리팩토링의 결과가 항상 더 좋은 쪽으로만 이어지지는 않을 것 같다. 다른 사람들과 공유하고 서로 리뷰하는 과정을 거치면 더 좋지 않을까 하는 생각이 들었다.

댓글을 작성해보세요.

채널톡 아이콘