디자인패턴 첫번째 - 초보자를 위한 싱글톤

Поділитися
Вставка
  • Опубліковано 28 січ 2025

КОМЕНТАРІ • 39

  • @오늘코딩
    @오늘코딩  2 роки тому +3

    00:00 intro
    00:36 서론 - 사용 예시
    01:57 싱글톤의 첫번째 특징
    02:28 싱글톤의 두번째 특징
    03:16 싱글톤의 세번째 특징
    05:05 코드 작성 시작
    08:42 싱글톤의 문제점
    09:08 코드 완성 후 마무리 리뷰
    10:08 실제 플레이 테스트
    11:22 수 많은 매니저들을 관리하는 방법들
    12:32 제네릭 형태의 싱글톤 구현

  • @hoyakim4280
    @hoyakim4280 2 роки тому +18

    싱글톤은 조심해야 한다고 배웠습니다. 다른 디자인 패턴과 달리 싱글톤은 "철회"가 어렵습니다. 오브젝트가 하나여야 하는지 오브젝트가 담고 있는 "데이터"가 하나여야 하는지 잘 생각해서 트랜젝션을 대신 사용해야 할 수도 있습니다. 그리고 싱글톤은 멀티프로세스 환경에서 의도한 바와 다르게 동작하기 때문에 그것도 조심해야 합니다. 저는 그래서 데이터가 유일해야 하면 DB(Redis같은 좀 덜 무거운거) 쓰고 데이터와 함께 행동까지 유일해야 하면(디바이스 드라이버 등) 싱글톤을 씁니다.

    • @김김-e2l
      @김김-e2l Рік тому +1

      디펜던시 가 좀 더 있냐 없냐 차이고 DB 쓰는게 결국 싱글턴 쓰는거지.
      내가 코드로 구현해서 메모리에 올려두나 남이 만든 redis 메모리 올려두나 그게 그거.
      멀티 프로세스가 아니라 멀티 스레드 말하는 것 같은데 .net의 Lazy나 c++ call_once 같이 언어 차원에서 지원되는 기능 있으니 별 힘 안 들이고도 초기화 가능함.

    • @너진바
      @너진바 10 місяців тому

      ​@@김김-e2l이젠 머가 상황따라 좋고 나쁜지 몰겟네요

    • @dokidoki_jajingjjang
      @dokidoki_jajingjjang 4 місяці тому

      MonoBehavior를 상속받는 싱글톤 클래스는 스레드 안정성은 보장된다고 보는게 맞지요. 데이터 지향 설계로 간다면 모르겠습니다만

  • @Gyokujin
    @Gyokujin Рік тому +1

    제네릭을 싱글톤에 접목시키는건 모르고 있었는데 이번 기회에 배웠습니다 영상 감사합니다

  • @namespace_
    @namespace_ 2 роки тому +2

    진짜 쉽고 자세하게 설명해주시네
    진짜 이해가 쏙쏙 됩니다 감사합니다

  • @gim-ori
    @gim-ori 2 роки тому +1

    씬 전환시 데이터 유지에 대한 방법을 찾다가 흘러왔습니다. 유익한 강의 감사합니다!

  • @flaticonbanana8314
    @flaticonbanana8314 2 роки тому +1

    와 두고두고 봐야겠네요. 목소리도 너무 멋있으세요~~~

  • @JustHarry4455
    @JustHarry4455 2 роки тому +2

    항상 감사합니다.

  • @aidenji9028
    @aidenji9028 Рік тому +1

    감사합니다!!!! 싱글톤에 대해 너무 쉽게 잘 이해하게 되었어요~

  • @김성덕-y8r
    @김성덕-y8r 2 роки тому +2

    자세하게 설명해 주셔서 한번에 이해했네요! 감사합니다!

  • @edyfrelliah2485
    @edyfrelliah2485 2 роки тому +1

    좋은 영상 감사합니다. 다른 패턴영상도 기대되네요

  • @솔무한
    @솔무한 2 роки тому +1

    싱글톤에 대해서 어려웠었는데 오늘코딩님 영상보고 조금은 이해하게 되었습니다! 감사합니다!

  • @윤준석-s2d
    @윤준석-s2d 2 роки тому +1

    설명 너무 좋네요 감사드려요

  • @zihasoo
    @zihasoo 2 роки тому +1

    전 개발자가 심각한 싱글톤 중독이라 고치는데 애먹었었는데 확실히 코드 짜는거 자체는 편한건 있더라구요...

  • @오하이-j2l
    @오하이-j2l 2 роки тому +2

    와 깔끔한 설명이네요

  • @이강민-h3y
    @이강민-h3y 2 роки тому +1

    좋은 영상

  • @llllIIIIlllIIIlll
    @llllIIIIlllIIIlll 2 роки тому +1

    설명이 좋네요~ ㅎㅎ

  • @shk3593
    @shk3593 2 роки тому +1

    오늘도 잘 배웠습니다. 많은 도움이 되었습니다~ 전에도 알아듣기 좋았지만 이번 영상은 설명하시는 톤이 더 안정적이고 체계적이 되신 것 같습니다. 감사합니다~

    • @오늘코딩
      @오늘코딩  2 роки тому

      잘 찍어보려고 조금씩 더 준비하고 있습니다. 알아봐주셔서 기쁘네요 ㅎㅎ
      앞으로 더 깔끔하게 준비해보겠습니다 감사합니다

  • @톰-l2o
    @톰-l2o Рік тому +1

    안녕하세요! 도움이 많이 되었습니다. 감사합니다. ( _ _)

  • @박성찬-c1w
    @박성찬-c1w 2 роки тому +3

    좋은 영상 잘 봤습니다. 제너릭 부분 하실때 궁금한게 있습니다. 이미 instance가 존재하면 새로 생긴 싱글톤 오브젝트는 Destroy로 삭제하는 로직은 없어도 되는건가요?

    • @오늘코딩
      @오늘코딩  2 роки тому +1

      좋은 댓글 너무 감사합니다!
      사실 destroy로 파괴하는 로직은, 싱글톤자체를 인위적으로 생성하는 경우에 오류 발생을 방지하기 위한 예외처리를 위해서 필요합니다.
      그런데 영상처럼 처음 씬에 전부 생성해놓고 끌고가는 경우라면 굳이 생성파괴를 할 일이 없어서 제가 빼먹은것같네요 ㅠ
      그렇지만 프로젝트가 규모가 커지고 훗날 어떤 변형이 이뤄질지 모른다면 말씀하신 destroy처리를 해주는게 더 좋은 코딩이라고 생각합니다! 감사합니다.

  • @FromTo738
    @FromTo738 Рік тому +1

    private static DataManager instance; 선언 후 get을 쓰는 것과 public static DataManager Instance;의 차이가 뭔가요?

  • @Wind_mill
    @Wind_mill 2 роки тому +1

    좋은 영상 감사합니다! 해당 영상을 따라하다가 아래와 같은 문구가 갑자기 등장했는데요.
    아직 부족한 실력이라. 어디서 발생하는지 몰라서요... 조언을 부탁드려도 될까요?
    [Adaptive Performance] No Provider was configured for use. Make sure you added at least one Provider in the Adaptive Performance Settings.

    • @오늘코딩
      @오늘코딩  2 роки тому +1

      Adaptive Performance 관련된 설정이 잘못되어있는것 같네요.
      패키지매니저에서 Adaptive Performance 찾아서 삭제하시거나, 아니면 올바르게 세팅해주면 될 것 같습니다.
      유니티 Adaptive Performance라고 구글에 검색하셔서 공식문서 확인해보시길 바랍니다.

    • @Wind_mill
      @Wind_mill 2 роки тому

      @@오늘코딩 잘몰라서, 모두 삭제하고 다시 만들었더니 잘됩니다! 감사합니다!

  • @감사합니다잘보겠습니
    @감사합니다잘보겠습니 2 роки тому +1

    재밌어요

  • @tetras699
    @tetras699 2 роки тому +1

    저여태까지 존속성을 종속성으로 알고있었어요 ㅋㅋㅋㅋㅋㅋ

  • @mayilagann3833
    @mayilagann3833 2 роки тому +2

    무지성 싱글톤 멈춰!!!!!!!

  • @고양이5000원
    @고양이5000원 Рік тому +1

    뭐라하노..

  • @게임개발자-b5e
    @게임개발자-b5e Рік тому

    난 왜 하나도 이해가 안될까..

  • @abcd99999f
    @abcd99999f 2 роки тому +1

    근데 그냥 public쓰지 뭐하러 private 씀?
    그거 보안 의미 ㅈ도 없는데

    • @Victory2025_Trump
      @Victory2025_Trump Рік тому

      꼭 보안의 의미로 쓰는건 아니라서용....

    • @reasure3
      @reasure3 Рік тому

      외부에서 instance을 직접 바꾸는걸 방지하는 역할도 있습니다.

  • @sorryseori471
    @sorryseori471 2 роки тому

    유튜브 잘 보고 있습니다!
    15:25에서 부모오브젝트가 있거나 최상위에 뭔가 존재한다면 이라고 설명하시는데 그럼 or이 들어가야하나요?
    그리고 제네릭을 사용할 때, Destroy를 추가해준다면
    private void Awake()
    {
    if (instance == null)
    {
    // 씬 전환이 되어도 유지되도록
    // 부모가 있거나 최상위에 뭔가 있다면
    if (transform.parent != null || transform.root != null)
    {
    DontDestroyOnLoad(this.transform.root.gameObject);
    }
    else
    {
    DontDestroyOnLoad(this.gameObject);
    }
    }
    else
    {
    Destory(this.gameObject);
    }
    }
    이렇게 해도 될까요?