개발자가 되기 전에 알아야할 것들/컴퓨터의 역사

객체지향 프로그래밍 배경과 역사

코딩디퓨저 2023. 2. 1. 11:09
반응형
SMALL

쿠르트 괴델
쿠르트 괴델

쿠르트 괴델불완전성 정리를 증명하는 과정 중에 알고리즘을 추상화시킨 원시 재귀 함수개념을 만들고, 이를 이용하여 증명에 성공하면서 최초의 프로그래밍 언어를 탄생 시켰다.

후에 컴퓨터의 아버지라 불리는 튜링은 불완전성 정리를 연구하는데, 여기서 이 원시재귀함수와 동치인 튜링 머신을 발표하고 이 튜링머신을 이용하여 불완전성 정리를 다시 한 번 증명해보였다.

그 이후 계산가능성이론이라는 수학의 분야가 생기면서 기존의 원시재귀함수를 확장시켜 알고리즘을 표현하기 위한 여러가지 체계들이 등장하였다.

 

초기에는 수학적 논리식과 여러 알고리즘을 학문적으로 연구하는데에 많은 시간을 할애

폰 노이만

수학자인 폰 노이만은 수학적인 개념들을 이용하여 실제 컴퓨터를 만들기 위한 폰 노이만 구조를 만든다. 입력값을 넣으면 기억장치와 중앙 처리 장치가 같은 버스에서 처리해서 출력값을 보내는 전자계산장치를 만든다.

하지만 초기에는 입력신호가 들어옴(1), 입력신호가 들어오지 않음(0)의 0과 1만을 제어하는 신호만을 사용할수 밖에 없었고 뭔가 동작을 시키기 위해서는 이러한 제어신호를 사람이 직접 작성해야 됐는데, 초창기에는 그 0과 1의 제어신호를 사람이 직접 작성하는 형태의 기계어가 사용되었다.

하지만 기계어는 사람이 이해하기에는 가시성이 좋지 않았고, 숫자 0과 1만으로 구분하기에는 어려움이 많았기에 사람이 이해하기 쉬운 어셈블리어가 탄생했다.

하지만 이마저도 많은 수학식들을 표현하고 관리하기에는 어려움이 많았기에 프로그래밍을 편하게 작성할 수 있는 언어들이 등장하기 시작했다. 이것이 바로 우리가 흔히 쓰는 말인 프로그래밍 언어이다.

많은 수학자들과 공학자들이 정의한 논리식과 수학식들을 정리하여 함수로 만들었고 그 함수들을 재사용하면서 비슷한 함수들을 하나의 파일로 묶어 소스파일로 저장해 여러 프로그램들이 만들어졌다.

이 과정에서 프로그래밍 언어는 두 가지로 나뉘는데 '무엇'을 만들지에 관심을 가지는 선언형 프로그래밍 언어와 프로그램을 '어떻게' 표현할지에 관심을 가지는 명령형 프로그래밍 언어로 나뉘었다.

수학자 폰 노이만에 의해 전자계산장치가 만들어졌고 이를 통해서 기계어 -> 어셈블리어 -> 프로그래밍 언어 로 발전

에츠허르 다익스트라

프로그래밍 개발하면서 프로그램 자체가 가지는 기능에만 신경쓰느라 프로그램이 무슨 데이터를 가지고 있는지에 대해서는 관심이 없었기 때문에 복잡한 알고리즘에 의해 순서도 표현이 불가능하게 되는 스파게티 코가 만들어졌다.

1968년 에츠허르 다익스트라프로시저(반환값이 없는 함수) 단위로 프로그램을 나누고 프로시저들끼리 호출하는 구조적 프로그래밍 방식을 제안하면서 큰 규모의 프로그램들을 작은 규모의 프로그램으로 나누어 구현하는 하향식(Top-Down) 프로그래밍을 도입했다.

하지만 이 방식도 데이터의 처리 방법을 구조화했을 뿐이지, 데이터 자체는 구조화하지 못했다. 그래서 작은 문제들을 해결할 수 있는 객체를 먼저 만든 뒤에 이 객체들을 조합해서 큰 문제를 해결하는 상향식(Botton-up) 프로그래밍을 도입했다.

이것이 바로 오늘날 많은 프로그램들이 채택하게 된 객체지향 프로그래밍이다.

프로그래밍을 하면서 많은 문제들이 발생하였고 이를 절차적 프로그래밍 -> 하향식 프로그래밍 -> 상향식 프로그래밍으로 발전시키면서 오늘날의 객체지향 프로그래밍이 탄생

반응형
LIST