Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Seminar1] 클래스 간 역할 #2

Open
1 task done
yeeun0702 opened this issue Oct 9, 2024 · 0 comments
Open
1 task done

[Seminar1] 클래스 간 역할 #2

yeeun0702 opened this issue Oct 9, 2024 · 0 comments

Comments

@yeeun0702
Copy link
Collaborator

yeeun0702 commented Oct 9, 2024

ToDo

  • 가이드 코드 클래스간 역할에 대해 설명하고, 이렇게 역할을 분리해서 얻은 장점과 분리하는 이유에 대해 고민해보고 서술해주세요.

클래스 간 역할에 대한 설명

Main

  • 사용자와의 상호작용을 하는 클래스입니다.
  • 입출력 처리를 해당 클래스에서 처리합니다.

Diary

  • "일기"의 도메인 클래스입니다.
  • 각각의 일기는 고유한 id와 내용을 포함하고, id는 일기를 구별하는 기본키로 사용됩니다.

DiaryController

  • 사용자로부터 온 요청에 대한 처리를 서비스클래스로 넘겨주고, 내부 시스템으로 받은 응답을 사용자에게 돌려줍니다.
  • 사용자가 입력한 데이터의 유효성을 검사합니다. (ex. 일기 글자수는 30자로 제한)

DiarySerivce

  • 비즈니스 로직 수행 책임을 담당(알맞은 정보를 가공)합니다.
  • 사용자로 받은 일기의 id 타입변환을 하는 과정을 해당 클래스에 구현했습니다.
    Repository에 구현할 경우, Service 계층은 단순히 Repository의 메소드를 호출하는 역할만 하게 됩니다.
    이는 Service가 Repository의 구체적인 구현에 직접 의존하여 강한 결합이 발생합니다. 따라서 해당 과정을 Service에 구현했습니다.

DiaryRepository

  • DB 관리(연결, 해제, 자원 관리)를 담당합니다.
  • 서비스 클래스로부터 받은 id 값이 존재하는지를 확인하고 없을 경우, 예외를 반환합니다.

역할을 분리해서 얻은 장점과 분리하는 이유

  1. 객체지향 프로그래밍이 가능해집니다.
    왜 ? --> 각 계층별(Controller, Service, Repository 등)로 나누어서 코드를 작성하므로 !!
    각 계층이 명확한 책임을 가지므로, 코드의 가독성이 높아집니다.
  2. 유지보수에 유용 (리팩토링 할 경우)
    코드를 수정할 경우 특정 계층이 변경되더라도 다른 계층에 미치는 영향을 최소화하므로 코드를 수정할때도 간편하게 수정할 수 있습니다.
    뿐만 아니라 중복되는 코드를 줄이므로 코드가 간결해집니다. 새로운 기능을 추가할 때도, 기존 기능을 변경하지 않고 기능을 추가할 수 있습니다.

따라서 역할을 분리할 경우, 코드의 가독성이 올라가 함께 협업하기 쉬워지며 유지보수, 새로운 기능추가도 더 쉽게 할 수 있기 때문에 클래스 간의 역할을 분리합니다.

@yeeun0702 yeeun0702 changed the title [seminar1] 필수 과제 [Seminar1] 필수 과제 Oct 27, 2024
@yeeun0702 yeeun0702 changed the title [Seminar1] 필수 과제 [Seminar1] 클래스 간 역할 Nov 8, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant