생성자 패턴

2009. 6. 1. 11:56 from JSP
텔레스코핑(telescoping) 생성자
public class Test {
  private final int servingSize;
  private final int servings;
  private final int calories;

  public Test( int servingSize, int servings ){
    this( servingSize, servings, 0 );
  }

  public Test( int servingSize, int servings, int calories ){
    this.servingSize = servingSize;
    this.servings = servings;
    this.calories = calories;
  }
}
매개변수값이 작을 경우에는 유용하지만 길어지면 파라메터의 용도파악이 어려움

자바빈즈패턴
public class Test {
  private int servingSize = -1;
  private int servings = 0;
  private int calories = 0;
  public Test( ){}
 
  public void setServingSize( int val ){
    servingSize = val;
  }
  public void setServings( int val ){
    servings = val;
  }
  public void setCalories( int val ){
    calories = val;
  }
}
객체 생성후 여러번의 setter 메소드를 호출하여 파라메터를 전달해야만 사용가능한 인스턴스를 생성할 수 있고 불변 클래스생성이 불가능;;

빌더패턴
public class Test {
  private final int servingSize;
  private final int servings;
  private final int calories;
 
  public static class Builder {
    private final int servingSize;
    private final int servings = 0;
    private final int calories = 0;
   
    public Builder( int val ){
      this.servingSize = val;
    }
    public Builder servings( int val ){
      this.servings = val;
      return this;
    }
    public Builder calories( int val ){
      this.calories = val;
      return this;
    }
    public Test build(){
      return new Test(this);
    }
  }
  private Test(Builder builder){
    servingSize = builder.servingSize;
    servings = builder.servings;
    calories = builder.calories;
  }
}
사용법::
Test a = new Test.Builder(1).servings(1).calories(1).build();

생성자에 많은 매개변수가 필요할 경우 유용함
Posted by 윤재현 :

기간검색시 종료일 처리

2009. 5. 22. 10:59 from DB
기간 검색시 시작일 2009-01-01 종료일 2009-01-03의 범위로 검색하게 되면

종료일이 2009-01-03 00:00:00 으로 변환되어 비교되므로 3일의 레코드를 검색할 수가 없어서

종료일에 하루를 더해서 작은것을 검색하도록 쿼리를 정리했습니다.
ORACLE
등록일 < to_date('2009-01-01', 'yyyy-mm-dd') + 1
MSSQL
등록일 < dateadd( day, 1, convert(datetime, '2009-01-01') )
MYSQL
등록일 < date_add(STR_TO_DATE('2009-01-01', '%Y-%m-%d' ) INTERVAL 1 DAY )
가격과 역순의 쿼리길이
Posted by 윤재현 :
SELECT REPLACE(TO_CHAR('1', '00,00'), ',' ,':' )
FROM DUAL
-> 00:01 출력
데이터 베이스에 varchar 형식으로 저장된 필드를
시간:분 형식으로 select 하려는데 TO_CHAR 형식은 . 또는 , 등의 숫자형 구분자만을 허용하므로
일단은 허용되는 구분자로 포맷 후 replace를 이용해서 원하는 구분자로 변환
Posted by 윤재현 :