본문 바로가기

Design Pattern

Bridge-Pattern

728x90
반응형

# Bridge-Pattern에 대해 정리.

1. 아래의 예제 코드로업로드 된 브릿지 패턴의 구조는 아래와 같다.

브릿지 패턴은 큰 클래스 또는 밀접하게 관련된 클래스들의 로직을 별도의 계층으로 분리하는 구조적 디자인 패턴이다.

이 계층은 추상화와 구현으로 나뉘며, 이들은 서로 독립적으로 개발될 수 있다. 아래에 제공된 코드에서는 User, UserMapper, UserService, UserServiceImpl, 그리고 UserController 클래스들이 브릿지 패턴을 구현하고 있다.
User 클래스는 추상화를 나타낸다. 이 클래스는 사용자의 정보를 나타내며, 데이터베이스와의 상호작용에 대해서는 알 필요가 없다.
UserMapper 인터페이스는 구현을 나타낸다. 이 인터페이스는 MyBatis 어노테이션을 사용하여 데이터베이스와의 상호작용을 정의한다.
UserService 인터페이스는 User 클래스와 UserMapper 인터페이스 사이의 '브릿지' 역할을 한다. 이 인터페이스는 User 클래스가 필요로 하는 메서드를 정의하며, 이 메서드들의 구현은 UserMapper 인터페이스를 통해 이루어진다.
UserServiceImpl 클래스는 UserService 인터페이스를 구현한다. 이 클래스는 UserMapper 인터페이스를 사용하여 UserService 인터페이스의 메서드를 구현한다.
마지막으로, UserController 클래스는 HTTP 요청을 처리하고 UserService를 사용하여 이러한 요청에 응답한다. 이 클래스는 UserService와 UserMapper 사이의 '브릿지' 역할을 한다.
따라서, 이 코드에서는 브릿지 패턴이 UserService와 UserController 클래스를 통해 구현되었으며, 이 패턴을 통해 User 클래스는 데이터베이스와의 상호작용에 대해 알 필요 없이 UserService 인터페이스만을 알면 되며, 이를 통해 User 클래스와 UserMapper 인터페이스 사이의 결합도를 낮추고 코드의 유연성을 높일 수 있다.

2. 핵심 로직 설명

이 프로젝트에서 브릿지 패턴의 핵심 로직은 UserService 인터페이스와 그 구현체인 UserServiceImpl 클래스, 그리고 UserMapper 인터페이스 사이에서 발생한다.

UserService 인터페이스는 추상화를 나타내고, 이 인터페이스는 사용자 정보를 가져오는 getUser 메서드를 정의한다. 이 메서드는 사용자의 ID를 입력으로 받아 해당 사용자의 정보를 반환한다.

public interface UserService {
    List<User> getUser(String id);
}

UserServiceImpl 클래스는 UserService 인터페이스를 구현하는 클래스로, 이 클래스는 UserMapper 인터페이스를 사용하여 getUser 메서드를 구현한다. 이 클래스는 UserService 인터페이스와 UserMapper 인터페이스 사이의 '브릿지' 역할을 한다.

@Service
public class UserServiceImpl implements UserService {
    private final UserMapper userMapper;

    @Autowired
    public UserServiceImpl(UserMapper userMapper) {
        this.userMapper = userMapper;
    }

    @Override
    public List<User> getUser(String id) {
        return userMapper.getUser(id);
    }
}

UserMapper 인터페이스는 MyBatis 어노테이션을 사용하여 데이터베이스와의 상호작용을 정의하며, 이 인터페이스는 UserServiceImpl 클래스에서 사용되며, UserService 인터페이스의 getUser 메서드의 구현을 담당한다.

@Mapper
public interface UserMapper {
    @Select("SELECT * FROM users WHERE id = #{id}")
    List<User> getUser(String id);
}

이렇게 UserService 인터페이스와 UserMapper 인터페이스는 서로 독립적으로 개발될 수 있으며, UserServiceImpl 클래스는 이 두 인터페이스를 연결하는 '브릿지' 역할을 한다.

3. 예제 소스코드

- 예제 소스코드는 아래의 git hub에 업로드 되어 있다.

https://github.com/Nanninggu/Bridge-Pattern.git

 

GitHub - Nanninggu/Bridge-Pattern: About Bridge-Pattern

About Bridge-Pattern. Contribute to Nanninggu/Bridge-Pattern development by creating an account on GitHub.

github.com

- WorkFlow는 다음에 시간나면 그리자...

 

- 끝 -

728x90
반응형

'Design Pattern' 카테고리의 다른 글

Chain-of-Responsibility-Pattern  (0) 2024.05.29
Template-Method-Pattern  (0) 2024.05.27
Observer-Pattern  (0) 2024.05.25
Adapter-Pattern  (0) 2024.05.24
Proxy Pattern  (0) 2024.05.20