-
[객체지향의 원리와 이해] (01) 사람을 사랑한 기술개발/OOP, Design Pattern 2020. 12. 22. 00:59
신기술은 이전 기술의 어깨를 딛고
스프링을 비롯한 모든 신기술은 이전 기술의 철학과 기법에 새로운 철학과 기법을 더해 나타난다.
스프링은 그 발전사의 정점에 가깝고, 스프링을 이해하기 위해 이전 기술들을 간단하게 이해할 필요가 있다.기계어에서 객체 지향 프로그래밍 언어로
기계어
최초에 인간은 0과 1로만 이루어진 기계어로 프로그래밍을 했었다. 이러한 방식의 프로그래밍은 눈에 제대로 들어오지도 않을 뿐다. (
010101010000000100001001
이애드삭
에서 1과 3을 더하는 기계어 프로그래밍 코드라는데 당연히 알기 쉽지않다.) 그리고 기계어 방식은 CPU 별로 코드가 다르다.어셈블리어
기계어를 인간의 언어로 표현한 것으로 예를 들어 더하는 연산을 CPU에 따라
add
,plus
로 표현한다. 그리고 기계어와 1:1 매칭을 하여어셈블러
가 이를 번역해주는 것이다.
CPU별로 기계어가 다르기 때문에, 어셈블리어 역시 기계어에 따라 달라진다. 즉 여러 기종의 CPU가 있으면 각 기종에 맞는 방식으로 프로그래밍을 해야 한다. 프로그래머는 CPU에 따라 그에 맞는 어셈블리어를 학습해야한다.C언어
C언어는 어셈블리어와 비교했을 때 큰 차이점이 하나 있다. 어셈블리어는 기종에 따라 다른 어셈블리어로 작성된 각각의 소스파일이 필요했지만, C언어는 하나의 소스파일만 가지고 있어도 된다. 하나의 소스파일을 각 OS에서 컴파일러로 번역하여 목적 파일(기계어)를 생성하는 방식이다. 즉,
이식성
이 생긴 것이다.- One Source (Fix Source)
- Multi Object
- Use Anywhere
어셈블리어와 비교했을 때 개발자에게 엄청난 편리함을 가져다 주었지만, 사실 운영체제별로 약간의 수정은 필요하다. 어떤 운영체제는 int를 2바이트로 사용하고 어떤 운영체제는 4바이트로 인지하는 등의 차이때문이다. 하지만 통채로 새로 작성해야 하는 어셈블리어와 비교했을 땐 엄청난 편리함이다.
C++
객체 지향 개념이 도입되었다.
Java
C++은 클래스가 없어도 main함수가 실행되는 등의 특징이 있지만, 자바는 main 함수도 클래스내에 위치해야 하는 등 모든 것이 클래스로 이루어져 있다. 그래서 완전한 객체 지향 언어라고 볼 수 있다.
자바의 특징은JVM(Java Virtual Machine)
이다. C언어는 하나의 소스파일이지만 운영체제 별로 다른 컴파일러를 사용해 각각의 기계어로 번역해주었다. 하지만 자바는 하나의 소스에 하나의 목적 파일(기계어)만을 생성하고, 사용 기기의 메모리에 JVM이라는 일종의 가상 컴퓨터를 적재하여(해당 기종용 JRE를 설치하여) 해당 목적 파일을 실행한다.정리
기계어/어셈블리어 - 1개 기종의 CPU당 1개의 소스파일 (이식성X)
C언어 - 1개의 소스파일로 각 OS별 컴파일러로 각각의 목적 파일 생성 (1:N)
자바 - 1개의 소스파일로 1개의 목적 파일만을 생성. 각 기기에 JRM을 설치하면 이를 통해 JVM이 생성된 1개의 목적 파일을 실행함신기술이 역사 속에서 환영만 받은 것은 아니다.
C언어
최적화된 컴파일러에 의해 작성된 목적 파일이라 해도, 기계어/어셈블리어보다는 느렸을 것이다.
C++
객체지향이라는 새로운 패러다임을 제시했을 때, 잘못된 학습과 오해에서 어려움이 생기고 배척을 받기도 했다고 한다.
Java
JVM은 가상의 컴퓨터를 물리적 메모리에 하나 더 구축하는 것이니, 물리적 CPU 자원과 메모리를 소비할테니, 속도도 C/C++에 비해 많이 느렸다고 한다. 그러나 시대가 변하면서 최적화된 알고리즘과 하드웨어 자원이 발전하고 가격도 하락하면서 그 속도 차이를 체감하기 어렵고, 어떤 항목에서는 더 빠르기도 하다고 한다.