2021.12.05_프로토타입패턴04.자바와스프링에서찾아보는패턴
본문 바로가기
CS Study/디자인패턴

2021.12.05_프로토타입패턴04.자바와스프링에서찾아보는패턴

by KyeongMin 2021. 12. 5.
728x90
반응형

프로토타입패턴 사용

Student keesun = new Student("Keesun");
Student Whiteship = new Student("whiteShip");
ArrayList<Student> students = new ArrayList<>();
student.add(keesun);
student.add(whiteship);

ArrayList<Student clone = (ArrayList<Student>) studnet.clone();
Sysytem.out.println(clone);
  • 이전까지는 이렇게 사용했었는데, 실무에서는 이렇게 사용하지 않는다.
Student keesun = new Student("Keesun");
Student Whiteship = new Student("whiteShip");
List<Student> students = new ArrayList<>();
student.add(keesun);
student.add(whiteship);

List<Student clone = (List<Student>) studnet.clone();
Sysytem.out.println(clone);
  • 변수 타입지정할 때 추상적인 타입으로 씀
    • 좀더 유연하기 때문에 사용 함
ArrayList<Student> students = new ArrayList<>();

List<Student> students = new ArrayList<>();
  • 인터페이스 뒤에오는 구체적인 타입의 오브젝트나 구현체 인스턴스 다른것으로 사용
  • 단, List의 경우는 Cloneable을 상속하지 않기 때문에 다른 방법으로 컬렉션 복사함

실무에서 많이 사용하는 컬렉션 복사하기

List<Student> clone = new ArrayList<>(student);
  • 이렇게 할 수 있는데 clone을 사용하는 것 보다 자주 사용됨
  • 위의 경우는 대신 프로토타입은 아님

기존 오브젝트 복사하는 경우

  • 평이한 데이터 타입에 자체를 복사 하고 싶을 때
GithubIssueData githubIssueData = new GithubIssueData();
githubIssueData.setId(githubIssue.getId());
githubIssueData.setRepositoryName(githubIssue.getRepository().getName());
  • 대게 이렇게 하는데
  • ModelMapper를 이용하면 더 쉽게 할 수 있음
    • modelmapper.org

Modelmapper 사용

ModelMapper.modelMapper = new ModelMapper();
GithubIssueData githubIssueData = modelMapper.map(githubIssue, GithubIssueData.class);
System.out.println(githubIssueData);
  • 리플렉션을 이용해서 하는 것임
  • 리플렉션에 대한 개념을 알고 있으면 좋음
  • 직접 코딩 하지 않아도 되고 알아서 해주는 것

https://github.com/3DPIT/study/blob/master/05.%EC%BD%94%EB%94%A9%EC%9C%BC%EB%A1%9C%ED%95%99%EC%8A%B5%ED%95%98%EB%8A%94GoF%EC%9D%98%EB%94%94%EC%9E%90%EC%9D%B8%ED%8C%A8%ED%84%B4/01.%EA%B0%9D%EC%B2%B4%EC%83%9D%EC%84%B1%EA%B4%80%EB%A0%A8%EB%94%94%EC%9E%90%EC%9D%B8%ED%8C%A8%ED%84%B4/2021/12/1205/%ED%94%84%EB%A1%9C%ED%86%A0%ED%83%80%EC%9E%85/04.%EC%9E%90%EB%B0%94%EC%99%80%EC%8A%A4%ED%94%84%EB%A7%81%EC%97%90%EC%84%9C%EC%B0%BE%EC%95%84%EB%B3%B4%EB%8A%94%ED%8C%A8%ED%84%B4/2021.12.05_%ED%94%84%EB%A1%9C%ED%86%A0%ED%83%80%EC%9E%85%ED%8C%A8%ED%84%B404.%EC%9E%90%EB%B0%94%EC%99%80%EC%8A%A4%ED%94%84%EB%A7%81%EC%97%90%EC%84%9C%EC%B0%BE%EC%95%84%EB%B3%B4%EB%8A%94%ED%8C%A8%ED%84%B4.md 

 

 

 

728x90
반응형

댓글