객체지향은 소프트웨어를 재사용 가능한 객체라는 단위로 쪼개서 생산하는 기법이다.


즉, 재사용 가능한 것이 아니면 객체지향 소프트웨어 개발 방식이 아니다.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


객체지향 프로그래밍 (OOP)의 핵심은  재사용 + 유지보수의 편의성에 있다.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~



어떤 사람은 C++ 을 배우면 cin,cout 함수를 사용해야 한다고 생각 한다.  그것은 멍청한 생각이다.


printf, sprintf 는 보다 직관적으로 원하는 기능을 수행한다.


또한 우리는 c++ 또는 java의 모든 문법을 배우는것이 목적이아니다.


c++ 또는 c#, java 등이 제공하는 기능을 이용해서 객체지향적인 소프트 개발에 익숙해지는 것이 목적이어야 한다.



그럼 객체지향 소프트 개발에 일정한 형식(왕도)이 있는가?


그런건 없다. 몇몇 보편적인 패턴을 디자인 패턴으로 참고 할 수 있지만 그것이 반드시 너의 업무에 필요하거나 


꼭 쓰일꺼라고 생각할수 없다.



객체지향의 대부이자 레셔널 로즈의 창시자가 오래전에 포스코에 왔었다.


포스코에선 계속되는 시스템 교체와 그에 따른 운영소프트 개발 비용의 상승을 줄이기 위해 객체지향과 CBD를 공장 제어에 도입했다.


하지만 공장 공정은 OOP나 CBD 를 도입하기엔 변수가 너무 많고 그것은 어쩌면 윈도우즈OS가 객체지향으로 


설계되지 못한것처럼 당연한 것이었다.


" 어떻게 하면 CBD와 OOP를 적용해서 보다 재사용 가능하고 유지보수가 편한 소프트를 만들수 있습니까? " 하고 포스코 직원이 물었다.


"...  스마트 하게 하십시오 " 그것이 물음에 대한 답이었다.


객체지향의 대부는 공장 프로세스가 OOP나 CBD를 적용하기엔 변수가 많고 개발 시간과 비용 측면에서 항상 유리하지 않음을 알고 있었다.


심지어 우리는 GOTO 문의 폐단을 배웠지만 다른 문법이 주지 못하는 GOTO문이 주는 간결한 해결책 또한 있음을 알아야 한다.



3가지만 명심해라 


첫째, 유지보수가 편리하고 재사용 가능하지 않으면 객체지향 개발이 아니다.


둘째, goto 문이든 cout이든  printf든 대부분의 경우 중요하지 않다 그건 엄밀히 따지면 객체지향과 전혀 상관없다.


셋째, 스마트하게 해라. 그것은 형식에 얽매이지 말고 원하는 OOP를 구현 하라는 의미가 있다.