워밍업 클럽 스터디 3기 BE 클린코드 & 테스트 발자국 1주차
학습 내용
추상 : 구체적인 것에서 어떤 이미지를 뽑아냄, 이해를 위해 특정한 측면만 가려내고 다른 측면은 버린다.
추상으로부터 구체가 유추되어야한다.
클린 코드는 뇌 메모리를 적게 쓰는 방향으로 가야하며 사고의 깊이는 줄이는 방향으로 가야한다.
객체 : 목적을 가지고 추상화 된 것 (관심사에 따라 나누어지고 특정 관심사를 모아서 두는 것)
SOLID : 객체지향 설계를 이해하기 쉽고 유연한 형태로 유지보수하기 쉽게 만드는데 도움을 주는 원칙
SRP : Single Responsibility Principle (단일 책임 원칙)
하나의 클래스는 단 한가지의 변경 이유(하나의 책임)만을 가져야 한다.
OCP : Open-Closed Principle (개방 폐쇄 원칙)
요구사항이 추가되었을때 기존 코드 변경 없이(수정에는 닫힘), 시스템의 기능을 확장(확장에는 열림) 할 수 있어야한다.
LSP : Liskov Substitution Principle (리스코프 치환 원칙)
상속 구조에서 자식 클래스는 부모 클래스의 책임을 준수하며, 부모 클래스의 행동을 변경하지 않아야 한다. (부모 책임 가지면서 추가적으로 행동해야함)
ISP : Interface Segregation Principle (인터페이스 분리 원칙)
특정 구현체에서 사용하지 않는 기능이 있다면 해당 인터페이스에 기능이 결합되어있는 것이므로 분리한다.
DIP : Dependency Inversion Principle (의존성 역전 원칙)
상위, 하위 모듈 모두 추상화에 의존하여 저수준이 변경 되어도 고수준이 영향받지 않아야한다.
학습 회고
일주일동안 생각보다 강의 듣는 것이 쉽지 않았다. 강의를 듣다가 멈춰서 내용을 정리해보고 다시 듣다가 생각을 해보고 하다보니까 생각보다 시간이 걸려서 OT 시간에 라디오처럼 들어야한다는 의미가 무슨 말이었는지 이해하게되었다.
다음주에는 좀 더 라디오처럼 듣는 방식을 취해야하지 않을까 싶다.
미션
미션2
현실의 추상화가 무엇이 있을까 고민을 해보았는데 예시처럼 자연의 현상도 그렇고 물건들 하나하나 그냥 내가 쓰고있는 볼펜 하나까지도 우리가 사용하고 인지 할 때의 모든 것이 추상화 되어있었다.
그래서 물건 중의 하나를 선택해 미션2에 작성을 해보았는데 추상의 구체화라고 생각을 하고 작성한 그 한줄의 구체 내에도 더 세세한 구체가 있었어서 그럼 내가 적은 구체 마저도 또 더 세세한 구체의 추상이구나 하는 생각이 들었다.
미션을 진행 하면서 내가 생각했던 것 이상으로 그냥 세상 자체가 레벨화된 추상으로 이루어져 있다고 느꼈다.
미션4
주어진 코드를 리팩토링하는 미션에서 코드 상 Early return 과 동일한 레벨의 추상화, 의미가 전달되는 명명법, 부정어를 지양하는 것, 공백 라인으로 의미별 구분을 하는 것 등을 적용 하려고 했다.
수정을 하면서 null이나 예외처리 같은것도 고려가 되어야하는 것인지, Order은 optional 객체인지, Order 객체의 구조는 어떻게 되어있는 것이 좋을지, 새롭게 생성한 함수의 내부 처리는 어떻게 하는게 좋을지에 대한 고민을 했는데 그 모든걸 답변에 포함하는게 대상인지에 대한 고민까지 들어서 생각을 많이 하게되는 시간이었다.
SOLID에 대하여 자신만의 언어로 다시 작성해보자는 미션을 제출하기 위해 SOLID에 대한 작성을 해보았는데 결과적으로는 나만의 언어라기 보단 강의의 내용을 내가 이해한 만큼만 작성한 것 같아서 좀 아쉬웠다.
나만의 언어로 쓰는 것이 어떤건지 생각을 해보아야겠다는 생각이 들었다.
미션 해결 회고
미션을 진행하는데 생각과 고민을 하게 되어서인지 예상보다 시간이 좀 걸렸다.
시간이 걸린 다는 것을 인지하고 미션 수행을 해야겠다.
답변 0





