Weekly Paper

Weekly Paper#2

승주우에요 2026. 1. 12. 09:19

1. OCP, SRP

  • SRP(단일 책임 원칙) : 하나의 클래스는 하나의 책임만 가져야 한다는 원칙
    코드의 이해가 쉬워지고 유지보수가 용이해짐
  • OCP(개방 폐쇄 원칙) : 확장 시 새로운 요구사항이 생겼을 때 기능을 추가할 수 있어야 하고, 기능 추가 떄문에 기존 클래스의 코드를 수정하지 않아야 한다

OCP, SRP 위반

// SRP, OCP 둘다 위반
class PaymentService {

    public int pay(String type, int price) {
        int discount = 0;

        if (type.equals("RATE")) {
            discount = price * 10 / 100;
        } else if (type.equals("FIXED")) {
            discount = 1000;
        }

        int result = price - discount;
        System.out.println("결제 금액: " + result);
        return result;
    }
}

 

OCP, SRP 적용

// SRP, OCP 적용 코드
interface DiscountPolicy {
    int discount(int price);
}

class RateDiscountPolicy implements DiscountPolicy {
    @Override
    public int discount(int price) {
        return price * 10 / 100;
    }
}

class FixedDiscountPolicy implements DiscountPolicy {
    @Override
    public int discount(int price) {
        return 1000;
    }
}

// 계산 책임
class PaymentCalculator {
    public int calculate(int price, DiscountPolicy policy) {
        return price - policy.discount(price);
    }
}

// 출력 책임
class PaymentPrinter {
    public void print(int price) {
        System.out.println("결제 금액: " + price);
    }
}

class PaymentService {
    private final PaymentCalculator calculator = new PaymentCalculator();
    private final PaymentPrinter printer = new PaymentPrinter();

    public int pay(int price, DiscountPolicy policy) {
        int result = calculator.calculate(price, policy);
        printer.print(result);
        return result;
    }
}
// 사용
PaymentService service = new PaymentService();
service.pay(10000, new RateDiscountPolicy());
service.pay(10000, new FixedDiscountPolicy());

 

2. map vs flatMap

  • map : 입력 요소가 하나의 출력 요소로 바뀌는 1:1 변환,  이 때문에 결과 스트림이 중첩구조가 될 수 있음
  • flatMap : 요소를 여러개의 요소로 변환한 뒤 생기는 중첩 구조를 제거하고 스트림으로 변환. 1:N 변환 수행

map은 변환만 수행하고 구조 유지, flatMap은 변환 후 중첩 구조 제거함

 

map 예시

List<String> sentences = List.of(
        "I love Java",
        "Java stream is powerful"
);

List<List<String>> result = sentences.stream()
        .map(s -> Arrays.asList(s.split(" ")))
        .toList();

// 결과 List<List<String>>
[
        ["I", "love", "Java"],
        ["Java", "stream", "is", "powerful"]
        ]

 

flatMap

// 결과 List<String>
List<String> result = sentences.stream()
        .flatMap(s -> Arrays.stream(s.split(" ")))
        .toList();


["I", "love", "Java", "Java", "stream", "is", "powerful"]

'Weekly Paper' 카테고리의 다른 글

Weekly Paper #9  (0) 2026.03.23
Weekly Paper #7  (0) 2026.02.27
Weekly Paper #6  (0) 2026.02.09
Weekly Paper#5  (0) 2026.02.02
Weekly Paper#3  (0) 2026.01.19