사람을 사랑한 기술
스프링 관련 책의 cheater 1
Last updated
스프링 관련 책의 cheater 1
Last updated
어셈블리어가 남긴 대박적인 유산은 뭐냐면, 기계어를 넘어서 인간의 언어를 따라하고 프로그래밍을 가능하게 한거야.
애드삭: 최초로 프로그램 내장 방식을 쓴 전자계산기
유니박: 최초의 상업용 컴퓨터. 이걸로 창조적인 모방이 시작되었지.
그런데 애드삭, 유니박 시절의 어셈블리어는 이식이 잘 안되는 단점이 있었어. 이 문제를 해결하기 위해 나온 게 바로 C언어야.
어셈블리어를 쓸 때는, 같은 일을 하는 프로그램의 소스 파일을 각각의 기계마다 만들어야 했어. 그런데 C언어가 나오면서 이제 하나의 소스 파일만 있으면 돼.
하나의 소스 파일을 각 기계에 맞는 컴파일러로 컴파일하면 기계에 맞는 기계어 목적 파일이 만들어져.
하나의 소스 파일 ⇒ 기종별로 컴파일 ⇒ 해당 기종별 목적파일: 기계어 코드 생성
One Source : 하나의 C 소스 파일만 작성 Multi Object : 기종마다 하나씩 기계어 목적 파일을 생성 Use Anywhere : 모든 컴퓨터에서 실행 가능
🔗 출처 : https://github.com/gyoogle/tech-interview-for-developer/blob/master/Language/[c] C언어 컴파일 과정.md
하지만 운영체제가 하드웨어의 특성을 추상화하고, 컴파일러는 운영체제별로 만들어져서 공급되니까, 컴파일 전에 그 기종에 맞게 소스를 바꿔야 하는 작업이 필요해.
C언어의 '강력한 이식성'이란, 어셈블리어보다 이식성이 좋다는 거지, 자바보다 이식성이 좋다는 건 아니야.
자바는 jvm
이라는 컴파일러가 다 운영체제에 맞게 알아서 설명해준다는 것
🌟 인간이 이해하기 쉬운 언어 체계가 기계어와 1:1 매칭이 아닌 m::n 매칭이 가능해졌다는 것
C++은 C에 객체 지향 개념을 도입함으로써 역사에 한 획을 그은 언어가 되었어
객체 지향은 개발자에게 이롭게 하기 위한 것이므로 2, 3장에서 자세히 다룬다고 해
C++
이야 말로 순수 객체 지향 개념에 가장 충실한 언어이지만 C++은 객체 없는 프로그래밍도 가능하기 때문에 객체 지원 언어로 부르는 것이 더 적절하다고 본대
객체 지향 언어의 중심에는 클래스!!
자바는 클래스를 떠나 존재할 수 있는 것이 없다!
이거 하나로 자바는 객체지향 언어라는 것을 알 수 있지
심지어 코드를 보는 것 처럼 프로그램의 시작점인 main() 메서드
마저 클래스 외부가 아닌 내부에 존재해야 한다는 거야
모든 메서드도 아래와 같이 접근해야 한다는 거야.
클래스.메서드명()
객체.메서드명()
반면에, C+의 main() 함수는 클래스와 별개로 존재할 수 있고, printf() 함수는 클래스나 객체 관계없이 호출 할 수 있지
자바와 C++이 개발자에 대한 사랑한 방법은 바로 가상 머신(Virtual Machine)
이야. C#의 가상머신은 CLR이라는 것으로 공통 언어 런타임에 약자야.
그렇다면 가상 머신이 어떻게 인간을 이롭게 했을까? 그전의 자바의 인간 사랑을 단어로 줄이자면 아래와 같아.
Write Once Use Anywhere
⇒ One Object 라는 것이 c언어와 차이가 있어
즉, 이게 뭘 의미 하냐면 컴파일러를 기종별로 따로 구매하지 않아도 된다는 거야. 하나의 목적 파일이니까.
그렇다면.. 어떤 것 덕분인걸까? 앞에서 설명한 것처럼 가상머신이 우리를 이롭게 했지.
자바 프로그램이 다양한 운영 체제에서 실행될 수 있는 이유는 즉, JVM(Java Virtual Machine)
덕분이야.
아마.. 자바를 공부한 사람들은 대부분 알고 있었겠지
JVM (Java Virtual Machine): 자바 바이트코드를 실행하는 가상 머신인데, 운영 체제나 하드웨어에 의존하지 않아. 그래서 각 운영 체제에 맞는 JVM이 있어야 자바 바이트코드를 실행할 수 있어.
JRE (Java Runtime Environment): 자바 애플리케이션을 실행하기 위한 환경을 제공해. JRE에는 JVM과 표준 자바 클래스 라이브러리가 포함되어 있어.
JDK (Java Development Kit): 자바 애플리케이션을 개발하기 위한 도구 모음으로, JRE와 개발에 필요한 컴파일러 및 기타 도구가 포함되어 있어.
JVM
은 가상의 컴퓨터를 물리적 컴퓨터의 메모리 안에 하나 더 구축하는 것으로 가상이긴 하지만 컴퓨터를 하나 더 만드는 것으로 더 많은 CPU 자원과 더 많은 물리적 메모리를 소비했음은 당연하므로 속도가 굉장히 느려 배척 받을 뻔 했대..
개발자의 코딩
일상 단어 사용
수학적 기호 사용
수학적 기호 사용
소스 파일
기종마다 하나씩
기종이 몇 개든 단 하나
기종이 몇 개든 단 하나
목적 파일
어셈블러로 기계어 생성
컴파일러로 해당 운영체제용 기계어 생성
기종이 몇 개든 단 하나의 JVM용 기계어 생성
기계어 비교
기계어량 1:1 대응하는 니모닉
기계어와 m:n 대응하는 수학적 기호
기계어와 m:n 대응하는 수학적 기호
비고
기종별 어셈블러 필요
기종별 컴파일러 필요
단 하나의 컴파일러만 필요 기종별 JRE 세팅 필요(한 번만 설치해주면 됨)
객체 지향의 4대 특성을 누군가에게 설명할 수 있게 제대로 이해해야 하는 게 중요!!!
뿐만 아니라 스프링 프레임워크
는 사상이면서 또 단일 제품이다. 스프링은 객체 지향의 기반 위에 굳건히 서 있기 때문이라고 해
스프링 프레임워크를 학습하기 가장 힘든 이유는 OOP 자체를 잘 모르거나 오해하기 때문이라고… 그렇기에 OOP를 이해하는 것이 중요하고 그 것을 이해하면 일관성
을 깨워치게 될 거라고 해!
세 가지 유형의 진동을 줌으로써 거대한 프레임워크를 완성했어
스프링 프레임워크의 가장 큰 장점 중 하나는 ORM, OXM, JMS 등 엔터프라이즈 애플리케이션
을 구현하는 데 필요한 거의 모든 서비스를 지원해준다는 거지!
즉, 이런 다양한 서비스를 지원해주는
PSA(일관성 있는 추상화)
기법을 통해 중구난방으로 구현된 다양한 기술을 표준화된 방식으로 사용할 수 있게 지원해줘
객체 지향을 이해해야 올바른 자바 프로그램을 만들 수 있고, 또 스프링에 입문할 수 있다.