본문 바로가기

객체지향

[객체지향] 객체지향 첫걸음_객체지향의 필요성

안녕하세요 :) 오늘은 객체지향 카테고리의 첫 번째 글을 쓰는 날인데요, 사실 제 티스토리 첫 글이랍니다!

첫 글을 기념하여 잠시 사담을 늘어놓자면...

제가 참 좋아하는 글귀가 있는데 "시작은 미약하나 끝은 창대하리라" 입니다 ㅎㅎ 

모두 원하는 목표 꼭 이루는 그 날까지 노력하고 또 노력해봅시다!! :)

 


객체지향기술의 필요성, 객체지향 프로그래밍이란?

 객체지향이라는것을 논하기 이전에 소프트웨어의 생명주기에 대해 알아봅시다.

 

소프트웨어의 생명주기

위에 첨부한 사진은 대형 소프트웨어가 개발돼서 테스팅 과정을 거친 뒤, 상품화되고 사용과 수정 단계를 반복 한 후 폐기될때까지의 주기를 보여줍니다. 

한 연구결과에 따르면, 대형 소프트웨어인 경우 철저한 사전 검수 및 테스팅을 거쳤다고 하더라도 100개의 프로그램 문장마다 평균 세 개 내지 다섯 개의 오류를 포함한다고 합니다. 따라서 수정단계가 필요하지 않은 완벽한 소프트웨어를 구현하는 작업은 불가능하므로 수정 작업을 최소화하는 것이 최선이라 할 수 있지요.

하나의 소프트웨어가 개발되어 관리되다 일생을 마칠 때까지 드는 전체 노력을 1로 본다면, 개발 작업에 1/3, 수정작업에 2/3의 노력이 배분됩니다. 물론 전체 노력의 1/3이 개발 시 단기간에 집중적으로 필요하지만, 한 소프트웨어의 수명을 5년 정도라고 볼 때 이 기간동안 수정작업에 드는 2/3의 노력을 줄이는 것이 소프트웨어 회사 입장에서는 무엇보다 중요하다고 할 수 있죠.

 

수정 작업에 드는 노력을 줄이기 위한 연구가 소프트웨어 엔지니어들에 의해 계속되어 오고 개발 단계와 수정 단계의 연관 관계를 분석해 본 결과, 개발 단계에서 좀 더 구조화된 소프트웨어를 구현하기 위한 작은 노력이 수정 단계에 미치는 보상 효과가 상당히 크다는것을 인식하게 됐습니다. 

 

여러분 모두 한 번 쯤은 남이 작성한 코드를 수정해본 경험이 있으실텐데요, 특히 c언어로 짜여진 코드의 경우 남이 작성한 프로그램에서 수정해야 할 부분을 찾아내는 작업도 쉽지 않지만 이보다 더한 것은 마치 눈덩이가 불어나듯 이 부분을 수정하기 위해 그것과 연관된 모든 부분에 손을 대야 한다는 겁니다. 잘 구조화된 프로그램의 경우 수정이 필요한 부분만을 이해하고 수정하면 되는 반면, 구조화된 프로그램이 아니라면 간단한 수정을 위해서도 전체 프로그램의 흐름을 완벽하게 이해해야 합니다. 대형 소프트웨어일수록 이러한 수정 단계에서의 보상 효과는 더욱 커지고 전체 소프트웨어의 생명주기를 통해서 봤을 때도 노력의 큰 삭감을 가져올 수 있습니다. 따라서 수정 작업에 드는 노력을 줄이기 위한 최선책은 개발 단계에서 가능한 한 독립적인 소프트웨어 부품단위로 소프트웨어를 설계하고 구현하는것입니다. 이를 위한 연구가 계속되어 왔으며, 마침내 객체지향 기술(Object-Oriented technology)로 발전하기에 이르렀습니다.

 


 

소프트웨어 제작을 집짓는것에 비유해보겠습니다. 설명을 위해 개별적인 소프트웨어를 부품이라고 칭하겠습니다.

 

소프트웨어의 조립식 생산과 수정

소프트웨어의 생산은 소프트웨어 부품 라이브러리부터 필요한 부품들을 이용하고, 없는 부품은 제작해서 조립식으로 이루어집니다. 라이브러리의 부품을 변형해서 사용하는것도 가능합니다. 당연히 제작 기간이 짧아져 생산성이 증대될것이며, 라이브러리 내의 검증된 부품들을 사용하기 때문에 소프트웨어의 질도 높아질 것입니다. 소프트웨어의 수정은 문제를 일으킨 부품을 빼내 수정한 후 다시 넣어주면 될 것이고, 기능이 더 필요하다면 부품을 추가하면 될것입니다. 따라서 관리 비용과 생산 비용을 크게 줄일 수 있습니다. 객체지향 기술은 이와 같이 재사용이 가능한 소프트웨어 부품(소프트웨어 재사용성, software reusability)을 작성하기 위한 방법으로서 소프트웨어를 설계하고 구현할 때 적용해야 할 기술로 자리잡았습니다. 결론적으로, 객체지향 기술은 소프트웨어를 마치 집짓는 것처럼 부품들을 조립하는 방식으로 제작하고 관리하기 위한 기술입니다. 자바, c++등과 같은 객체지향 언어는 객체지향 기술을 적용해 소프트웨어를 제작하기 위한 도구입니다. 

 

이제 문제는 자바의 객체지향적 측면을 살려 어떻게 프로그래밍을 할 것인가 인데요, 이는 차차 앞으로의 게시글에서 다뤄보도록 하겠습니다. 사실 오늘 간략하게 개요라도 잡고 넘어가려고 했는데, 막상 글을 써보니 아직 제 안에서 개념이 완성되지 않은것 같아요. 남에게 설명을 못하면 이해한게 아니다 라는 글귀를 다시 한 번 상기하고 다음 게시글에서 만나보도록 하겠습니다 :) 읽어주셔서 감사합니다.

 

 

참고 문헌 : 자바 객체지향 프로그래밍 입문(저자 음두헌)

               자바 객체지향 디자인 패턴(저자 채홍석)