개발자
클래스를 기능별로 분리한 후 1. Facade 패턴을 이용해서 하나로 합친다. 2. 컨트롤러 단에서 분리된 클래스를 일일이 주입받아 사용한다. 1번 방법은 컨트롤러에서 쓰기 간편하니 좋지만, 하나로 합쳐진 클래스가 여러 책임을 지게 될까봐 걱정되고. 2번 방법은 컨트롤러 메서드 적을 때 이 클래스 저 클래스 다 끌어와야 해서 걱정됩니다. 스프링 공부하면서 간단한 게시판 만들고 있습니다. 조회 방식이 좀 다양해서 조회 관련 메서드만 14개가 나왔는데 등록, 수정, 삭제까지 합치니까 하나의 클래스에 담기에는 너무 무거워보입니다. 조회는 따로 떼어놓으려고 하는데 게시글 관련 클래스가 3개가 돼버려서 그 클래스를 대신 호출해줄 클래스를 두려고 합니다. 뭔가 해결책이 찝찝한데 좋은 방법 없을까요?
커리어리 AI 봇
GPT가 달아주는 답변입니다.
2024년 09월 17일
당신이 조사한 두 가지 방법 모두 상황에 따라서 유용할 수 있습니다. 그러나 이를 결정하는 것은 대체로 개발 팀의 선호도와 프로젝트의 복잡성에 달려있습니다. Facade 패턴을 사용하면 복잡한 시스템을 단순화하여 재사용성을 높일 수 있습니다. 하지만 아주 많은 메소드들이 같은 facade 클래스에 모여 있으면, 새로운 개발자가 해당 클래스를 파악하는 것이 어렵고, 너무 많은 책임을 공유하게 되어 결국 Single Responsibility Principle(SRP)를 위반하게 됩니다. 다른 한편으로 일일이 주입 받는 경우 컨트롤러는 각 클래스의 역할과 책임에 대해 명확하게 알고, 이를 통해 더욱 유연하게 코드를 관리할 수 있습니다. 그러나 이 경우 각 서비스 인스턴스를 관리해야 하는 추가적인 부담이 생깁니다. 그래서 다음과 같은 방법을 고려해볼 수 있습니다: 1. **Composite Design Pattern**: Composite 패턴은 객체들의 집합을 단일 객체처럼 다룰 수 있는 구조적 디자인 패턴입니다. 게시판 서비스에서 각 기능(조회, 등록, 수정, 삭제 등)을 분리하고 싶다면 각각을 다른 클래스로 나눈 후 Composite 패턴을 사용하여 이들을 한 곳에서 관리할 수 있습니다. 2. **Service Layer 구조화**: 조회 관련 메소드만 따로 떼어내 'ReadService'와 같은 별도의 서비스를 만드는 것입니다. 매우 큰 클래스를 좀 더 작은 책임을 가진 여러 서비스로 분할함으로써 코드의 가독성과 유지보수성이 향상됩니다. 3. **도메인 주도 설계 (DDD)**: 복잡한 비즈니스 로직에 대처하기 위해 개발된 방법론입니다. DDD는 객체 지향 프로그래밍과 애자일 개발 방법론으로부터 영감을 얻었습니다. 하나의 거대한 애플리케이션 대신에 시스템을 작고 사업적으로 응집력 있는 모듈인 bounded context로 나눔으로써 복잡성을 관리합니다. 기억해야 할 중요한 점은 어떤 선택이든 그 선택이 프로젝트에 가장 적합하고 효율적이며 유지보수가 용이해야 한다는 것입니다.
지금 가입하면 모든 질문의 답변을 볼 수 있어요!