HwangHub

깨달음의 크기만큼 쉬이 표현되진 않지만, 이제야 조금 알겠다는 느낌이 오는 '객체지향 프로그래밍'이 주는 가치 본문

DEV-STUDY/Java

깨달음의 크기만큼 쉬이 표현되진 않지만, 이제야 조금 알겠다는 느낌이 오는 '객체지향 프로그래밍'이 주는 가치

HwangJerry 2024. 1. 16. 15:34

객체지향 프로그래밍(Object-Oriented Programming, OOP)은 현대 소프트웨어 개발 분야에서 중요한 패러다임으로 자리매김하고 있습니다. 그 이유는 객체지향 프로그래밍이 현실 세계의 다양한 문제를 효과적으로 표현하고, 유지보수를 쉽게 만들어주는 메커니즘이기 때문입니다.

객체지향이 등장하게 된 배경

객체지향 프로그래밍은 현실 세계에 사용되는 엔터프라이즈 서비스 개발을 어떻게 하면 더욱 효율적으로 해낼 수 있을까 하는 고민에서 시작된 "패러다임"입니다.

과거 어셈블리어로 코딩하던 시대를 넘어, 코볼과 포트란이 등장할 때 까지만 해도 자연어와 유사하다는 것에서 접근성이 높아 프로그래밍을 대중화하는 데에 기여했을 것입니다. 하지만 이는 절차적 프로그래밍의 초기 언어였기에 처음 프로그램을 만들 때 모든 흐름을 전부 코드로 짜둬야 했으며, 코드의 중복이 빈번하게 발생하였습니다. 지금은 없는 것이 상상도 되지 않지만, 이 당시에는 '함수'라는 개념조차 없었습니다. 이에 따라 코드량이 상당하여 프로그램이 매우 무거웠고, 이를 실행을 위해 메모리에 올리는 것은 매우 부담스러웠습니다.

위와 같은 불편함에 따라 구조화된 프로그래밍에 대한 니즈가 강해졌고, 1972년에 C언어가 등장합니다. 이는 구조화된 프로그래밍을 가능하게 만들었고, 이전 언어들에 비하여 '함수'와 '구조체'의 등장으로 확연히 효율적인 개발이 가능하게 만들어 줬습니다. 하지만 함수만으로는 프로그램에 종속적이었고, 실제 비즈니스를 위해 유지보수를 하다 보면 하나를 고치니 연쇄적으로 다른 것들도 수정해야 하는 '전파 효과'를 효과적으로 해결하기에 어려움을 겪었습니다.

객체지향 패러다임의 등장

객체지향 프로그래밍은 과거의 절차적 프로그래밍에서 발생한 문제를 해결하고자 하는 고민에서 시작되었습니다. 객체지향 프로그래밍은 '속성'과 '기능'을 하나의 객체로 묶어서 모듈화하여 코드의 중복을 최소화하고 유지보수성을 강력하게 끌어올릴 수 있게 됩니다. 이것이 어떻게 가능한지, 객체부터 차근차근 이해해봅시다.

객체란, 우리 주변의 사물, 개념, 논리 등 모든 것을 의미합니다. 객체지향 프로그래밍이란 이처럼 하나의 사물이나 논리를 '객체'라는 단위로 묶어서 사용하자는 방법론입니다. 하나의 예시를 통해 객체지향 프로그래밍이 어떤 가치를 가지는지 이해해봅시다.

제가 커피를 사기 위해서는 카페, 점원, 그리고 카드를 긁는 행위 등 다양한 사물과 사람, 그리고 행위와 기능이 존재합니다. 만약 이 중에서 평소에 가던 카페가 문을 닫았다면 우리는 '다른' 카페에 가서 커피를 삽니다. 혹은 점원이 없다면 키오스크를 사용할 겁니다. 카드가 없다면 현금을 낼 것입니다. 이처럼 "커피를 구매하는 과정"은 마치 "커피를 구매하는 프로그램"과 같고, 각 요소는 이 프로그램이 수행되기 위해 필요한 객체라고 이해할 수 있습니다. 카페라는 객체가 문제라면 해당 객체를 바꾸면 됩니다. 카페를 바꾼다고 해서 다른 커피 구매 과정에 변화의 영향이 미쳐지지 않는 것이 포인트입니다. 이처럼 객체지향 프로그래밍이라는 방법론은 프로그램 동작에 각 부분이 객체라는 단위로 모듈화되어 loosely-coupled 된 프로그램 설계 및 구현이 가장 잘 구현될 수 있는 방법론입니다.

핵심은 유지보수성

객체지향 프로그래밍의 가장 큰 장점은 '유지보수성'입니다. 객체지향 프로그래밍에서는 객체를 독립적으로 설계하므로, (객체가 올바르게 정의되어 있다는 가정 하에) 하나의 객체에 문제가 생겼을 때 그 객체만을 수정하면 됩니다. 즉, 이 패러다임에서는 '객체'가 재사용과 수정의 기본 단위가 되기 때문에 유지보수성을 강력하게 높일 수 있어 효율적인 개발이 가능하게 되는 겁니다. 이러한 특징으로 코드의 수정 단계에서 전파 효과를 최소화하며, 전체 프로그램의 안정성을 높여주고, 수정이나 추가 작업을 할 때 시간과 노력을 크게 줄여줍니다.

제 생각은,

요새 아이들이 블록코딩을 한다고 하던데, 저는 마치 객체지향 프로그래밍이 블록코딩과도 같다고 생각합니다. 이러한 패러다임을 구현하기 위해 어느정도의 성능을 포기해야 하는 부분이 있는데, 대표적인 객체지향 언어인 자바는 "유지보수성"을 극대화하기 위해 과감하게 객체지향 패러다임을 강력하게 구현함으로써 C나 또다른 객체지향 언어인 C++에 비하여 느린 성능을 보여줍니다. 그럼에도 불구하고 많은 영역에서 자바라는 언어가 지배적인 점유율을 보여주는 것에는 그만큼 '유지보수성'이 비즈니스 개발에서는 정말 강력한 장점이라는 것을 의미하고, 이는 시사하는 바가 크다고 생각합니다.

Comments