개발자

클래스가 너무 커질때

2024년 09월 17일조회 63

클래스를 기능별로 분리한 후 1. Facade 패턴을 이용해서 하나로 합친다. 2. 컨트롤러 단에서 분리된 클래스를 일일이 주입받아 사용한다. 1번 방법은 컨트롤러에서 쓰기 간편하니 좋지만, 하나로 합쳐진 클래스가 여러 책임을 지게 될까봐 걱정되고. 2번 방법은 컨트롤러 메서드 적을 때 이 클래스 저 클래스 다 끌어와야 해서 걱정됩니다. 스프링 공부하면서 간단한 게시판 만들고 있습니다. 조회 방식이 좀 다양해서 조회 관련 메서드만 14개가 나왔는데 등록, 수정, 삭제까지 합치니까 하나의 클래스에 담기에는 너무 무거워보입니다. 조회는 따로 떼어놓으려고 하는데 게시글 관련 클래스가 3개가 돼버려서 그 클래스를 대신 호출해줄 클래스를 두려고 합니다. 뭔가 해결책이 찝찝한데 좋은 방법 없을까요?

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.
profile picture
익명님의 질문

답변 1

aigoia님의 프로필 사진

저는 시스템적으로 판단했을때 구조적으로 이래야 한다는 차원이 아니라 내가 한번 짜면 그 자체로 완결되서 잘 손대지 않을 것들은 분사합니다. 계속 수정이나 추가 가능성이 높은 것들이 일반적인 이름을 가지고 한번 분사하면 수정가능성이 적은 부분들이 구체적으로 무얼 하는지에 관한 이름을 가지게 되져. 이걸 무슨 패턴이라 불러야 할지 모르겠네여. 체인지블 패턴이라고 해야할까여.

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

AI 답변
커리어리 AI 봇 프로필 이미지

커리어리 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로 나눔으로써 복잡성을 관리합니다. 기억해야 할 중요한 점은 어떤 선택이든 그 선택이 프로젝트에 가장 적합하고 효율적이며 유지보수가 용이해야 한다는 것입니다.

목록으로

지금 가입하면 모든 질문의 답변을 볼 수 있어요!