응집성이 높은 코드에 관하여

Hyunta·2022년 2월 21일
1

자동차 경주 미션

목록 보기
2/7

getter의 사용을 지양해야하는지 궁금합니다.
a. 특정 도메인(문제)과 관련된 핵심적인 로직들이 한 곳에 모여 있을수록 응집성이 높다고 하고, 응집성이 높을수록 좋은 소프트웨어라고 합니다. 객체지향 원칙에서는 캡슐화에 해당하겠지요.
b. 만약, 클래스의 모든 필드가 getter로 노출돼 있다면 어떤 일이 벌어질까요?

static 메서드에 대해서 궁금합니다.
a. 이 부분은 2.a.에서 말씀드린 응집성 관점에서 생각해보시면 도움이 될 텐데요.
b. 만약, NameValidator의 static 메서드를 모두 제거한다면, 이 클래스와 메서드가 처리하던 제약 조건들은 어디서 처리하면 좋을까요?

getter를 안쓰면서 구현을 하다보니 자꾸 메서드를 만들어야해서 코드가 길어지고 getter를 왜 안써야하는지, 얼마나 지양해야하는건지 궁금해졌다. 다른 질문이었지만 static 메서드를 어떻게 쓰는게 좋을지? 정적 클래스로 지정해야하는 경우는 어떤 경우인지 물어보면서 응집성이 높은 코드에 대해 고민하게되었다.


응집성이 높은 코드란?

테스트를 작성하기가 쉽지 않다면 테스트가 아니라 설계에 문제가 있다는 신호다. 결합도가 낮고 응집성이 높은 코드는 테스트하기가 쉽다.
-익스트림 프로그래밍, '테스트 우선 프로그래밍'

객체지향 프로그래밍 언어를 사용하여 소프트웨어를 개발할 때는 낮은 결합도높은 응집도를 가지는 코드를 작성해야 좋은 코드가 됩니다.

객체는 자기의 역할에 대한 책임을 독립적으로 가져야하고, 객체의 협력관계를 통해 기능을 구현할 수 있도록 설계해야한다.

응집도(Cohesion)

프로그램의 한 요소가 해당 기능을 수행하기 위해 얼마만큼의 연관된 책임과 아이디어가 뭉쳐있는지를 나타내는 정도이다. 특정 목적을 위해 밀접하게 연관된 기능들이 모여서 구현되어 있고, 지나치게 많은 일을 하지 않으면 그것을 응집도가 높다고 표현한다.

결합도(coupling)

코드의 한 요소가 다른 것과 얼마나 강력하게 연결되어 있는지, 또한 얼마나 의존적인지를 나타내는 정도이다.


결론

응집도가 높은 코드라면 메세지를 통해 각자 책임을 다할 수 있어야 한다. getter를 많이 쓰게되면 로직이 외부에서 관리될 수 있으므로 지양하는 것이 좋다. static 메서드 또한 응집성을 해치는 요소이므로 유틸적인 성향이 강한 메서드나 클래스에서만 쓰는 것이 바람직하다.

Reference

https://blog.daum.net/question0921/1158
https://lazineer.tistory.com/93

profile
세상을 아름답게!

0개의 댓글