블로그

sdsd988

[워밍업 클럽 스터디 2기 백엔드(클린코드, 테스트코드)] 1주차 발자국

1주차 강의섹션 1. 추상과 구체섹션 2. 논리, 사고의 흐름 | 객체 지향 패러다임섹션 3. 객체 지향 패러다임 (SOLID)요약 : 좋은 코드(클린코드)를 작성하기 위한 도구와 사용 방법을 학습 강의 내용추상과 구체 (클린코드의 목적과 도구)논리, 사고의 흐름  우리는 코드를 읽는 시간이 더 많다.따라서, 코드는 쉽게 읽히고 이해되어야 한다.이를 위해, 우리는 추상, 구체 를 이해하고 분리해야 한다.메서드 작성, 파라미터 선언, 반환값 고민, 매직 스트링 등 좋은 코드 작성을 위한 고민과 도구를 학습조기 리턴, 공백 라인, 부정어 등 이해하기 쉬운 코드 작성을 위해 조심해야 하는 부분 학습 한번쯤 들어보거나, 읽어본 이야기다. 그렇지만, 현업에서 개발하면서 시간을 핑계로, 선배들이 좋게 보지 않는다는 이유로 실무 개발과 공부한 내용을 분리해서 개발해왔다. 그렇기에, 실제 코드를 바탕으로 고민하고 코드를 작성해보는 경험이 좋았다. 개발자는 고민하고, 코드를 직접 작성해봐야 뭐가 된다는 것을 새삼 느낄 수 있었다. 객체 지향 패러다임단일 책임 원칙객체의 변경 기준은 책임이다.책임이 단일하지 않다면, 변경의 기준도 단일하지 않다.이로 인해 객체의 코드 변경의 원칙이 무너진다. 코드를 읽고, 객체를 사용해야 하는 입장에서 어려움을 겪게 된다.개방 / 폐쇄 원칙책임이 과중히 부과되어서는 안된다.즉 객체는 자신의 책임에 대해서는 기능을 확장할 수 있지만, 자신이 아닌 책임에 대해서는 영향을 받으면 안된다.현재의 책임이 구체인지 추상인지 고민하고, 구체라면 추상화와 다형성을 활용해서 원칙을 지킬 수 있다.리스코프 치환 원칙 사용하는 입장에서 부모 클래스와 자식 클래스의 차이를 알지 못해야 한다.즉 슈퍼 클래스는 불필요한 기능을 상속해서는 안된다. 객체의 상속 사용시 주의해야 할 것 같다.인터페이스 분리 원칙책임을 명확하게 갖는 것은, 인터페이스도 예외가 아니다.인터페이스는 추상화, 다형성의 중요한 도구인 동시에 책임을 갖는다.의존성 역전 원칙기능은 변하고, 요구사항은 추가된다.그렇기에 고수준 모듈은 구체(저수준 모둘)를 참조하는 것이 아니라 추상에 의존해야 한다.새로운 요구 사항이 추가되고, 기능이 변경된다고 하더라도 추상에 의존한다면 코드의 변경 범위를 최소화 할 수 있다  미션 : 배운 내용을 바탕으로 고민해보기미션1. 추상과 구체 사례 예시 제출미션2. 과제 코드 리팩토링 제출미션은 강의를 학습한 내용을 적용해보는 방향으로 접근했다.특히, 고민 해보는 것을 중요하게 생각했다.과거에도 강의를 보고 학습하면서, 직접 고민해보는 시간이 부족했다고 생각했다. public class Delivery { private Order order; public boolean validateOrder(Order order) { if (validateItemSize(order)) { log.info("주문 항목이 없습니다."); return false; } if (validateTotalPrice(order)) { log.info("올바르지 않은 총 가격입니다."); return false; } if (DoesNotHaveCustomerInfo(order)) { log.info("사용자 정보가 없습니다."); return false; } return true; } private boolean validateTotalPrice(Order order) { return order.getTotalPrice() <= 0; } private boolean validateItemSize(Order order) { return order.doesNotHaveItems(); } private boolean DoesNotHaveCustomerInfo(Order order) { return order.doesNotHaveCustomInfo(); } } 1주차 회고 계획한 것 보다 강의와 미션에 시간을 할애하지 못했다.과제를 제출하고, 다른 참여생분들이 작성한 미션을 보면서 반성하고 자극되었다.특히 아쉬운 점은, 과제를 pdf, github 등을 통해 더 깔끔하게 제출할 수 있었는데 하지 못한점이 아쉽다.좋았던 점은, 워밍업 클럽이라는 곳에 소속감이 생겨서 주어진 기간내에 강의를 완강했다는 것. 혼자 수강했다면 이 정도 진로를 나갈 수 없었을 것이라고 생각한다.가장 좋았던 것은 미션이었다. 강의에서도 가장 좋은 점이 직접 리팩토링을 하는 시간이 많다는 것.워밍업 클럽에서도 미션이 가장 좋았다. 직접 무언가를 하는 경험이 지금의 내게 가장 맞다고 생각되었다.

백엔드백엔드클린코드ReadableCode읽기좋은코드를작성하는사고법

jin02019

인프런 워밍업 클럽 2기(클린코드/테스트 코드)_day4 미션

1. 아래 코드와 설명을 보고, [섹션 3. 논리, 사고의 흐름]에서 이야기하는 내용을 중심으로 읽기 좋은 코드로 리팩토링해 봅시다.✔ 사용자가 생성한 '주문'이 유효한지를 검증하는 메서드. ✔ Order는 주문 객체이고, 필요하다면 Order에 추가적인 메서드를 만들어도 된다. (Order 내부의 구현을 구체적으로 할 필요는 없다.) ✔ 필요하다면 메서드를 추출할 수 있다.public boolean validateOrder(Order order) { if (order.getItems().size() == 0) { log.info("주문 항목이 없습니다."); return false; } else { if (order.getTotalPrice() > 0) { if (!order.hasCustomerInfo()) { log.info("사용자 정보가 없습니다."); return false; } else { return true; } } else if (!(order.getTotalPrice() > 0)) { log.info("올바르지 않은 총 가격입니다."); return false; } } return true; }리팩토링 후 public boolean validateOrder(Order order) { if (order.getItems().isEmpty()) { log.info("주문 항목이 없습니다."); return false; } if (order.getTotalPrice() > 0) { if (order.hasCustomerInfo()) { return true; } log.info("사용자 정보가 없습니다."); return false; } if (order.getTotalPrice() <= 0) { log.info("올바르지 않은 총 가격입니다."); return false; } return true; } }!(부정 연산자) 줄이기dept 줄이기공백 라인 추가 2. SOLID에 대하여 자기만의 언어로 정리해 봅시다.단일 책임 원칙하나의 클래스는 하나의 책임만 가져야 한다. 하나의 역할에 집중하면 코드를 수정할 때 다른 부분에 영향을 주지 않고 유지보수가 쉬워진다.개방 - 폐쇄 원칙확장에는 열려 있고 수정에는 닫혀있어야 한다.기존의 코드를 변경하지 않고 새로운 기능을 추가할 수 있어야 한다. 이미 작동하는 코드가 손상될 위험이 줄어들고 확장도 수월하다.리스코프 치환 원칙부모 클래스 대신 자식 클래스를 사용해도 문제가 없어야 한다. 자식 클래스가 부모 클래스의 기능을 대신할 수 있다면 코드의 안정성을 높일 수 있다.인터페이스 분리 법칙인터페이스는 필요한 기능만을 나누어 제공해야 한다.큰 인터페이스보다는 작은 인터페이스 여러 개로 설계해야 한다.불필요한 의존성을 줄이고 코드의 유연성을 높일 수 있다.의존 역전 법칙고수준 모듈은 저수준 모듈에 의존하지 않아야 한다.추상화된 인터페이스에 의존해야 한다.변화에 강한 구조를 만들고 코드의 재사용성을 높일 수 있다. 

프로그래밍 언어읽기좋은코드를작성하는사고법day4미션

채널톡 아이콘