강의

멘토링

로드맵

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

folklore님의 프로필 이미지
folklore

작성한 질문수

오브젝트 - 기초편

강의 자료 통합본

getter 사용에 대한 질문입니다.

해결된 질문

작성

·

19

1

안녕하세요.

 

객체지향 설계에서, 객체의 상태를 getter로 직접 꺼내서 사용하기보다 객체에 메시지를 보내 처리하라는 원칙을 따르려고 합니다.

그런데 만약 특정 로직이 코드 전체에서 단 한 번만 사용되는 경우에도, 이 원칙을 지키기 위해 객체 내부에 새로운 메서드를 구현하는 것이 올바른 방법일까요? 아니면 이런 예외적인 경우에는 실용성을 고려해 getter를 사용하는 것이 더 나을까요?

답변 2

1

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

folklore님 안녕하세요.

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

 

답변을 드리면 한군데서 사용된다고 하더라도 메시지를 전송하는 방식으로 설계를 하시는게 좋습니다.

어떤 객체의 getter를 통해 받은 데이터를 이용해서 처리하는 로직이 원래는 그 객체가 수행해야 하는 책임이라면 해당 객체에게 로직을 구현하고 메시지를 전송해서 책임을 수행하도록 만들어야 합니다.

이렇게 해야하는 이유는 요구사항 변경에 따라 수정되는 부분을 최소화하고 싶기 때문입니다.

 

예를 들어 다음과 같이 A가 B의 getter를 이용해서 원래의 A가 해야하는 로직을 구현하고 있다고 해보겠습니다.

image.png

이때 B의 데이터가 변경된다면 A와 B 두 개의 클래스를 함께 수정해야 합니다.

반면에 로직을 B에 넣고 메시지에 의존하도록 만들었다면 B만 수정하면 되겠죠.

 

만약 B에서 A를 사용하는 로직을 또 다른 클래스인 C에서도 사용해야 한다고 가정해 보겠습니다.

image.png

 

이를 위해서는 B의 로직을 A로 옮긴 후에 B와 C 모두 A에게 메시지를 전송하도록 수정해야 합니다.

따라서 A, B, C 3개의 클래스를 함께 수정해야 합니다.

image.png

반면에 A에 로직이 구현되어 있었다면 간단히 C가 A를 호출하도록 만들기만 하면 되겠죠.

 

많은 클래스를 수정한다는 이야기는 많은 코드를 테스트해야 한다는 것을 의미합니다.

B와 아무런 상관도 없는 C때문에 B도 함께 테스트를 해야하고, QA를 받아야할 수도 있습니다.

따라서 만약 객체지향 설계를 하기로 했고 처음부터 메시지를 기반으로 설계하는 것이 가능하다면, 기본 원칙을 따르는 것이 변경으로부터 발생하는 문제를 최소화할 수 있는 가장 좋은 길입니다. 🙂

 

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

감사합니다.

folklore님의 프로필 이미지
folklore
질문자

도움이 많이 됐습니다. 답변 감사합니다!

0

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

folklore님께서 질문해주신 getter 사용에 대한 주제는 객체지향 설계에서 중요한 사항 중 하나입니다. 객체의 캡슐화 원칙을 지키기 위해 상태를 노출하기보다는 객체에 메시지를 보내어 필요한 작업을 요청하는 것이 기본 원칙입니다. 그러나 실무에서는 다양한 예외 상황이 있을 수 있으며, 실용성과 설계 원칙 사이에서 균형을 잡는 것이 필요합니다.

특정 로직이 코드 전체에서 단 한 번만 사용되는 경우, 해당 로직을 수행하기 위한 메서드를 객체에 추가하는 것에 대해 여러 가지 고려할 점이 있습니다:

  1. 코드의 명확성: 새로운 메서드를 추가하면 코드의 가독성을 높이고, 객체의 책임과 역할이 명확해질 수 있습니다. 다른 개발자가 코드를 읽을 때, 왜 그 객체에서 그런 작업을 수행하는지 쉽게 이해할 수 있습니다.

  2. 유지보수성: 시간이 지나면서 비슷한 기능이 추가로 필요하게 될 수도 있습니다. 그럴 때 이미 기존 메서드에 대한 구조가 있으면 용이하게 유지보수가 가능합니다.

  3. 실용성: 그럼에도, 메서드를 추가하는 것이 과도한 경우가 있습니다. 만약 명확한 이유로 인해 이 로직이 충돌하거나 혼동될 일이 거의 없다면 간단히 getter를 사용할 수 있습니다.

  4. 객체의 책임: 이 로직이 객체의 본연의 책임과 관련 있는가를 고려해보세요. 본질적으로 해당 객체가 담당할 역할에 해당하는 경우, 메서드를 추가하는 것이 더 나을 수 있습니다.

이 주제는 여러 개발자들이 고민하는 부분이며, 실제로 많은 토론이 이루어졌습니다. 유사한 주제를 다룬 게시물로는 객체 상태 관리 방법 질문이 유익할 수 있습니다. 링크된 페이지에서는 객체의 상태 관리와 관련된 다양한 견해와 답변을 확인할 수 있습니다.

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

folklore님의 프로필 이미지
folklore

작성한 질문수

질문하기