본문 바로가기
개발/JAVA

DAO의 분리

by ironwoong 2013. 10. 7.
반응형



<관심사의 분리>

 

세상에는 변하는 것과 변하지 않는 것이 있다. 하지만 객체지향의 세계에서는 모든것이 변한다.

 

여기서 변한다는 것은 변수나 오브젝트 필드의 값이 변한다는게 아니다.

 

오브젝트에 대한 설계와 이를 구현한 코드가 변한다는 뜻이다. 소프트웨어 개발에서 끝이란 개념은 없다.

 

사용자의 비즈니스 프로세스와 그에 따른 요구사항은 끊임없이 바뀌고 발전한다.

 

애플리케이션이 기반을 두고 있는 기술도 시간이 지남에 딸 바뀌고, 운영되는 환경도 변화한다.

 

애플리케이션이 더 이상 사용되지 않아 페기처분될 때가 돼야 변화는 중지된다.

 

그래서 개발자가 객체를 설계할 때 가장 염두에 둬야 할 사항은 바로 미래의 변화를 어떻게 대비할 것인가 이다.

 

지금 당장 구현하고 있는 기능도 만들기 바쁜데 무슨 미래를 생각할 여유가 있겠느냐고 반문할지 모르겠다.

 

맞는말이다. 하지만 지혜로운 개발자는 오늘 이시간에 미래를 위해 설계하고 개발한다.

 

그리고 그 덕분에 미래에 닥칠지도 모르는 거대한 작업에 대한 부담과 변경에 따른 엄청난 스트레스, 그로 인해 발생하는

 

고객과의 사이에서 또 개발팀 내에서의 갈등을 최소화 할수있다.

 

변화는 먼 미래에만 일어나는게 아니다. 며칠 내에, 때론 몇시간 후에 변화에 대한 요구가 갑자기 발생할수있다.

 

객체 지향설계와 프로그래밍이 이전의 절차적 프로그래밍 패러다임에 비해 초기에 좀 더 많은, 번거운 작업을 요구하는 이유는

 

객체지향 기술은 흔히 실세계를 최대한 가깝게 모델링해낼 수 있기 때문에 의미가 있다고 여겨진다 하지만 그보다는 객체지향

 

기술이 만들어내는 가상의 추상세계 자체를 효과적으로 구성할수 있고, 이를 자유롭고 편리하게 변경, 발전, 확장시킬수 있다는데

 

더 의미가 있다.

 

 

미래를 준비하는데 있어 가장 중요한 과제는 변화에 어떻게 대비할 것인가이다. 가장좋은 대책은 변화의 폭을 최한으로 줄여주는

 

것이다. 두명의 개발자에게 동일한 기능변경을 요청했다고 하자. 그런데 한명은 단 몇줄의 코드만 수정하고,

 

그변경이 나머지 기능에는 전혀 문제를 일으키지 않는다는 것까지 검증해주는 데 5분이 걸렸다.

 

그런데 다른 개발자는 동일한 기능을 변경하는데 5시간이 걸린데다, 그것이 기존에 잘동작하던 다른 기능에 오류를 일으킬지도

 

모르다는 새로운 불안감까지 일으켰다면 과연 어떤 개발자가 더 미래의 변화를 잘 준비한 것일까?

 

당연히 최한의, 확신을 가진 작업만으로도 기능을 수정해낸 개발자다.

 

그러면 어떻게 변경이 일어날때 필요한 작업을 최소화하고, 그변경이 다른곳에 문제를 일으키지 않게 할수 있었을까?

 

그것은 분리와 확장을 고려한 설계가 있었기 때문이다.

 

먼저 분리에 대해 생각해보자

 

변경에 대한 요청이 "DB를 오라클에서 MySQL로 바꾸면서 , 웹 화면의 레이아웃을 다중프레임 구조에서 단일 프레임에 Ajax

 

를 적용한 구조로 바꾸고, 매추리 일어날때에 지난달 평균 매출액보다 많으면 감사 시스템의 정보가 웹서비스로 전송되는 동시에

 

로그의 날짜 포맷을 6자리에서 Y2K를 고려해 8자리로 바꿔라"

 

는 식으로 발생하지는 않는다. 무슨 얘긴가 하면, 모든 변경과 발전은 한번에 한가지 관심사항에 집중해서 일어난다는 뜻이다.

 

문제는 변화는 대체로 집중된 한가지 관심에 대해 일어나지만그에 따른 작업은 한곳에 집중되지 않는 경우가 많다는 점이다.

 

단지 DB 접속용 암호를 변경하려고 DAO 클래스 수백개를 모두 수정해야 한다면? 또는 다른 개발자가 개발한 코드에

 

변경이 일어날 때마다 내가 만든 클래스도 함께 수정을 해줘야 한다면 얼마나 끔찍할지 모르겠다.

 

변화가 한번에 한가지 관심에 집중돼서 일어난다면, 우리가 준비해야 할일은 한가지 관심이 한군데에 집중되게 하는것이다.

 

즉 관심이 같은 것끼리는 모으고, 관심이 다른것은 따로 떨어져 있게 하는 것이다.

 

프로그래밍의 기초 개념중에 관심사의 분리(Separation of Concerns)라는게 있다.

 

이를 객체지향에 적용해보면, 관심이 같은 것끼리는 하나의 개체 안으로 또는 친한 객체로 모이게 하고,

 

관심이 다른 것은 가능한 따로 떨어져서 서로 영향을 주지 않도록 분리하는 것이라고 생각할수있다.

 

모든것을 뭉뚱그려서 한데 모으는 편이 처음엔 쉽고 편하다. 그런데 언젠가는 그 뭉쳐 있는 여러 종류의 관심사를 적절하게 구분하고

 

따로 분리하는 작업을 해줘야만 할때가 온다 관심사가 같은 것낄 모으고 다른 것은 분리 해줌으로써 같은 관심에 효과적으로

 

집중할수 있게 만들어주는 것이다. 

 

 

 

반응형

댓글