CS

OOP정복⛳️ (1) 객체지향프로그래밍의 등장 (객체지향 VS 절차지향)

chaneeii 2023. 2. 16. 20:44

어쩌다가 객지프 공부할일이 생겨서 작성하게 되본

새로운 시리즈 OOP정복 출발 ✨

(물론 완전한정복🥲은 어려운걸 알고 있음)

 

 

 

🕖 등장배경

 

아니,, 그래서 왜 객체지향프로그래밍이 나왔는데?

기술이 급속도로 발전에 따라 하드웨어는 성장했고

이에 맞춰 SW도 복잡해지고 거대해졌습니다.

 

feat. 무어의 법칙 :

마이크로칩 기술의 발전 속도에 관한 일종의 법칙으로 

마이크로칩에 저장할 수 있는 데이터 분량이 18-24개월 마다 두 배씩 증가한다

 

 

 

이렇게 되면서 기존의 flow 즉, 순서 중심의 절차지향 개발방식의 한계가 대두되었습니다.

 

 

 

 

 

👉 절차지향프로그래밍의 한계 👈

절차지향프로그래밍 방식의 경우

프로시저 호출의 개념을 바탕으로 하고 있는 프로그래밍 패러다임으로

 

데이터를 처리하는 부분은 구조화가 되어있으나

데이터는 구조화 되어있지 않다.

 

따라서, 어떤 특정한 데이터가 정확한지 확인하는 함수를 또 만들게 되기도 하고이러면서 네임스페이스 문제를 만난다.

 

결국, 문제가 발생한 경우 함수에 영향을 주는 변수 추적이 어렵다는 문제가 대두된다는 것이다.

 

 

위 그림에는 구조적프로그래밍이라는 표현이 사용되는데, 구조적프로그래밍은 절차지향프로그래밍과 동일하다고 할 수 없다. 자세한 내용은 다른 포스트에서 다뤄보도록 하겠다.

 

 

아무튼 그래서 절차지향프로그래밍의 이러한 특성은

프로그램이 복잡해질 수록

유지보수의 어려움을 낳게 되었다.

 

따라서 각 객체가 기능과 데이터를 동시에 가지고 독립적으로 협력할 수 있는

객체지향프로그래밍을 통해 

유지보수의 어려움을 해결하고자 하였다.

 

 

 

 

 

 

🥊절차지향프로그래밍 VS 객체지향프로그래밍🥊

절차지향프로그래밍

절차지향프로그래밍의 핵심은 바로

 

거대한 문제를 쪼개고

차례대로 해결하는 것이다.

 

따라서 Top-Down 방식이라고 할 수 있다.

 

객체지향프로그래밍

 

객체지향프로그래밍은

독립적인 객체들의 공동체로부터 출발한다.

 

 

각자의 자원을 가지고,

스스로도 충분히 특정 문제를 해결할 수 있는 객체들이 존재한다.

그리고 이러한 객체들이 모야 독립적인 객체들의 공동체를 구성한다.

 

 

이들은 스스로 각자의 문제를 해결 할 수 있지만, 더 큰 문제 해결을 위해서는 협력이 필요하다.

공동체에서는 협력을 통해 이들의 문제를 해결한다.

 

 

따라서 Bottom-Up 방식이라고 할 수 있다.

 

 

 

✅ 객체지향프로그래밍

객체지향프로그래밍은 독립적인 객체들의 공동체에서 출발한다고 했다.

 

여기서 독립적인은 무슨 의미일까?

 

바로 의존성이 낮다 는 것이다.

 

즉,  약한 결합관계를 가지게 된다.

 

이렇게 되면 프로그램의 유지보수가 용이하고 신뢰성이 높아진다.

 

 

 

 

 

다음편에서 OOP 에 대해 조금 더 자세히 알아볼 것이다.

아마도 시리즈는

2 - oop 자세히

3 - 객체지향을 지지하는 4가지 주요컨셉

4 - SOLID 

..

..

요런 순거가 될것같네요!

구독 누르고 기다려주세용 👋

 

 

 

 

 

 

ArticleS.UncleBob.PrinciplesOfOod,2023.02.11,http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod
피터의 우아한 프로그래밍,2023.02.12,https://gracefulprograming.tistory.com/130
코드스페이츠, 2023.02.13, https://www.codestates.com/blog/content/객체-지향-프로그래밍-특징
조영호, 오브젝트: 코드로 이해하는 객체지향 설계 (위키북스, 2019)
김종민, 스프링 입문을 위한 자바 객체 지향의 원리와 이해 (위키북스, 2015)

drom,2023.02.13,https://www.drom.ru/info/misc/tesla-model-y-78909.html
dev-jiwon,2023.02.13,https://dev-jiwon.github.io/swift-grammar-13/
scientecheasy,2023.12.13,https://www.scientecheasy.com/2020/07/encapsulation-in-java.html/
ITCookbook 컴퓨터사이언스, https://slidesplayer.org/slide/15298356/