객체 지향 프로그래밍에 대해서

2 minute read

일점 돌파.


추석이 다 끝난 마지막 날이 되어 그간 미뤄덨던 내가 진짜 써보고 싶었던 글을 써보려고 한다. 지금까지 스스로 공부해왔던 객체지향 프로그래밍에 대해서 정리하고 싶은 마음이 있었고, 일정 기간 동안 개발을 하고, 공부를 하면서 오브젝트에 대해서 가지고 있는 생각들을 정리하고 싶었다. 그동안 다양한 책들과 실무에서의 경험, 지속적인 공부를 통해서 내 나름의 객체를 정의하는 방식에 대해서 정의할 수 있겠다라는 생각이 들었고, 이를 위해서는 실제로 뭔가 표현해보지 않고서는 아무것도 되지 않겠다는 생각이 불현듯 들었다. 당연히 부족한 부분이 많을 것이라고 생각이 들지만 그래도 스스로의 정리를 위해서 글을 옮겨본다.

컴퓨터 프로그래밍에서 “객체”의 의미

컴퓨터 과학에서 객체 또는 오브젝트(object)는 클래스에서 정의한 것을 토대로 메모리(실제 저장공간)에 할당된 것으로 프로그램에서 사용되는 데이터 또는 식별자에 의해 참조되는 공간을 의미하며, 변수, 자료 구조, 함수 또는 메소드가 될 수 있다. 프로그래밍 언어는 변수를 이용해 객체에 접근하므로 객체와 변수라는 용어는 종종 함께 사용된다. 그러나 메모리가 할당되기 전까지 객체는 존재하지 않는다.

위의 의미는 위키백과를 통해서 오브젝트, 객체가 가지는 의미에 대해서 정의하고 있다. 사실 객체라는 것이 컴퓨터 프로그래밍에서는 메모리에 적재되어 사용되는 변수의 일종이라고 하여도 전혀 이해하는데 어려움이 없고, 실제로 그렇게 알고 개발을 한다고 해서 문제가 될 것이 없다. 우리가 배우는 Java, C# 등의 객체 기반의 언어를 이용해서 코딩을 할 때, 객체라는 의미를 이해하지 못한다고 해서 개발시 어려움을 느끼는 것은 아니다. 하지만 복잡한 업무 시스템을 개발하고, 사용자의 요구사항이 계속적으로 변경되어 수정이 필요해지고, 이를 위해서 코딩을 하다보면 스스로의 코드에 대해서 의문점을 가지게 된다.

  • 과연 이와 같은 방식이 최선인가?
  • 계속적으로 추가되는 변경 사항에 대해서 적절하게 대응할 수 있을까?
  • 다른 개발자들이 내 코드를 보고 이해할 수 있을까?

위와 같은 질문들이 머리를 멤돈다면, 그래도 괜찮은 개발자라고 생각한다. 지금 위와 같은 고민들도 하지 않는 개발자들도 많으며 결국 고민없이 작성된 코드는 스파게티코드가 되거나, 테스트를 할 수 없는 코드가 되어버리고, 결국엔 기존의 코드를 버리고 새로 작성하지 않으면 안되는 상황을 맞이하게 된다.

주로 이와 같은 일들이 발생하는 경우는 해당 업무에 대한 담당 개발자가 퇴사하거나 다른 업무로 이동하는 경우, 새로운 담당자에 의해서 발견된다. 여기에서 “발견”이라는 의미를 사용한 것은 사실 해당 업무를 동일 개발자가 계속해서 개발해왔고, 앞으로도 그럴 것이라는 확신이 있을 경우에는 크게 문제가 되지 않을 수 있지만, 그럴일은 절대 없을 뿐더러 고객에 의해서 지속적으로 사용되는 서비스인 경우, 다른 담당 개발자들이 해당 코드를 보게되거나 신규 기능을 추가해야할 일들은 늘 발생할 수 있는 일이기 때문에 다른 담당자에 의해서 “발견”된 해당 코드는 많은 욕설을 받아낼 수 밖에 없게 된다. 주위에서 흔하게 있는 일이며, 인수인계라는 미명하에 이런 일들이 발생한다면 “퇴사 트리거”를 발현 시킬 수 있는 상황들이 오게 된다.

너무 극단적인 예라고 생각되는가? 하지만 이와 같은 일들이 지금도 비일비재 하다. 또한 그 인수인계자가 우리 스스로가 될 수도 있다. 우리는 이렇지 않을 것이라고 보장할 수 있는가?

그것은 당연히 추후에도 해당 코드를 사용해서 비즈니스 요구사항에 맞춰 시스템을 지속적으로 유지하고 개선하기 위해서이다. 그렇지 않다면 코드를 잘 작성하려는 노력자체가 큰 의미가 없을 것이다. 하지만 고객에게 지속적으로 제공되어야 하는 소스일 경우, 우리는 코드를 작성함에 있어서 “객체”지향 프로래그래밍 기법에 대해서 이해하려고 지속적으로 적용하기 위해서 노력해야 한다.

그렇다면 왜 이런 일들이 발생할까? 분명 해당 업무의 이전 개발자도 고민을 해서 코드를 작성했을 것이고, 에러를 수정하고, 추가 요구사항들을 적용하면서 코드를 작성하고 정리했을 것이다. 그런데 다른 개발자들이 봤을 때 전혀 이해하지 못하거나 심지어 코드를 보며 욕을 하는 일들이 생기게 될까?