ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 디자인 패턴 - 프로토타입 Prototype Design Pattern에 대한 고찰
    카테고리 없음 2024. 7. 25. 11:50

    요새 회사에서 디자인 패턴 스터디를 하고있다!

    이론을 실제 코드에 적용시키는건 아직 어렵지만, 최대한 레포에 있는 비슷한 코드를 찾아보며 어찌저찌 공부중이다.

    (나중에 정리한 자료도 코드 변경해서 블로그에 다시 올려야지!!)

    내가 맡았던 파트는 아니지만, 디자인패턴-생성패턴 중 프로토타입 패턴을 듣다 문득 의문이 생겼다.

    다른 생성 패턴들은 코드를 예쁘게, 잘 보이게 만들거나 의존성을 낮추기 위해 쓴다는게 와닿는데..

     

    애초에 프로토타입도 객체의 필드를 모두 복사하니까 생성 비용(시간/메모리)이 동일한거 아닌가?
    그럼 프로토 타입은 대체 언제, 왜 쓰는거지?

     

    라는 생각이 스터디 내내 떠나지 않았다.

    비슷한 의문을 스터디원들도 동일하게 가지고 있어 고민하다 보니 좋은 블로그 글을 읽게 되었다.

     

    - 자바스크립트는 왜 프로토타입을 선택했을까[링크]

     

    프로토타입 부분만 간단히 요약하자면 적절한 객체, 대상을  원형(prototype)으로 두고, 새로운 대상이 추가되면 새롭게 분류하는 대신 프로토타입을 통해 "유사성"을 확장한다. 정도인 것 같다.

     

    즉, 프로토타입은 원형 클래스에서 확장하거나, 축소하는 등 변형이 필요할때 사용할 수 있다는 말!

    (특히 프로토타입 패턴은 각자의 객체를 초기화하는 방식만 다른 자식 클래스들의 수를 줄이고 싶을 때 사용하면 좋다고 한다. [링크])

    (이건 참고로 생성 패턴 중 하나인 factory method에서는 전처리/생성을 분리하기 위해 상속받는 점이 다르다.)

     

    이 '변형' 이라는 단어에 집중하면 어? Entity를 DTO로 매핑하는 과정이 프로토 타입 패턴이 아닌가? 라는 생각이 들었는데, 
    두개는 서로 다른 디자인 패턴이라고 한다. DTO 패턴은 주로 네트워크 상 데이터를 전송할때 효율적으로 사용하기 위해 쓰는 것이고, 프로토타입은 객체를 생성할때 초점을 맞춘 것이다.

     

    그렇지만 결국 프로토타입을 왜써야하는데? 에 대한 의문이 풀리지 않아 개인적으로 좀 더 찾아보다 좋은 글을 발견했다.

    https://www.geeksforgeeks.org/prototype-design-pattern/

     

    Prototype Design Pattern - GeeksforGeeks

    A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.

    www.geeksforgeeks.org

    그리기 응용 프로그램에서 작업 중이고 다양한 모양을 만들고 조작해야 한다고 가정해 보겠습니다. 각 모양에는 색상이나 크기와 같은 속성이 다를 수 있습니다. 모든 변형에 대해 새로운 모양 클래스를 만드는 것은 번거롭습니다. 또한 런타임 중에 모양을 동적으로 추가하거나 제거하는 것이 어려울 수 있습니다. (번역)
    ...

     

    간단하게 말하자면 객체 생성이 외부 API 호출 등에 종속적일 경우에 사용하면 좋다는 말이다.

    예를들어 사용자가 유사한 문서 클래스를 만드려고 할때, 이 문서의 양식을 DB에서 읽어와야한다고 가정하면, 문서를 만들때마다 DB를 불러오는 것은 낭비이다. 이때 프로토타입의 clone으로 같은 문서 양식을 대량으로 찍어낼 수 있다는 것!

     

    객체 생성에 비용이 많이 드는 경우, 프로토 타입을 사용해 유사객체를 복제하는 것이 효율적일 수 있다.

    • 시스템에 동적 구성이 필요하고 런타임에 구성이 포함된 객체를 생성하려는 경우 프로토타입 패턴을 사용하세요. 는 정확하게 이해는 못했지만 사용자의 입력이나 환경에 따라 구성이 변경되어야할때를 말하는 것 같다. 

     

    오늘의 공부 끝~!

    개발을 하면 할 수록 내가 모르는게 늘어나고 있다..

    머리 박박긁어..

    그리고 공부해~~~!!

Designed by Tistory.