본문 바로가기

개발/Spring Boot

[Spring Boot] Spring에서 사용된 디자인 패턴

반응형
  1. Singleton Pattern (싱글톤 패턴):
    • 목적: 클래스의 인스턴스가 하나만 생성되도록 하는 패턴.
    • 예제: Spring에서 @Service@Component 어노테이션을 사용하여 Bean을 정의하면 해당 Bean은 기본적으로 싱글톤 스코프로 생성됨.
    @Service
    public class MySingletonService {
        // 싱글톤으로 동작하는 서비스
    }
    
    
  2. Factory Method Pattern (팩토리 메서드 패턴):
    • 목적: 객체 생성을 서브 클래스에서 결정하도록 하는 패턴.
    • 예제: Spring에서 @Bean 어노테이션을 사용하여 메서드를 통해 Bean을 생성하는 방식.
    @Configuration
    public class AppConfig {
        @Bean
        public MyService myService() {
            return new MyServiceImpl();
        }
    }
    
    
  3. Observer Pattern (옵저버 패턴):
    • 목적: 객체 간에 일대다 의존성을 정의하여 한 객체의 상태 변경이 다수의 객체에 자동으로 통지되도록 하는 패턴.
    • 예제: Spring의 이벤트 시스템.
    // 이벤트 객체
    public class MyEvent extends ApplicationEvent {
        public MyEvent(Object source) {
            super(source);
        }
    }
    
    // 이벤트 리스너
    @Component
    public class MyEventListener implements ApplicationListener<MyEvent> {
        @Override
        public void onApplicationEvent(MyEvent event) {
            // 이벤트 핸들링 로직
        }
    }
    
    // 이벤트 발행
    @Service
    public class MyEventPublisher {
        @Autowired
        private ApplicationEventPublisher applicationEventPublisher;
    
        public void publishEvent() {
            applicationEventPublisher.publishEvent(new MyEvent(this));
        }
    }
    
    
  4. Template Method Pattern (템플릿 메서드 패턴):
    • 목적: 알고리즘의 뼈대를 정의하고 일부 단계를 서브 클래스로 미루는 패턴.
    • 예제: Spring의 JdbcTemplate.
    @Repository
    public class MyRepository extends JdbcDaoSupport {
        public List<MyEntity> findAll() {
            return getJdbcTemplate().query("SELECT * FROM my_table", new MyEntityRowMapper());
        }
    }
    
    

이러한 디자인 패턴들은 소프트웨어 개발에서 특정 문제를 해결하기 위한 일반적인 해결책을 제공합니다. 패턴을 이해하고 적절하게 활용함으로써 코드의 유지보수성과 확장성을 향상시킬 수 있습니다.

반응형

'개발 > Spring Boot' 카테고리의 다른 글

[Spring Boot] Mock MVC란?  (0) 2023.12.14
[Spring Boot] jpa n+1 문제  (1) 2023.12.05
[Spring Boot] Spring Batch란?  (0) 2023.11.23
[Spring Boot] Junit이란?  (0) 2023.11.20
[Spring Boot] Spring Security란?  (0) 2023.11.10