강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

선홍님의 프로필 이미지
선홍

작성한 질문수

오브젝트 - 기초편

객체지향 설계에서 메서드를 설계할 때 궁금한 점이 있습니다.

해결된 질문

작성

·

13

1

안녕하세요. 메서드를 설계할 때 궁금한 점이 있어서 질문드려요.

예를들어 메서드를 설계할 때 (Long customerId, Long screeningId, Integer audienceCount) 파라미터에 이렇게 ID 식별자를 넣어줘야는지 혹은 객체를 넣어줘야하는지를 설계할 때는 어떤 점을 판단하는 것이 좋을까요?

답변 2

0

조영호님의 프로필 이미지
조영호
지식공유자

선홍님 안녕하세요.

좋은 질문 해주셔서 감사합니다. 🙂

제가 아침부터 계속 강의를 하느라 이제서야 답글을 남기네요.

답변이 늦어져서 죄송합니다.

 

객체의 메서드에는 파라미터로 식별자인 id를 전달하는 것보다는 완전한 객체를 전달하는 것이 좋습니다.

객체지향에서 객체가 다른 객체를 알아야 하는 이유는 메시지를 전송하기 위해서입니다.

이때 객체가 다른 객체를 영구적으로 알아야 한다면 클래스 내부의 객체 참조로 구현하고, 메서드가 실행되는 시점에만 일시적으로 알기만 하면 된다면 메서드의 파라미터로 전달해 주시면 됩니다.

이 관점에서 보면 객체의 파라미터로는 객체를 전달하는게 적합하다고 할 수 있습니다.

 

강의에서 식별자인 id를 파라미터로 받는 클래스이 있는데 ReservationService와 DAO들이 해당됩니다.

이 클래스들은 객체지향에서 말하는 상태와 행위를 함께 포함하는 객체가 아니라 예매를 수행하거나 Reservation을 조회하는 등의 행위 관점에서 만들어진 클래스들입니다.

이 클래스들은 실제 객체가 아니고 내부에서 id를 이용해서 책임을 수행할 객체를 찾는 작업이 필요하기 때문에 id를 파라미터로 받는다고 보시면 됩니다.

 

정리하면 현재 메서드를 구현하고 있는 대상이 상태와 행위를 하나의 단위로 묶어서 특정한 책임을 수행하는 '객체'라면 메서드의 파라미터로 객체를 받도록 구현하시는게 좋습니다.

그렇지 않다면 파라미터로 id를 받으셔도 무방합니다. 🙂

 

답변이 되었는지 모르겠네요.

행복한 주말 보내세요!

0

안녕하세요, 인프런 AI 인턴입니다.

선홍님께서 메서드를 설계할 때, 파라미터로 ID 식별자를 사용할지 아니면 객체 자체를 사용할지에 대한 고민을 하고 계신데요. 이는 객체지향 설계에서 자주 마주하는 중요한 질문입니다. 메서드 설계 시 판단해야 할 주요 요소들은 다음과 같습니다:

1. 객체 사용의 장점

  • 응집도: 객체를 통째로 전달하면, 해당 메서드는 그 객체와 관련된 모든 정보를 즉시 사용할 수 있어, 응집도가 높아집니다.
  • 가독성: 객체를 통해 메서드 사용 시 의도를 명확히 드러내어 코드의 가독성을 향상시킬 수 있습니다.

2. ID 사용의 장점

  • 결합도: ID만 사용하면, 메서드는 객체의 내부 구조나 불필요한 상태에 의존하지 않기 때문에 낮은 결합도를 유지할 수 있습니다.
  • 지연 로딩: 데이터를 필요할 때까지 로딩하지 않고 참조 ID를 유지할 수 있어 성능 최적화에 도움이 됩니다.

3. 설계 관점에서의 고려 사항

  • 비즈니스 로직의 위치: 비즈니스 로직이 객체 내부에 얼마나 위치해야 하는지 고려하세요. 객체가 불필요하게 많은 책임을 가질 필요는 없습니다.
  • 변경 가능성: 특정 값을 변경할 경우, ID 사용으로 인해 필요한 객체를 탐색하는 추가 작업이 필요할 수 있습니다.
  • 컨텍스트와 사용 방식: 각각의 사용 사례에 따라 메서드가 필요한 파라미터 형태를 결정하는 것이 도움이 됩니다. 객체를 받아야 하는 상황과 ID로 충분한 상황이 각기 다를 수 있습니다.

이러한 요소들을 바탕으로 영화와 고객의 위치를 결정하는 질문에서 다루는 내용과 비교해 보시면, 설계적 선택에 따른 장단점을 더 잘 이해하실 수 있을 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

선홍님의 프로필 이미지
선홍

작성한 질문수

질문하기