inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[인프런 워밍업 클럽 스터디] Day 4 미션

박지원
0

1. 아래 코드와 설명을 보고, [섹션 3. 논리, 사고의 흐름]에서 이야기하는 내용을 중심으로 읽기 좋은 코드로 리팩토링해 봅시다.

public boolean validateOrder(Order order) {
        if (order.checkItemsNone()) {
            log.info("주문 항목이 없습니다.");
            return false;
        }

        if (order.getTotalPrice() <= 0) {
            log.info("올바르지 않은 총 가격입니다.");
            return false;
        }

        if (order.hasNotCustomerInfo()) {
            log.info("사용자 정보가 없습니다.");
            return false;
        }
        return true;
}

 

2. SOLID에 대하여 자기만의 언어로 정리해 봅시다.

SOLID

객체지향 설계를 더 이해하기 쉽고 유연한 형태로, 유지 보수를 쉽게 만드는 데 도움을 주는 원칙

 

SRP: Single Responsibility Principal 단일 책임 원칙

*책임의 경계선을 인식하기 위해서는 계속해서 질문을 던져 보는 경험적 측면이 필요.

 

OCP: Open-Closed Principle 개방-폐쇄 원칙

*난이도 조절 기능이 추가된다면> (1) 숫자 변경되었을 때 그 숫자에 맞춰 게임이 정상 진행되도록 한다 (2) 난이도 조절에 대한 요구사항에 대응한다의 순서로 기능을 추가해 나간다.

 

LSP: Liskov Substitution Principle 리스코프 치환 원칙

 

ISP: Interface Segregation Principle 인터페이스 분리 원칙

 

DIP: Dependency Inversion Principle 의존성 역전 원칙

*의존성: 하나의 모듈이 다른 하나 모듈을 알고 있거나 직접 사용하는 모든 것들

의존성의 순방향: 고수준 모듈이 저수준 모듈을 참조하는 것

의존성의 역방향: (고수준 모듈) 기능을 추상화해서 추상화된 스펙을 만족하는 것을 이용해 요구사항을 해결할 수 있는 것. (저수준 모듈) 인터페이스를 구현한 구현체가 얼마든지 바뀔 수 있는 것.

즉, 추상화를 가운데 두고 의존하도록 하는 것

 

*DIP, DI, IoC

DIP(Dependency Inversion Principle): 고수준 모듈과 저수준 모듈은 직접적 의존이 아닌 추상화에 의존해야 한다.

DI(Dependency Injection): 필요한 의존성을 외부에서 주입받는다. "3"의 숫자를 기억할 것. 객체 a, b가 있는 상황에서 a가 b를 필요로 할 때 직접 생성자를 통해 주입 받는 것이 아닌, 제3자가 둘 사이의 의존성을 맺어준다. 스프링에서는 스프링 컨텍스트(**IoC 컨테이너)가 한다.

IoC(Inversion of Control): 프로그램 제어 주도권이 개발자가 아닌 프레임워크에 있다.

**IoC 컨테이너: 객체의 생명주기를 관리하고 의존성 주입까지 해 준다.

인프런워밍업클럽스터디

답변 0