[OOP] 객체 지향 프로그래밍의 단점?

ebebebbbebeb·2024년 10월 21일
0
post-thumbnail

아직 객체 지향 프로그래밍에 대해 제대로 알지 못해 이것저것 찾아보던 중

객체 지향 프로그래밍의 장점에 대한 글은 많은데

단점에 대한 글은 잘 보이지 않는 것 같다고 느꼈습니다

궁금해져서 바로 찾아보았습니다..!

(OOP를 싫어해서 단점을 찾는 것이 아님을 밝힙니다)

1. 난이도 🔺

상속이라는 개념은 굉장히 유용하지만

객체를 설계할 때부터 추상화를 해야 하기 때문에 난이도가 어려워집니다

객체 사이의 상속 구조를 추상화하기 위해서는

집합론자나 생물학자 수준으로 논리에 강하고 지식이 많아야 한다고 합니다

특히 다중 상속이 되면 엄청 복잡해지기 때문에

여러 개발자들이 협업할 때는 다중 상속은 아예 금지하는 경우가 많다고 하네요

상속이 복잡하게 얽혀 소스 분석이 어려워진 상태
➡️ 라자냐 코드


2. 컴퓨터 친화적 ❌

개념을 기준으로 나누다 보니 반복 연산이 컴퓨터 친화적이지 않고

특히 배열 자료 구조를 적용하기 힘들어집니다


객체 하나하나를 따로 캡슐화시키고

상속 시 부모만 같으면 자식의 종류를 신경 쓰지 않다 보니

각자의 메모리 크기가 달라지며, 결국 고정된 연속 메모리에 담을 수가 없게 됩니다

메모리 할당을 배열로 하지 못하게 되니 따로따로 생성하게 되는데

이렇게 각각의 객체의 생성과 파괴가 반복되면 메모리 단편화라는 문제가 생기게 됩니다

메모리 단편화란?
- RAM의 메모리의 공간이 작은 조각으로 나뉘어져
사용가능한 메모리가 충분히 존재하지만, 할당(사용)이 불가능한 상태

➡️ 가비지 컬렉션 기능이 만들어진 이유 중 하나


연속 메모리를 쓰기 힘들어진다는 건

캐시의 효율적 사용에 문제가 생긴다는 의미!

이로 인해 성능 격차가 더 벌어진다고 합니다


이를 해결하는 코딩 패러다임으로

DOP(Data Oriented Programming)와 구현 방법으로 메모리 풀이 있다고 하네요


3. 교육의 어려움

OOP를 알기 전까지 배우는 것이 프로그래밍 언어의 문법이었다면
(절차적 프로그래밍으로서의 문법)

OOP는 가장 문제가 덜 생기는 방향으로 코딩하게끔 하는 가이드라인! (권장 사항)

여기서 문제라는 것이

수천, 수만 줄짜리 코드를 수년간 유지 보수 할 때나 몸에 와닿을 텐데...


일반적으로 과제를 제출하고 다시 손대지 않는

수백 줄 정도의 코드만 짜본 대부분의 사람들은

이 문제라는 것을 체감하기 힘들겠죠?


게다가 대부분의 언어들은

기존의 언어에 객체 지향을 얹어놓은 형태이기 때문에

굳이 OOP에 맞춰서 작성하지 않아도 원하는 결과는 일단 다 나옵니다


이러한 이유들로 인해 학생들에게 C++ 과제를 내주면

C++ 문법을 사용한 C 프로그램인 경우가 태반..!

이는 Java 같은 언어에서 마찬가지로 나타나는 현상입니다

Java 문법이지만 C 프로그램처럼 짜는 것을 '씨자바'라고 한대요 😮


지금까지 객체 지향 프로그래밍의 단점에 대해서 조금 알아봤는데요

저는 개인적으로 단점이 무엇인지 알아야

장점이 진짜 장점인지 알 수 있다고 생각합니다

평소에는 모르지만

아프면 건강의 소중함을 깨닫게 되는 것처럼요 😁

OOP의 단점에 대해 찾아보는 과정에서

절차 지향 / 객체 지향 프로그래밍 이외에

DOP, AOP 와 같은 다른 코딩 패러다임의 존재에 대해서 알게 되었습니다

나중에는 이러한 것들에 대해서 다뤄봐도 좋을 것 같네요

2개의 댓글

comment-user-thumbnail
2024년 10월 21일

잘 읽고 갑니다~~

1개의 답글