1) SRP(단일 책임 원칙) & OCP(개방-폐쇄 원칙)

**SRP: Single Responsibility Principle

한 클래스는 “딱 하나의 이유”로만 변경돼야 한다. 즉, 한 클래스가 여러 역할(저장/출력/계산/검증 등)을 다 하면 유지보수가 지옥이 됨.

**OCP: Open-Closed Principle

확장에는 열려 있고(Open), 수정에는 닫혀 있어야(Closed) 한다. 즉, “새 기능 추가”할 때 기존 코드를 뜯어고치지 말고, 새 클래스를 추가해서 확장하라는 뜻.

2) Stream API: map vs flatMap

**map

원소 하나를 “다른 값 하나”로 변환

입력 1개 → 출력 1개

결과 스트림도 “한 겹” 유지

**flatMap

원소 하나를 “스트림(여러 값)”으로 만들고, 그걸 펼쳐서(평탄화) 한 줄로 합침

입력 1개 → 출력 여러 개 가능

“2중 리스트 / 문장 -> 단어들” 이런 데서 자주 씀

**

SRP: 한 클래스는 하나의 책임만 가져야 하며, 변경 이유가 하나여야 유지보수가 쉽다.

OCP: 기능 추가 시 기존 코드를 수정하기보다, 새 클래스를 추가해 확장하도록 설계한다.

map: 원소를 1:1로 변환한다.

flatMap: 원소를 여러 값으로 펼쳐서 하나의 스트림으로 합친다.