Factory 클래스 생성 및 패키지 분리
dependency inversion principle 적용 함.