[java] 스프링 입문을 위한 자바 객체지향의 원리와 이해 정리 1

사람을 사랑한 기술

기계어에서 객체 지향 프로그래밍 언어로

기계어

0,1 로 이루어진 컴퓨터가 이해할 수 있는 언어로 에드삭, 유니박 전용 기계어가 존재했다

어셈블리어

기계어의 수준으로 인간의 눈높이를 낮추는 것은 굉장히 힘든일이었다. 그래서 기계어의 명령들을 일상 용어(니모닉)로 표현하고 이를 기계가 알 수 있는 기계어로 번역하는건 어떨까 하는 시도가 발생

다만 위 에드삭, 유니박 처럼 기계마다 CPU가 다르고 이 CPU에서 사용하는 기계어가 다르기 때문에 어셈블리어도 기계마다 다르게 사용이 되야했던게 문제다.

C언어(강력한 이식성)

위에서 발생하는 문제는 기계마다 그에 맞는 언어를 사용해야했다는 문제이다.

C언어는 같은 코드를 각 기계에 맞는 컴파일러로 컴파일하게 만들어서 위 두 상황보다 강력한 이식성을 가질 수 있게 되었고, 문제를 해결하는 듯 보였다.

C++(정말 인간적인 프로그래밍 방법론)

객체 지향 개념이 도입됨으로써 역사에 한 획을 그은 언어가 됐따.

기계어 -> 어셈블리어 -> C언어 -> C++ 로 가는 과정이 기계까 아닌 인간을 위한 과정이었는데 그 중에서도 C++은 인간을 위한 패러다임의 극적 변화

Java(진정한 객체 지향 언어)

C++ 이야말로 순수 객체 지향 개념에 가장 충실한 언어 이지만 C++은 객체 없는 프로그래밍도 가능하다. 그래서 C++은 객체 지향 지원 언어로 부르는 것이 맞다고 본다.

반면 객체 지향 언어의 중심에는 클래스(객체)가 있어야 하며 자바는 Class가 없으면 아무것도 할 수 없다. 또 자바 프로그램의 시작인 메인 메서드 또한 클래스 외부가 아닌 내부에 존재해야 하고 모든 메서드도 클래스.메서드 또는 객체. 메서드 명으로 접근해야 하기 때문에 자바에 객체는 필수이다.

다만 JAVA는 JVM이라는 인간에 대한 사랑의 정점인 특징이 있다.

위 그림에서 자바는 소스 코드에서 만들어진 목적파일(.class)과 목적파일이 실행될 JRE가 설치된 기계만 준비가 되면 된다.

C언어는 기종 별로 컴파일러가 필요한 반면 자바는 JVM이 이해할 수 있는 목적파일(기계어)만 있으면 어떤 기계에서든 실행이 가능하다.

신기술이 역사 속에서 환영만 받은 것은 아니다.

배척받은 C

각 기계에서 컴파일러만 있으면 사용할 수 있었지만, 기계어, 어셈블리어에 비하면 느렸다. 당시 C언어에는 메모리를 효율적으로 사용하지 못했기 때문이다.

배척받은 C++

기존의 절차적/ 구조적 프로그래밍과는 전혀 다른 패러다임의 객체 지향은 기존 사용자들에게 배척받았다.

Java

자바는 말 그대로 가상 컴퓨터를 물리적 컴퓨터의 메모리 안에 하나 더 구축하는 것이다. 가상이긴 하지만 컴퓨터를 하나 더 만드는 것이니 더 많은 물리적 메모리와 CPU를 필요로 했다. 속도도 C와 C++에 비해 형편없었다. 하지만 하드웨어의 발전, 하드웨어 구성 요소의 가격 하락, 최적화딘 알고리즘으로 개발된 api와 JVM으로 인해 현재는 느린것이 체감도 힘들고 성능 검사 일부 항목에서는 C와 C++보다 빨랐다는 결과도 있다.

스프링 프레임워크란?

스프링 프레임워크는 객체지향 프로그래밍을 위한 프레임워크다.

스프링 프레임워크는 단순하고 유연하며 쉽고 강력하다.

스프링 프레임워크는 규모의 방대함에도 불구하고 자기 철학을 통해 일관성 있는 방식으로 이를 쌓아 올렸다.

스프링 삼각형: IoC/DI, AOP, PSA

스프링은 PSA(일관성 있는 추상화)를 통해 중구난방으로 구현된 다양한 기술을 표준화된 방식으로 사용할 수 있게 지원해준다.

객체 지향의 4대 특성을 이해해야 한다.