2021.12.08_브릿지패턴04.자바와스프링에서찾아보는패턴
본문 바로가기
CS Study/디자인패턴

2021.12.08_브릿지패턴04.자바와스프링에서찾아보는패턴

by KyeongMin 2021. 12. 8.
728x90
반응형

Java

  • 대표적인 예제 Jdbc 있음
import java.sql.*;

public class JdbcExample {

    public static void main(String[] args) throws ClassNotFoundException {
        Class.forName ("org.h2.Driver");

        try (Connection conn = DriverManager.getConnection ("jdbc:h2:mem:~/test", "sa","")) {

            String sql =  "CREATE TABLE  ACCOUNT " +
                    "(id INTEGER not NULL, " +
                    " email VARCHAR(255), " +
                    " password VARCHAR(255), " +
                    " PRIMARY KEY ( id ))";

            Statement statement = conn.createStatement();
            statement.execute(sql);

//            PreparedStatement statement1 = conn.prepareStatement(sql);
//            ResultSet resultSet = statement.executeQuery(sql);
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }
}
  • try부분 이 추상화 부분 sql 검색해서 결과 있으면 저장하고 하는 부분
  • 구체적인 곳은
    • Dirver부분임 (h2를 쓰나, MS SQl를 쓰나 이런거 )
    • 새로운 DB만들어지더라도 jdbc를 바꾸지 않음
      • 드라이버 매니저 부분이 바뀌지 않는것
      • 바뀌지 않고 새로운 db를 만들어 확장이 가능되는것임 그 점에서 같음

slf4j

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class Slf4jExample {

    private static Logger logger = LoggerFactory.getLogger(Slf4jExample.class);

    public static void main(String[] args) {
        logger.info("hello logger");
    }
}
  • 시각에 따라 다르지만 일종의 브릿지 패턴과 유사하다고 할 수 있음
  • Logger나 LoggerFactory는 바뀌지 않음
  • 로깅퍼사드는 로거 감싸서 만들어주는 API
    • 라이브러리나 프레임 워크에서 로그4j같은 구체적인 로거를 사용한다고하면 다른 라이브러리나 클라이언트 코드도 쓰는건데, 클라이언트에서 정할 수 있어야함

Spring

  • 직접적으로 찾기 힘들었지만 일부분이라고 할 수 있는 것
import org.springframework.jdbc.support.JdbcTransactionManager;
import org.springframework.mail.MailSender;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.transaction.PlatformTransactionManager;

public class BridgeInSpring {

    public static void main(String[] args) {
        MailSender mailSender = new JavaMailSenderImpl();

        PlatformTransactionManager platformTransactionManager = new JdbcTransactionManager();
    }
}
  • MailSender, PlatformTransactionManager 구체적인 인터페이스 부분
  • JavaMailSenderImpl, JdbcTransactionManager인플리멘테이션의 구현체들임

https://github.com/3DPIT/study/blob/master/05.%EC%BD%94%EB%94%A9%EC%9C%BC%EB%A1%9C%ED%95%99%EC%8A%B5%ED%95%98%EB%8A%94GoF%EC%9D%98%EB%94%94%EC%9E%90%EC%9D%B8%ED%8C%A8%ED%84%B4/02.%EA%B5%AC%EC%A1%B0%EA%B4%80%EB%A0%A8%EB%94%94%EC%9E%90%EC%9D%B8%ED%8C%A8%ED%84%B4/%EB%B8%8C%EB%A6%BF%EC%A7%80%ED%8C%A8%ED%84%B4/2021/1208/04.%EC%9E%90%EB%B0%94%EC%99%80%EC%8A%A4%ED%94%84%EB%A7%81%EC%97%90%EC%84%9C%EC%B0%BE%EC%95%84%EB%B3%B4%EB%8A%94%ED%8C%A8%ED%84%B4/2021.12.08_%EB%B8%8C%EB%A6%BF%EC%A7%80%ED%8C%A8%ED%84%B404.%EC%9E%90%EB%B0%94%EC%99%80%EC%8A%A4%ED%94%84%EB%A7%81%EC%97%90%EC%84%9C%EC%B0%BE%EC%95%84%EB%B3%B4%EB%8A%94%ED%8C%A8%ED%84%B4.md#java

 

GitHub - 3DPIT/study

Contribute to 3DPIT/study development by creating an account on GitHub.

github.com

 

728x90
반응형

댓글