11월, 2013의 게시물 표시

패턴정리

전략패턴 팩토리메소드패턴 템플릿메소드 패턴 옵져버패턴 - 자주 변화하는 클래스에서 변화가 이러날 때 변화를 출력하거나 그 변화를 이용해야 할 메소드를 호출 시키는 것이다. 데코레이터패턴 http://warmz.tistory.com/757 아답터패턴 이터레이터패턴 - iterator 구현체를 사용한 아답터 패턴 파사드패턴 프록시 패턴 플라이웨이트패턴 - 객체 지향 언어는 객체를 생성함으로써 비객체지향 언어에서 할 수 없는 많은 것들을 할 수 있었습니다만, 그 객체라는게 발목을 잡기도 합니다. 바로 성능에서죠. 객체는 메모리도 많이 잡아먹고 생성하는데 많은 비용이 들어갑니다. Flyweight 패턴은 작은 공간(pool)을 만들어 객체를 공유할 수 있게해 객체 생성을 최대한 줄여줍니다. 이 패턴은 대체로 FlyweightFactory에서 객체를 생성합니다. 예를 들어 흰색 선과 파란 선을 그린다고 할 때 각각의 색을 가진 선 객체는 FlyweightFactory에서 만들어져 흰색 선과 파란 선을 그릴때 언제든지 재사용 할 수 있습니다. 따라서 1000개의 흰색 선과 6000개의 파란 선을 그린다고 할 때 7000개의 객체를 생성하는 대신 두 개의 인스턴스만 만들 것입니다. 그런데 어떻게 객체를 재사용 할까요? 분명히 선을 표시할 때는 그 위치나 길이가 달라지는데 우리가 생각하는 '객체'는 다른 상태는 곧 다른 객체를 의미하지 않습니까? Flyweight 패턴은 이 부분을 내부(intrinsic, 선의 색) 상태와 외부(extrinsic, 위치나 길이) 상태로 나눠서 해결하고 있습니다. Flyweight 패턴은 내부 상태는 유지하는 반면에, 외부 상태는 Flyweight 객체가 실행 되는 동안만 유지합니다. 따라서 Flyweight 객체를 손쉽게 변화시켜 재사용 할 수 있습니다. 자바에서 플라이웨이트 패턴을 사용한 가장 대표적인 예는 String 클래스입니다. 같은 내용의 String 객체를 2개 생성한

DBCP, C3PO 커넥션 유지 하기

JDBC 커넥션 풀을 지원하는 대표적인 오픈소스 중에 아파치  DBCP 와  C3P0 가 있다. 이들은 Spring, Hibernate 등과 통합되어 DB 커넥션 풀을 제공하는 DataSource를 구성하여 자주 쓰인다. 오라클이나 MySQL 등 DBMS들은 기본적으로 특정 시간동안 실행이 없으면 해당 세션을 종료하게 된다. 이렇게 종료된 커넥션은 어플리케이션에서 오류를 발생시키게 되므로 커넥션을 유지하기 위한 별도 설정을 필요로 하게 된다. 커넥션을 얻어올 때 커넥션 테스트를 수행하고 실패하면 새로운 커넥션을 생성할 수 있다. 또한 idle 타임에 주기적으로 커넥션 테스트를 수행할 수도 있다. 아래는 dbcp를 이용하여 구성한 스프링 DataSource 설정의 예이다. <bean id="dataSource" class=" org.apache.commons.dbcp.BasicDataSource " destroy-method="close"> <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/> <property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:orcl"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> <property name="defaultAutoCommit" value="true"/> <property na