객체의 생성을 캡슐화 하는 패턴이다.
풀어서 말하자면 ,, 뭐라 해야 할까..
보통 객체를 생성할 때 사용하고자 하는 클래스의** 생성자를
이용하여 인스턴스를 생성** 한다.
이 때 클라이언트는 객체를 직접 생성하는 것이 아닌, 팩토리
라는 공장을 통해 가져오는 것이다.
public interface Job{
void employment();
}
@Slf4j
public class Doctor implement Job{
@Override
public void employment(){
log.info("의사로 취업!!");
}
}
@Slf4j
public class Nurse implement Job{
@Override
public void employment(){
log.info("간호사로 취업!!");
}
}
Job라는 Interface를 상속 받은 2개의 직업이 있다.
public class JobFactory{
public Job getJob(String job){
if(job.equals("의사")) {
return new Doctor();
}else if(job.equals("간호사")){
return new Nurse();
}
}
}
Job객체를 생성하여 반환해주는 메소드를 가진 Factory 클래스다.
JobFactory jobFactory = new JobFactory();
Scanner scan = new Scanner(System.in);
//의존 x
String job1 =scan.next(); //의사
Job doctor = jobFactory.getJob(job1);
String job2 =scan.next(); //간호사
Job nurse = jobFactory.getJob(job2);
위에 코드를 인스턴스를 생성할 때,
객체의 생성을 JobFactory에 위임함으로써 , 클라이언트는
인스턴스를 얻을 때 구체 클래스에 의존하지 않는다.
예를 들어 , 하나의 직업을 추가한다고 가정하였을 때 ,
Job인터페이스를 상속받아 구현해주기만 하면 된다.
클라이언트를 손볼 필요 없이 확장이 가능 하다.
-성할 클래스의 종류를 증가 시키고자 할 때마다 클래스를 생성하고 , 그만큼 관리해야할 클래스가 늘어난다.