{ "nodes":[ {"id":"33d7d950058b35a0","type":"file","file":"3.Resource (자료실)/클린 코드의 기술/단일 책임 원칙.md","x":-333,"y":-166,"width":513,"height":266}, {"id":"7642a3e2561f5690","type":"text","text":"SRP를 지키려면 하나의 클래스 파일에 하나의 class(객체)만 선언하고 사용하는게 좋다.\n이렇게 하려면 클래스파일이 많아질 수 밖에 없는데\n별도의 파일들로 분리하는게 SRP를 지키는 자연스러운 해결책이라고 한다.\n - 그럼 클래스파일이 너무 많아질텐데?\n : [[파일 분리]]\n- 패키지(폴더)구조를 어떻게 가져가는게 일반적인가?\n : [[패키지 구조]]","x":-333,"y":200,"width":693,"height":240}, {"id":"05b38eceabbfff37","type":"text","text":"클래스마다 메소드가 하나만 있어야 한다는 이야기인가?","x":280,"y":-166,"width":297,"height":80}, {"id":"dd42f36c7e4e5b80","type":"text","text":"하나의 책임을 위해 여러개의 메서드가 사용 될 수 있다.\n클래스가 이 메서드들을 통해 수행하는 업무가 하나여야 한다.","x":280,"y":-340,"width":460,"height":120}, {"id":"ec406bdee9ca8b36","type":"text","text":"책임이라는 기준이 모호하기 때문에 변경을 기준으로 잡으면 설계에 용이할 수 있다.","x":280,"y":-60,"width":400,"height":93}, {"id":"abdc5fc4589917d0","type":"text","text":"단일 책임의 원칙을 지키려다 보면 한계에 봉착하게 된다.\n'결국 누군가는 여러개의 기능을 가지고 있을 수 밖에 없는데?'\n라는 생각에 빠지게 되었음.\n이걸 DI 기능을 제공해주는 framework 사용해서 해결하던가\n애그리게이터 패턴의 객체를 하나 만들던가 하는식으로 해결 할 수 있음.","x":820,"y":-86,"width":580,"height":166}, {"id":"b14a217bb0fd0b6a","x":1040,"y":180,"width":520,"height":400,"type":"file","file":"3.Resource (자료실)/클린 코드의 기술/애그리게이터의 주요 역할.md"}, {"id":"249ebdc4eafa6e80","x":620,"y":180,"width":400,"height":280,"type":"file","file":"3.Resource (자료실)/클린 코드의 기술/애그리게이터.md"}, {"id":"e69cff2fb722aa5e","x":1520,"y":-240,"width":640,"height":360,"type":"text","text":"애그리게이터 활용 예시\n- **사용자 인터페이스(UI)** \n 복잡한 UI 컴포넌트들을 조합하여 상위 UI 컴포넌트를 관리하는 데 애그리게이터를 사용할 수 있습니다. 예를 들어, 여러 개의 버튼, 텍스트 필드, 드롭다운 등을 하나의 큰 UI 컴포넌트로 묶을 수 있습니다.\n \n- **게임 개발** \n 게임에서는 캐릭터, 아이템, 맵 등의 다양한 객체들이 함께 동작하므로, 이를 조합하여 관리하는 애그리게이터가 필요합니다. 예를 들어, `GameEngine`이 여러 게임 객체들을 관리하는 역할을 할 수 있습니다.\n \n- **서비스 관리 시스템** \n 여러 서비스를 하나의 통합된 시스템에서 관리해야 할 때, 각 서비스 객체들을 애그리게이터로 묶어서 상위 시스템에서 관리할 수 있습니다."} ], "edges":[ {"id":"6030b838f141758b","fromNode":"33d7d950058b35a0","fromSide":"bottom","toNode":"7642a3e2561f5690","toSide":"top"}, {"id":"3be70f6875fbc19b","fromNode":"33d7d950058b35a0","fromSide":"right","toNode":"05b38eceabbfff37","toSide":"left"}, {"id":"26cbb4e52b3c67bb","fromNode":"05b38eceabbfff37","fromSide":"top","toNode":"dd42f36c7e4e5b80","toSide":"bottom"}, {"id":"551424005689dc8d","fromNode":"33d7d950058b35a0","fromSide":"right","toNode":"ec406bdee9ca8b36","toSide":"left"}, {"id":"a4d3d983b072903f","fromNode":"05b38eceabbfff37","fromSide":"right","toNode":"abdc5fc4589917d0","toSide":"top"}, {"id":"9f0d95e70e7e4eb5","fromNode":"ec406bdee9ca8b36","fromSide":"right","toNode":"abdc5fc4589917d0","toSide":"left"}, {"id":"d201db751400f333","fromNode":"abdc5fc4589917d0","fromSide":"bottom","toNode":"249ebdc4eafa6e80","toSide":"top"}, {"id":"964cd9d639e29127","fromNode":"abdc5fc4589917d0","fromSide":"bottom","toNode":"b14a217bb0fd0b6a","toSide":"top"}, {"id":"d438a973851a5405","fromNode":"abdc5fc4589917d0","fromSide":"right","toNode":"e69cff2fb722aa5e","toSide":"left"} ] }