데일리 잡(Job) 지식

객체지향 패러다임, 데이터와 행동으로 이해하다.

개발하는 주디씨 2023. 10. 20. 00:14

 

어떤 설계가 좋은 객체지향이라고 할 수 있을까요?

 

객체지향설계에서 가장 중요한 것

객체지향에 수 많은 고민을 하다가 알게 된 사실은 데이터 중심사고 + 행동 중심 사고를 적절하게 조합하는 것이다.

그럼 이 두가지가 어떻게 다른지 예제를 통해 확인해볼까요?

 

 


 

데이터 중심사고

class Car {
        private Frame frame;
        private Engine engine;
        private List<Wheel> wheels;
        private Direction direction;
        private Speed speed;
}

가장 많은 보셨을 패턴이죠? 아마 대부분 class 개념을 처음 배울 때 실습을 하면서 만들게 되는 코드는 이런 모양일 겁니다!! 부분 부분 필요한 부품에 따라 도메인을 분리해놓은 것을 볼 수 있습니다.

 

행동 중심사고

class Car {
        public void drive(){}
        public void accelerate(){}
        public void decelerate(){}
        public void changeDirection(){]
}

아까보다 뭔가 행동하는 모습들을 표현하고 있죠? 단순히 각각 Layer 별로 역할을 나누었던 mvc패턴과는 달리 Domain이 해동을 갖고 다른 객체와 움직일 수 있도록 해주는 것이 바로 행동 중심사고 입니다!!!

 

그런데, 이렇게 되면 뭐가 좋을까요?

데이터 중심 사고는 이미 대부분의 환경에서 많이 사용하고 있는데 행동 중심적인 사고가 오히려 불편한 것이 아닌가요?

 

아마 이런 의문을 갖게되실 수도 있을 것 같습니다. 그럴 땐, 기존의 Service코드를 떠올려보세요!

대부분 수 많은 비즈니스 로직들이 있고나서 repository를 처리하고, 엄청 복잡하게 되어있을 겁니다. (제가 경험한 모든 실무 프로젝트가 service단이 굉장히 복잡한 형태였습니다..^^..)

 

이런 복잡한 비즈니스 대신, 도메인 자체에서 행동을 갖고있다면 해당 도메인에 책임을 위임할 수 있습니다. 즉, service 코드길이가 줄어든다는 말입니다 :) 요즘, 클린코드 TDD DDD 등 다양한 개발 트랜드를 접하고 있는데 이 또한 트랜드 중 하나가 아닐까합니다.

 

단, 모든 트랜드를 그냥 따라가는 것은 비추입니다. 트랜드를 분석하고 나에게 적합한 것인지, 적합하지 않다면 왜 그런지 분석하는 능력을 키우는 것이 중요할 것 같습니다. 개발에는 정답이 없다고 합니다. 더 나은 것만 있을 뿐ㅎㅎ

 

우리 모두 최적화하는 그 날까지,

그저 돌아가기만 하는 쓰레기가 아니라 정말 객체 지향적으로 product를 만들어요!!