inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

토비의 스프링 6 - 이해와 원리

오브젝트 팩토리

클래스의 관심사는 하나인게 이상적인가요?

357

Hyuncheol Park

작성한 질문수 2

0

안녕하세요. 하나의 클래스는 무조건 하나의 관심사만 가지는 것이 좋나요? 여러 가지의 관심사를 가지는 경우는 무조건 피해야 하나요?

 

수업에서 Client가 두 가지 관심사를 가지고 있다고 하셨고 (PaymentService 이용해서 비즈니스 로직 처리 + PaymentService의 내부 의존관계 설정), 후자의 책임은 오브젝트 팩토리로 옮겨버리셨는데요.

 

'하나의 클래스는 하나의 관심사만 처리하도록 코드를 짜는게 좋다'라고 이해해도 괜찮을까요?

하나의 클래스가 여러 가지 관심사를 가져도 되는 경우도 있는지 궁금합니다.

java spring

답변 1

0

토비

관심사라는 것을 어떻게 정의하고 보는지에 따라서 사실 얼마든지 다르게 분리할 수 있습니다. 클래스는 가장 작은 단위의 모듈인데, 이보다 더 큰 패키지나 jar 파일, 서버도 같은 관심사의 분리라는 관점으로 나눌 수가 있죠. 이때의 관심사 단위는 꽤 큽니다.

 

관심사가 혼재되어있으면 앞으로 코드가 발전하고 변경되고, 나중에 코드를 이해할 때 어떤 불편함이 있을지를 생각해보시면 좋습니다. 사실 예제의 Client 수준에서야 그 정도의 관심사가 섞여 있어도 괜찮아 보입니다. 그래서 저도 처음부터 그걸 나누지 않고 자연스럽게 Client main() 안에 만들었죠. 하지만 책임을 명확하게 구분해보면, 의존관계설정 책임은 대상이 점점 늘어나서 나중에 수백 개가 될 수도 있겠죠. 그게 페이먼트라는 기능 하나를 이용하는 클라이언트, 실전이라면 아마 컨트롤러가 되겠죠. 그 안에 들어가 있으면 이상하겠죠? 그래서 그런 명확한 관심사가 다른 코드는 분리하는 습관을 들이시면 좋습니다. 그렇다고 너무 급하게 하지는 않으셔도 됩니다.

 

스프링의 @Controller, @Service, @Repository로 대표되는 스테레오타입 애노테이션은, 정말 이건 꼭 분리해야한다는 오래된 경험에서 나온 관심사 분리를 적용할 대상을 명시하도록 하는, 최소한의 작업에 쓰라고 만든 것이죠. 실제로는 이보다 더 자세히, 비즈니스 관점에서 혹은 기능적인 관점에서 관심사가 다르다고 느껴지면 적절한 시점에 분리하는 습관이 중요합니다.

 

클래스가 그 중에서 가장 기본적인 단위이기 때문에 클래스부터 분리하는 연습을 하면 좋습니다. 리팩터링을 공부하시면 어떤 경우에 클래스를 나누는지, 혹은 인터페이스나 수퍼 클래스로 추출하는지 등에 관한 좋은 아이디어를 얻으실 수 있을 겁니다.

수업을 잘 듣고 있습니다.

0

103

2

jackson(3.0.2 버전) ObjectMapper.readValue 에러타입

0

108

2

템플릿과 콜백의 역할 경계를 구분하는 기준

0

99

1

테스트를 작성하지않아도 되는 경우

0

86

2

오브젝트 정의 중 배열에 대해서

0

63

2

스프링 레거시를 이용하는 회사에서 일을 하게 될것같은데

0

109

2

JpaTransactionManager에 대해 궁금합니다.

0

81

2

스프링빈과 Clock 클래스 관련

0

44

2

Seprate Interface 패턴에 대한 궁금증

0

46

2

테스트의 기준을 어떤식으로 설정하는 것이 바람직한 테스트일까요 ?

0

51

2

오브젝트와 인스턴스

0

38

1

WebApiExRateProvider 템플릿 콜백 패턴을 적용하면서 테스트 코드를 만들어보았습니다.

0

62

2

템플릿 콜백 패턴 관련하여 궁금한 것이 있습니다!

0

60

2

상태 변경 API 질문

0

120

2

빈에 대한 질문

0

97

1

안녕하세요.

0

145

2

Payment 엔티티에 exRateProvider 주입

0

101

1

@Transactional private 사용유무

0

157

1

JdbcClient 생성 질문

0

190

2

안녕하세요 PaymentConfig 질문드립니다.

0

110

2

[공유] 윈도우 사용자를 위한 http 명령어 오류 해결 방법

0

245

2

생성자 파라미터성자 파라미터

0

238

2

토비님 ! BigDecimal 관련 링크를 못찾겠어요

2

344

2

인터페이스 사용에 관하여 질문드립니다.

0

308

3