Java
-
Structural Patterns - 파사드(Facade) 파헤치기Java/디자인패턴 2024. 10. 24. 14:14
파사드(Facade) PatternFacade 패턴은 복잡한 시스템을 단순화하여 사용자가 더 쉽게 접근할 수 있도록 하는 구조적 디자인 패턴입니다. 이 패턴은 여러 클래스나 서브시스템의 인터페이스를 통합하여 단일한 인터페이스를 제공함으로써, 클라이언트가 시스템의 복잡성을 이해하지 않고도 쉽게 사용할 수 있도록 합니다. 주요 특징간단한 인터페이스: 클라이언트는 복잡한 서브시스템의 세부사항을 알 필요 없이 간단한 메서드를 통해 기능을 사용할 수 있습니다.결합도 감소: Facade 패턴을 사용하면 클라이언트와 서브시스템 간의 결합도를 줄일 수 있어, 시스템의 유지보수와 확장이 용이해집니다.서브시스템의 보호: 클라이언트가 직접 서브시스템에 접근하지 않으므로, 서브시스템의 변경이 클라이언트에 미치는 영향을 줄일..
-
SOLID - Dependency inversion (의존성 역전법칙)파헤치기Java/디자인패턴 2024. 10. 22. 16:22
Dependency inversion**Dependency Inversion Principle (DIP)**는 SOLID 원칙 중 하나로, 고수준 모듈이 저수준 모듈에 의존해서는 안 되며, 둘 다 추상화에 의존해야 한다는 개념입니다. 즉, 상위 계층(High-level 클래스)이 하위 계층(Low-level 클래스)에서 세부 사항에 의존하지 않고, 둘 다 인터페이스나 추상 클래스와 같은 추상화에 의존해야 한다는 원칙입니다. DIP를 위배한 코드// Low-level classpublic class Fan { public void spin() { System.out.println("Fan is spinning"); } public void stop() { Syste..
-
SOLID - Interface segregation(인터페이스 분리법칙) 파헤치기Java/디자인패턴 2024. 10. 22. 16:19
Interface segregation**Interface Segregation Principle (ISP)**는 SOLID 원칙 중 하나로, 클라이언트는 사용하지 않는 메서드에 의존하지 않아야 한다는 개념입니다. 즉, 하나의 큰 인터페이스보다는 여러 개의 작은 인터페이스로 분리하여, 각 클래스가 실제로 필요한 기능만을 구현하도록 해야 한다는 원칙입니다. 문제점:위 코드에서는 Worker 인터페이스가 두 가지 책임(일하기와 먹기)을 모두 가지고 있습니다. 하지만, 로봇(Robot)은 먹는(eat()) 행동을 필요로 하지 않습니다. 이는 **Interface Segregation Principle (ISP)**를 위반하는 상황입니다. Robot 클래스는 eat() 메서드를 구현하지 않아야 하지만, 인터페이..
-
SOLID - Liskov substitution 리스코프 치환원칙 파헤치기Java/디자인패턴 2024. 10. 22. 15:27
Liskov substitution principle**Liskov Substitution Principle (LSP)**는 SOLID 원칙 중 하나로, 자식 클래스는 언제나 부모 클래스를 대체할 수 있어야 한다는 것을 의미합니다. 즉, 자식 클래스가 부모 클래스를 대체하더라도 프로그램의 동작이 일관되어야 한다는 것입니다. 자식 클래스가 부모 클래스에서 제공하는 메서드를 오버라이드할 때, 해당 메서드의 계약을 위반해서는 안 됩니다. LSP에 위배된 코드 1번// Parent class Birdpublic class Bird { public void fly() { System.out.println("Bird is flying"); }}// Child class Penguin tha..
-
SOLID - Open-Closed 개방폐쇄원칙 파헤치기Java/디자인패턴 2024. 10. 22. 14:41
Open-Closed 개방폐쇄원칙**Open-Closed Principle (OCP)**는 SOLID 원칙 중 하나로, 소프트웨어 개체(클래스, 모듈, 함수 등)는 확장에는 열려 있어야 하고, 수정에는 닫혀 있어야 한다는 개념입니다. 즉, 새로운 기능이나 요구사항이 생기더라도 기존 코드를 수정하지 않고 확장하는 방식으로 처리해야 한다는 뜻입니다. 적절하지 못한 코드public class ReportGenerator { public void generateReport(String type) { if (type.equals("PDF")) { System.out.println("Generating PDF report..."); } else if (type.e..
-
SOLID - SRP 단일 책임의 원칙 파헤치기Java/디자인패턴 2024. 10. 22. 14:31
SRP 단일 책임의 원칙**Single Responsibility Principle (SRP)**는 객체 지향 설계 원칙 중 하나로, 클래스는 하나의 책임만 가져야 한다는 것을 의미합니다. 즉, 클래스가 여러 가지 역할을 동시에 수행하지 않고, 하나의 역할 또는 기능만을 처리해야 합니다. SRP를 위반하면 코드의 유지 보수성이 낮아지고, 변경에 대한 영향 범위가 넓어질 수 있습니다. SRP에 위배된 코드public class UserService { public void saveUser(User user) { // Save user to database System.out.println("User saved to database: " + user.getName()); ..
-
Java - PageHandler 페이지네이션 구현Java/JAVA 2024. 10. 1. 20:23
public class PageHandler { private int totalCnt; //총 게시물 갯수 private int pageSize; //한 페이지의 크기 private int naviSize = 10; //페이지 내비게이션이 크기 private int totalPage; //전체 페이지의 갯수 private int page; //현재 페이지 private int beginPage; //내비게이션의 첫번째 페이지 private int endPage; //내비게이션의 마지막 페이지 private boolean showPrev; //이전 페이지로 이동하는 링크를 보여 줄 것인지 private boolean showNext; //다음 페이지로 이동하..
-
TransactionAspectSupport, PlatformTransactionManager , RollbackJava/JAVA 2024. 9. 13. 17:33
1. PlatformTransactionManager와 TransactionStatus를 사용하는 방식private PlatformTransactionManager transactionManager;// 트랜잭션 매니저를 주입받는 setter 메소드public void setTransactionManager(PlatformTransactionManager transactionManager) { this.transactionManager = transactionManager;}// 트랜잭션 정의DefaultTransactionDefinition def = new DefaultTransactionDefinition();def.setPropagationBehavior(TransactionDefinitio..