
자바를 배우기 시작하면 객체 지향 프로그래밍(OOP)은 자석처럼 따라오는 개념입니다. 사실, 자바는 객체 지향 언어이기 때문에, OOP의 이해 없이 자바를 제대로 활용하기 어렵습니다. 따라서 자바라는 도구를 제대로 사용하려면 OOP 방식에 대한 공부가 필수적으로 선행되어야 한다는 점은 명백합니다.
하지만 그 전에, "왜 우리가 OOP를 공부해야 하는지"에 대해 그 맥락을 이해하는 것이 중요하다고 생각합니다. 단순히 개발 사전 한켠에 빼곡히 적혀 있는 OOP 개념을 외우는 방식이 아니라, 그 이유와 필요성을 이해하고 나면, 객체 지향 프로그래밍이 자바 개발에 있어 얼마나 유용한 기반이 될 수 있는지 명확히 알게 될 것입니다.
따라서 이번 글에서는 OOP의 기본 개념을 다루기 전에, 왜 우리가 OOP를 공부해야 하는지 그 배경과 맥락을 먼저 이야기해보려 합니다
저는 코딩이라는 것을 하나의 규칙 집합이라고 생각합니다. 수학적인 공식처럼 절대적인 로직이 적용되는 것이 아니라, 사람들 간에 합의된 규칙이나 특정 조건 내에서 어떤 태스크를 수행하도록 정의된 방식이라고 볼 수 있습니다.
이러한 관점에서 OOP도 특정 상황에서 특정 문제를 해결하기 위한 방법으로 추상화한 것에 불과하다고 생각합니다. 그렇다면, OOP는 도대체 어떤 문제를 해결하기 위해 사용하는 것일까요?
OOP의 특성을 이해하기 위해서는 그 기본 특성에 대해 잠시 생각해볼 필요가 있습니다. OOP의 특성은 캡슐화, 상속, 추상화, 다형성의 네 가지로 요약할 수 있습니다. 이러한 개념들에 익숙하지 않으신 독자분들도, 각 개념의 의미를 되새겨보면 기능을 추상화하고 이를 하나로 묶어서 관계를 맺는 방식이라는 큰 그림을 쉽게 떠올릴 수 있을 것입니다.
저는 OOP가 안정성과 유지보수성을 향상시키기 위한 방법론이라고 생각합니다. 그러므로 작은 소규모 프로젝트에서는 OOP의 설계 방식을 채택하는 것이 비효율적일 수 있습니다. 우리나라에 이런 말이 있죠, "닭 잡는데 소 잡는 칼 쓴다." 소규모 프로젝트에서는 서비스 개발을 빠르게 진행하고, 사용자 테스트를 효율적으로 거치는 것이 더 중요합니다. 이렇게 순차적으로 빠르게 디벨롭하는 방식이 적합하죠.
하지만 프로젝트 규모가 커지면 이야기가 달라집니다. 2층 집을 짓는 방법으로 고층 빌딩을 지을 수 있을까요? 그리고 클라이언트가 2층 집까지만 짓던 당신에게 고층 빌딩을 맡길 수 있을까요? 아마도 그렇게 하는 것은 불가능할 것입니다.
규모가 커지면 커질수록, 안정성의 중요도는 비약적으로 높아집니다. 안정성을 높이려면 이미 많은 테스트를 거친 규칙이나 패턴을 따라야 합니다. 규모가 작을 땐 복잡성이 그다지 크지 않지만, 수만 개의 테이블과 수십만 줄의 코드가 얽힌 대규모 시스템에서는 코드 해석만 하는데 오랜 시간이 걸리게 됩니다.
규칙이나 패턴 없이 코드를 수정하는 것은 쉬운 일이 아닙니다. 단순한 코드 수정이 에러의 원인이 될 수 있고, 하나의 기능 수정이 모든 관련된 기능들을 수정하게 만들 수도 있습니다. 결국 규모가 커질수록 변경에 쉽게 대응할 수 있는 유지보수성이 매우 중요한 특성이 되며, 이 특성을 해결해 주는 것이 바로 OOP입니다.
현재와 같은 시대는 자원이 부족한 시대가 아니라고 생각합니다. 성능을 높이고 메모리를 절약하는 것도 중요한 분야이지만, 그보다 더 중요한 특성은 안정성과 유지보수성입니다. 이러한 기반을 제공하는 것이 바로 OOP입니다.
OOP를 사용하면 각 객체가 자신만의 책임을 지고, 서로 상호작용하면서 협력할 수 있습니다. 이렇게 설계하면, 코드의 유지보수성이 뛰어나고, 요구사항 변경이 생겼을 때 해당 기능에만 영향을 미칠 수 있도록 할 수 있습니다.
예를 들어, 새로운 기능을 추가하거나 기존 기능을 변경할 때, OOP 방식에서는 그 부분만 수정하면 되고, 나머지 부분에 미치는 영향은 최소화할 수 있습니다. 이렇게 시스템이 변경되더라도 다른 부분에 미치는 영향을 최소화하면서 일관성을 유지할 수 있습니다.
OOP는 시스템의 일관성을 유지하면서도 변화에 유연하게 대응할 수 있는 방법을 제공합니다. 결국, OOP는 규모가 커진 애플리케이션에서의 변화 관리와 확장성을 위한 필수적인 규칙이 됩니다.
따라서 자바 공부의 목적이 단순한 활용이 아닌, 문제를 해결하는 것이라면, 왜 자바에서 OOP를 중요시하고 사용하는지 그 맥락을 이해하는 것이 중요하다고 생각합니다.. OOP는 단순한 프로그래밍 기법이 아니라, 안정성과 유지보수성을 극대화할 수 있는 규칙이고, 대규모 시스템에서는 필수적인 기반입니다.
저 또한 앞으로의 프로젝트에서는 지금 내가 구현하는 프로젝트는 큰 규모의 프로젝트의 아주 일부분이라는 생각을 가지며, 내가 작성한 코드의 안정성과 변경에 대응할 수 있는 방법에 대해 고민해 나갈 것이며 이 과정에서 OOP는 단순한 학문적 개념을 넘어서 실제 프로젝트에서 변화를 관리하고 확장 가능한 시스템을 구축하는 데 있어 강력한 도구가 될 것 입니다.
앞으로 자바와 관련된 개념에 대해 정리해볼 생각입니다. 많은 관심 부탁드리며 긴 글 읽어주셔서 감사합니다.