SRP(Single Responsibility Principle)
"λ¨μΌ μ± μ μμΉ" μ΄λΌλ λ»μΌλ‘ ν΄λμ€λ νλμ μ± μλ§ κ°μ ΈμΌ νλ€λ μλ―Έ
β μλ° μμ μ½λ
class UserService {
public void saveUser(User user) {
// DBμ μ μ₯
System.out.println("Saving user to DB");
}
public void sendEmail(User user) {
// μ΄λ©μΌ μ μ‘
System.out.println("Sending email to user");
}
}
β μ¬λ°λ₯Έ μμ μ½λ
class UserRepository {
public void save(User user) {
System.out.println("Saving user to DB");
}
}
class EmailService {
public void send(User user) {
System.out.println("Sending email to user");
}
}
class UserService {
private final UserRepository userRepository;
private final EmailService emailService;
public UserService(UserRepository userRepository, EmailService emailService) {
this.userRepository = userRepository;
this.emailService = emailService;
}
public void register(User user) {
userRepository.save(user);
emailService.send(user);
}
}
OCP(Open-Closed Principle)
"κ°λ°©-νμ μμΉ" μ΄λΌλ λ»μΌλ‘ νμ₯μλ μ΄λ €μκ³ , μμ μλ λ«νμμ΄μΌ ν¨
ν¬μΈνΈ
β μ½λ μμ
interface Payment {
void pay(int amount);
}
class CardPayment implements Payment {
public void pay(int amount) {
System.out.println("Pay by card");
}
}
class KakaoPayment implements Payment {
public void pay(int amount) {
System.out.println("Pay by KakaoPay");
}
}
class PaymentService {
private final Payment payment;
public PaymentService(Payment payment) {
this.payment = payment;
}
public void pay(int amount) {
payment.pay(amount);
}
}
SRP
OCP
Stream<T>->Stream<R>
μμλ₯Ό 1:1λ‘ λ°ννλ κ², κ° μμλ₯Ό λ§€μΉν΄ λ€λ₯Έ κ°μΌλ‘ λ³ν
π μμ μ½λ
List<String> names = List.of("kim", "lee", "park");
names.stream()
.map(String::toUpperCase)
.forEach(System.out::println);
μ€ν κ²°κ³Ό
KIM
LEE
PARK
Stream<Stream<T>>->Stream<T>
μμλ₯Ό νμ΄μ νλμ μ€νΈλ¦ΌμΌλ‘ ν©μΉλ κ²
map
[ [a, b], [c, d] ]
β map
[ Stream(a,b), Stream(c,d) ]
flatMap
[ [a, b], [c, d] ]
β flatMap
[ a, b, c, d ]
map μ¬μ© κΈ°μ€
- μμ νλ -> κ²°κ³Ό νλ
- κ° λ³ν, νλ μΆμΆ
- ꡬ쑰 μ μ§
flatMap μ¬μ© κΈ°μ€
μμ νλ -> μ¬λ¬ μμ
- 컬λ μ / λ°°μ΄ / μ€νΈλ¦Ό λ°ν
- μ€μ²© ꡬ쑰 μ κ±°