위클리 페이퍼 – 객체지향 & Stream API

1️⃣ 단일 책임 원칙(SRP)

개념

  • 하나의 클래스는 하나의 책임만 가져야 한다
  • 클래스가 바뀌는 이유는 하나여야 한다

왜 필요한가

  • 기능이 섞이면 수정할 때 영향 범위가 커진다
  • 코드 이해와 유지보수가 어려워진다

❌ SRP 위반 예시

class UserService {
    void saveUser() {
        // 사용자 저장
    }

    void sendEmail() {
        // 이메일 전송
    }
}
  • 사용자 저장 + 이메일 전송
  • 책임이 2개 → SRP 위반

✅ SRP 적용 예시

class UserService {
    void saveUser() {
        // 사용자 저장
    }
}

class EmailService {
    void sendEmail() {
        // 이메일 전송
    }
}
  • 클래스마다 책임이 명확
  • 수정 시 영향 범위 최소화

2️⃣ 개방-폐쇄 원칙(OCP)

개념

  • 기능 확장에는 열려 있고(Open)
  • 기존 코드 수정에는 닫혀 있어야 한다(Closed)

왜 필요한가

  • 요구사항이 늘어날 때 if/else 지옥 방지
  • 기존 코드 안정성 유지

❌ OCP 위반 예시

class DiscountService {
    int discount(String grade) {
        if (grade.equals("VIP")) return 20;
        if (grade.equals("NORMAL")) return 10;
        return 0;
    }
}
  • 등급 추가 시 if문 계속 수정 필요

✅ OCP 적용 예시

interface DiscountPolicy {
    int discount();
}

class VipDiscount implements DiscountPolicy {
    public int discount() {
        return 20;
    }
}

class NormalDiscount implements DiscountPolicy {
    public int discount() {
        return 10;
    }
}
  • 새로운 할인 정책 = 클래스 추가
  • 기존 코드 수정 없음

3️⃣ Stream API – map

개념

  • 하나의 값을 다른 값 하나로 변환
  • 구조는 유지된다

예시

List<String> names = List.of("kim", "lee", "park");

List<String> result = names.stream()
        .map(name -> name.toUpperCase())
        .toList();

흐름 설명

  • “kim” → “KIM”
  • “lee” → “LEE”
  • “park” → “PARK”
  • 입력 1개 → 출력 1개

4️⃣ Stream API – flatMap

개념

  • 여러 값을 평평하게 펼쳐서 하나의 스트림으로 만든다
  • 중첩 구조 제거용

예시

List<List<String>> data = List.of(
    List.of("A", "B"),
    List.of("C", "D")
);

List<String> result = data.stream()
        .flatMap(list -> list.stream())
        .toList();

흐름 설명

  • List.of(“A”,”B”) → “A”,”B”
  • List.of(“C”,”D”) → “C”,”D”
  • 결과: [“A”,”B”,”C”,”D”]

5️⃣ map vs flatMap 핵심 차이

  • map
    • 값 변환
    • 구조 유지
  • flatMap
    • 구조 펼침 + 값 변환
    • List 안에 List가 있을 때 사용

✍️ 최종 요약

  • SRP: 클래스는 하나의 책임만 가진다
  • OCP: 기존 코드는 건드리지 않고 확장한다
  • map: 값 변환
  • flatMap: 구조 평탄화