사람을 사랑한 기술

스프링 관련 책의 cheater 1

1. 기계어 : cpu의 언어

2. 어셈블리어: 0과 1을 넘어서 인간 중심으로

어셈블리어가 남긴 대박적인 유산은 뭐냐면, 기계어를 넘어서 인간의 언어를 따라하고 프로그래밍을 가능하게 한거야.

  • 애드삭: 최초로 프로그램 내장 방식을 쓴 전자계산기

  • 유니박: 최초의 상업용 컴퓨터. 이걸로 창조적인 모방이 시작되었지.

그런데 애드삭, 유니박 시절의 어셈블리어는 이식이 잘 안되는 단점이 있었어. 이 문제를 해결하기 위해 나온 게 바로 C언어야.

3. C언어: 강력한 이식성

어셈블리어를 쓸 때는, 같은 일을 하는 프로그램의 소스 파일을 각각의 기계마다 만들어야 했어. 그런데 C언어가 나오면서 이제 하나의 소스 파일만 있으면 돼.

  • 하나의 소스 파일을 각 기계에 맞는 컴파일러로 컴파일하면 기계에 맞는 기계어 목적 파일이 만들어져.

  • 하나의 소스 파일 ⇒ 기종별로 컴파일 ⇒ 해당 기종별 목적파일: 기계어 코드 생성

One Source : 하나의 C 소스 파일만 작성 Multi Object : 기종마다 하나씩 기계어 목적 파일을 생성 Use Anywhere : 모든 컴퓨터에서 실행 가능

🔗 출처 : https://github.com/gyoogle/tech-interview-for-developer/blob/master/Language/[c] C언어 컴파일 과정.md

하지만 운영체제가 하드웨어의 특성을 추상화하고, 컴파일러는 운영체제별로 만들어져서 공급되니까, 컴파일 전에 그 기종에 맞게 소스를 바꿔야 하는 작업이 필요해.

C언어에서 말하는 강력한 이식성

C언어의 '강력한 이식성'이란, 어셈블리어보다 이식성이 좋다는 거지, 자바보다 이식성이 좋다는 건 아니야.

자바는 jvm이라는 컴파일러가 다 운영체제에 맞게 알아서 설명해준다는 것

🌟 인간이 이해하기 쉬운 언어 체계가 기계어와 1:1 매칭이 아닌 m::n 매칭이 가능해졌다는 것

3. C++ 언어 : 정말 인간적인 프로그래밍 방법론, 객체 지향

C++은 C에 객체 지향 개념을 도입함으로써 역사에 한 획을 그은 언어가 되었어

객체 지향은 개발자에게 이롭게 하기 위한 것이므로 2, 3장에서 자세히 다룬다고 해

4. 자바 : 진정한 객체 지향 언어

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

객체 지향 언어의 중심에는 클래스!!

클래스와 c++과 자바의 차이

자바는 클래스를 떠나 존재할 수 있는 것이 없다!

이거 하나로 자바는 객체지향 언어라는 것을 알 수 있지

public class Person {
    // 필드
    private String name;
    private int age;

    // 생성자
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // 메서드
    public void displayInfo() {
        System.out.println("Name: " + name + ", Age: " + age);
    }

    // 게터와 세터
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    // 메인 메서드 (테스트용)
    public static void main(String[] args) {
        Person person = new Person("John", 30);
        person.displayInfo();

        person.setName("Jane");
        person.setAge(25);
        person.displayInfo();
    }

심지어 코드를 보는 것 처럼 프로그램의 시작점인 main() 메서드 마저 클래스 외부가 아닌 내부에 존재해야 한다는 거야

모든 메서드도 아래와 같이 접근해야 한다는 거야.

  • 클래스.메서드명()

  • 객체.메서드명()

system.out.println(); // system

반면에, C+의 main() 함수는 클래스와 별개로 존재할 수 있고, printf() 함수는 클래스나 객체 관계없이 호출 할 수 있지

JAVA가 인간을 이롭게 하는 방법

자바와 C++이 개발자에 대한 사랑한 방법은 바로 가상 머신(Virtual Machine)이야. C#의 가상머신은 CLR이라는 것으로 공통 언어 런타임에 약자야.

그렇다면 가상 머신이 어떻게 인간을 이롭게 했을까? 그전의 자바의 인간 사랑을 단어로 줄이자면 아래와 같아.

Write Once Use Anywhere

⇒ One Object 라는 것이 c언어와 차이가 있어

즉, 이게 뭘 의미 하냐면 컴파일러를 기종별로 따로 구매하지 않아도 된다는 거야. 하나의 목적 파일이니까.

그렇다면.. 어떤 것 덕분인걸까? 앞에서 설명한 것처럼 가상머신이 우리를 이롭게 했지.

자바 프로그램이 다양한 운영 체제에서 실행될 수 있는 이유는 즉, JVM(Java Virtual Machine) 덕분이야.

아마.. 자바를 공부한 사람들은 대부분 알고 있었겠지

여기서 잠깐! 🌟 JVM, JRE, JVM의 차이

  • JVM (Java Virtual Machine): 자바 바이트코드를 실행하는 가상 머신인데, 운영 체제나 하드웨어에 의존하지 않아. 그래서 각 운영 체제에 맞는 JVM이 있어야 자바 바이트코드를 실행할 수 있어.

  • JRE (Java Runtime Environment): 자바 애플리케이션을 실행하기 위한 환경을 제공해. JRE에는 JVM과 표준 자바 클래스 라이브러리가 포함되어 있어.

  • JDK (Java Development Kit): 자바 애플리케이션을 개발하기 위한 도구 모음으로, JRE와 개발에 필요한 컴파일러 및 기타 도구가 포함되어 있어.

JVM은 가상의 컴퓨터를 물리적 컴퓨터의 메모리 안에 하나 더 구축하는 것으로 가상이긴 하지만 컴퓨터를 하나 더 만드는 것으로 더 많은 CPU 자원과 더 많은 물리적 메모리를 소비했음은 당연하므로 속도가 굉장히 느려 배척 받을 뻔 했대..

어셈블리어, C, 자바의 차이

객체 지향의 4대 특성을 누군가에게 설명할 수 있게 제대로 이해해야 하는 게 중요!!!

뿐만 아니라 스프링 프레임워크는 사상이면서 또 단일 제품이다. 스프링은 객체 지향의 기반 위에 굳건히 서 있기 때문이라고 해

스프링 프레임워크를 학습하기 가장 힘든 이유는 OOP 자체를 잘 모르거나 오해하기 때문이라고… 그렇기에 OOP를 이해하는 것이 중요하고 그 것을 이해하면 일관성을 깨워치게 될 거라고 해!

POJO(Plain Old Java Object)

세 가지 유형의 진동을 줌으로써 거대한 프레임워크를 완성했어

스프링 프레임워크의 가장 큰 장점 중 하나는 ORM, OXM, JMS 등 엔터프라이즈 애플리케이션을 구현하는 데 필요한 거의 모든 서비스를 지원해준다는 거지!

즉, 이런 다양한 서비스를 지원해주는 PSA(일관성 있는 추상화) 기법을 통해 중구난방으로 구현된 다양한 기술을 표준화된 방식으로 사용할 수 있게 지원해줘

객체 지향을 이해해야 올바른 자바 프로그램을 만들 수 있고, 또 스프링에 입문할 수 있다.

Last updated