자바를 제대로 하려면 꼭 봐야하는 책에 항상 있던 책이다..
스프링을 시작하면서 자바의 원초적인 근본에 대해 공부해야겠다고 생각이 들어 이렇게 적어본다!
이 이야기에 앞서서 팩토리 패턴에 대해 짚고 넘어가야한다!
팩토리 패턴은 클래스의 객체를 대신 만들어 주는 공장을 가지는 패턴이다!
장점
단점
Shpae 인터페이스
public interface Shape { void draw(); }
Shape 인터페이스의 구체적 클래스1 -> Circle
public class Circle implements Shape{
@Override
public void draw(){ System.out.println("Circle - draw() Method.");}
}
Shape 인터페이스의 구체적 클래스2 -> Rectangle
public class Rectangle implements Shape{
@Override
public void draw(){ System.out.println("Rectangle - draw() Method.");}
}
객체를 생성해주는 팩토리 클래스 -> ShapeFactory
public class ShapeFactory {
public Shape getShape(String shapeType){
if(shapeType ==null) { return null;}
if(shapeType.equalsIgnoreCase("CIRCLE") {
return new Circle();
}
if(shapeType.equalsIgnoreCase("RECTANGLE") {
return new Rectangle();
}
}
}
Factory패턴 테스트!
public class FactoryPatternTest {
public static void main(String[] args) {
ShapeFactory shapeFactory = new ShapeFactory();
Shape shape1 = shapeFactory.getShape("CIRCLE");
shape1.draw();
}
}
클래스의 인스턴스를 반환하는 정적메소드!!
즉 이 valueOf 메소드를 호출하면 클래스의 인스턴스를 반환해 준다!
public static Boolean valeOf(boolean b) {
return b ? Boolean.TRUE : Boolean.FALSE;
}
new로 객체를 생성하는 방법은 두가지 문제가 있다
그렇기에 함부로 객체를 생성하지 못하게 막으면서 싱글톤으로 유지 할 수 있는 스태틱 팩토리 메소드 방법을 고려해라!!
이름을 가질 수 있다
호출할 때 마다 인스턴스 생성 안함!
정적 팩토리 메소드를 작성하는 시점에는 반환할 객체의 클래스가 존재하지 않아도 된다!
정적 팩토리 메서드는 프로그래머가 찾기 어렵다!!! => 몇가지 지정한 이름들로 만들자!!