후... 간단한 프로그램인데 너무힘들었다.. 특히나 TLD파일을 넣는게.. 늘상 이클립스에서 새로 추가만 하다가.. 이클립스에서 지원 안해주는 파일을 넣을려고하니.. 인터넷 검색하고 책뒤지고.. 결국은 걍 메모장에다가 직접 손코딩을 했다. 휴.. 고생좀 했지만 다행이다. 간단한 프로그램이지만 TLD를 처음써본기념으로 올려봤다. 후.. 시간은 늦었지만 마음은 뿌듯하다.^^
/** * Servlet implementation class for Servlet: Servlet3 * */ public class Servlet3 extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet { static final long serialVersionUID = 1L;
public class model1 { public List getBrands(String color) { List brands = new ArrayList(); if (color.equals("amber")) { brands.add("Jack Amber"); brands.add("Red Moose"); } else { brands.add("Jail pale Ale"); brands.add("Gout Stout");
단순히 자신이 정의된 클래스의 인스턴스를 리턴하는 메소드로 public static로 정의한다.
대표적인 예로 boolean의 래퍼클래스인 Boolean.valueOf( boolean b )가 있다.
boolean 값을 인자로 받아 이 값에 해당하는 Boolean 타입의 객체 참조를 리턴한다.
public static Boolean balueOf( boolean b ){ return ( b ? Boolean.TRUE : Boolean.FALSE ); }
스태틱 팩토리 메소드는 public 생성자와 비교해 볼 때 다음과 같은 장단점이 있다.
장점
스태틱 팩토리 메소드는 생정자와 달리 알맞은 이름을 줄 수 있다
생성자에 전달되는 인자들만 보고 그 생성자가 리턴하는 객체의 특징을 알기 어렵다.
하지만 스태틱 팩토리 메소드는 이름만 보고도 객체의 특징을 잘 설명할수 있으며 스태틱 팩토리 메소드를 이용하면 쓰기도 쉽고 작성한 코드는 이해하기도 쉽다.
스태틱 팩토리 메소드는 생성자와 달리 호출될 때마다 새로운 객체를 생성하지 않아도 된다.
단점
메소드를 정의한 클래스가 public나 protected 생성자를 재공하지 않으면, 다른 클래스가 이 클래스를 상속받을수 없다는 것이다.
다른 스태틱 메소드와 차이를 명시 할수도 없다는것.
다음은 스태틱 팩토리 메소드의 이름의 표준이다.
valueOf - 인자가 전달한 값과 동등한 인스턴스를 리턴한다. 이 이름을 가진 스태틱 팩토리 메소드는 실제로 타입-변환 연산자로 많이 쓰인다.
getInstance - 인자에 해당하는 인스턴스를 리턴한다. valueOf와 달리 리턴하는 인스턴스가 인자와 동등한 값을 가지지 않을 수도 있다.싱글톤의 경우엔 유일한 인스턴스를 리턴하며 이 이름을 가진 스태틱 팩토리 메소드는 서비스 제공자 프레임 워크에서 많이 쓰인다.