군만두의 IT 공부 일지

[스터디6] 01. 사람을 사랑한 기술 본문

프로그래밍/객체지향

[스터디6] 01. 사람을 사랑한 기술

mandus 2025. 3. 1. 15:48

목차

     

     

     

     

     

      제목: 스프링 입문을 위한 자바 객체지향의 원리와 이해

      저자: 김종민

      출판사: 위키북스

      가격: 25,000원

     

     

    자바에서 스프링으로 나아가기 위한 연결 고리

     

     

     

     

     

     

    '객체지향의 사실과 오해' 책과 동일한 방식으로 스터디를 진행하려고 한다. 블로그에 책을 학습한 내용을 정리하고, 깃허브 이슈에는 책을 읽으며 이야기 나눌 주제나 같이 보면 좋을 자료를 공유한다.

    01. 사람을 사랑한 기술

    1. 신기술은 이전 기술의 어깨를 딛고

    Q. 스프링은 과거로부터 현재까지의 프로그래밍 발전사에서 그 정점에 있다고 해도 과언이 아니다. 스프링을 이해하려면 이전의 어떤 기술들을 이해하고 있어야 할까?
    A. SOA, CBD, OOP, 절차적/구조적 프로그래밍, 기계어나 어셈블리어 (오른쪽으로 갈수록 모범 답안)

     

    스프링을 학습하려면 이러한 이전 기술들을 마스터해야 하는 것은 아니다. 1장에서는 이전 기술들의 의미를 빠르게 돌아보고, 필자가 책을 통해 하는 말이 맞는지 확인한다.

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

    기계어 - 0과 1의 행진 / 너무나 비인간적인 언어

    • 컴퓨터는 0과 1밖에는 이해하지 못한다.
    • 기계어: 기계가 이해하는 유일한 언어. 2진 숫자인 0과 1로만 표현된다.
    • 기계어 코드는 CPU에 따라 다르다.
    // 애드삭(EDSAC) 기계어 : 1 + 3
    01010101 00000001 00001001
    // 유니박(UNIVAC) 기계어 : 1 + 3
    11011100 00011000 10011000

    ▲ 이기종 간 호환이 불가능한 기계어

    - 메타포(Metaphor): 비유법, 다른 유사한 것에 빗대어 잘 모르는 것을 설명하고자 하는 방법
    - 애드삭(EDSAC): 모리스 월키스, 2진법을 적용한 세계최초의 프로그램 내장 방식 전자계산기
    - 유니박(UNIVAC): 최초의 상업용 컴퓨터

    어셈블리어 - 0과 1의 행진을 벗어나 인간 지향으로 / 기계어 니모닉

    • 어셈블리: 니모닉(Mnemonic)과 기계어의 일대일 매칭 코드표
    • CPU마다 기계어가 다르기 때문에 CPU별로 어셈블리어(Assembly Language)도 달랐다.
    • 어셈블러(Assembler): 어셈블리어를 기계어로 번역해 주는 소프트웨어
      • 예)
        • 애드삭: 더하기를 의미하는 기계어 01010101에 매칭되는 어셈블리어 니모닉은 ADD라고 한다.
        • 유니박: 더하기를 의미하는 유니박 전용 기계어 1101100을 유니박 전용 어셈블리어 니모닉으로 PLUS라고 한다.
      • 교훈:
        • 모방 속의 창조(X)
        • 기계어를 벗어나 인간의 언어를 모방해 프로그램을 작성하는 것이 가능하다.(O)

    ▲ 인간을 0과 1의 행진에서 해방시킨 어셈블리어

    • 장점: 0과 1의 행렬에서 벗어나 일상 용어(영어)로 프로그램을 작성할 수 있다.
    • 단점: 애드삭 어셈블리어 프로그래머가 유니박 어셈블리어 프로그래머로 이직하기 위해서는, 해당 어셈블리어와 숫자 표기법을 처음부터 다시 배워야 한다.
    니모닉(Mnemonic): 어떤 것을 기억하는 데 쉽게 하도록 도움을 주는 것, 또는 쉽게 기억되는 성질

    C 언어 - 강력한 이식성 / One Source Multi Object User Anywhere

    ▲ C 언어의 소스 파일(단수)과 목적 파일들(복수)

    • 장점: 어셈블리어 대비 이식성이 좋다.
      • 어셈블리어는프로그램의 소스 파일(멀티 소스)을 기계의 종류만큼 만들지만, C 언어는 소스 파일(싱글 소스)을 단 하나만 만들면 된다. 하나의 소스 파일을 각 기계에 맞는 컴파일로 컴파일하면 각 기계에 맞는 기계어 목적 파일이 만들어진다.
      기계어 어셈블리어 C 언어
    개발자의 코딩 0과 1의 나열 일상 단어 사용 수학적 기호 사용
    소스 파일 기종마다 하나씩 기종마다 하나씩 기종이 몇 개든 단 하나
    목적 파일(기계어) 소스 그 자체 어셈블러로 소스를 번역해 생성 컴파일러로 소스를 번역해 생성
    기계어 비교   기계어와 1:1 대응하는 니모닉 기계어와 M:n 대응하는 수학적 기호

    ▲ 기계어, 어셈블리어, C 언어 비교

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

    구조적 프로그래밍에 대해서는 2장에서 확인한다.

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

    • C++: C에 객체 지향 개념을 도입한 언어
    • 기계어에서 어셈블리어로, 어셈블리어에서 C 언어로 발전하는 과정은 기계가 아닌 인간을 위한 과정이고, 객체 지향 역시 인간을 위한 패러다임의 극적 변화다.

    객체 지향에 대한 내용은 3장에서 확인한다.

    자바 - 진정한 객체 지향 언어

    • C++ vs 자바
      • C++는 객체 없는 프로그래밍도 가능하다. C++의 main() 함수는 클래스와 별개로 존재할 수 있으며, printf() 함수는 클래스나 객체와 관계없이 호출할 수 있다.
      • 자바에서는 클래스를 떠나 존재할 수 있는 것은 아무것도 없다. 프로그램의 시작점인 main() 메서드는 클래스 외부가 아닌 내부에 존재해야 하고, 모든 메서드는 클래스.메서드명() 또는 객체.메서드명()으로 접근해야 한다.
    • 자바는 가상 머신(Virtual Machine)으로 인간을 이롭게 했다. 컴파일러를 기종별로 따로 구매하지 않아도 된다. 또한, 자바 컴파일러는 무료다.

    C 언어의 One Source Mulit Object Use Anywhere와 다르게, 자바는 Write Once Use Anywhere로 개선했다.

      C 자바
    소스 파일 One Source Write Once (=One Source)
    목적 파일 Multi Object One Object
    실행 Use Anywhere Use Anywhere

    ▲ C 언어와 자바 비교

    ▲ Write Once Use Anywhere

      어셈블리어 C 자바
    개발자의 코딩 일상 단어 사용 수학적 기호 사용 수학적 기호 사용
    소스 파일 기종마다 하나씩 기종이 몇 개든 단 하나 기종이 몇 개든 단 하나
    목적 파일 어셈블러로 기계어 작성 컴파일러로 해당 운영체제용 기계어 생성 기종이 몇 개든 단 하나의 JVM용 기계어 생성
    기계어 비교 기계어랑 1:1 대응하는 니모닉 기계어와 m:n 대응하는 수학적 기호 기계어와 m:n 대응하는 수학적 기호
    비고 기종별 어셈블러 필요 기종별 컴파일러 필요 단 하나의 컴파일러만 필요
    기종별 JRE 세팅 필요(한 번만 설치해주면 됨)

    ▲ 어셈블리어, C, 자바 비교

    신기술은 이전 기술의 어깨를 딛고 개발자를 위해 발전한다

    언어 발전사 개발자 사랑
    기계어 -  개발자를 사랑하기에는 너무 초창기 기술이었다.
    - 탄도의 궤적은 계산해줬다.
    어셈블리어 - 인간의 언어로 프로그램 작성이 가능해졌다.
    C - 하나의 소스로 이기종 간에 이식성을 확보했다.
    C++ - 객체 지향 개념을 도입했다.
    - 인간적인 사고의 프로그래밍 방식이다.
    자바 - 한 번의 컴파일로 이기종 간에 이식성을 확보했다.
    - 포인터에 대한 개념 없이 프로그래밍을 가능하게 했다.
    스프링 프레임워크 - 거대함 속의 단순함과 완벽함, 그리고 유연함
    - 스프링은 IoC/DI, AOP, PSA라고 하는 객체 지향의 베스트 프랙티스만으로 아무리 거대한 프로그램이라도 쉽게 구현할 수 있음을 보여준 프레임워크다.

    ▲ 프로그래밍 언어의 발전사와 인간 사랑

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

    • 사실 배척도 받았던 C
      • 최적화된 컴파일러에 의해 작성된 목적 파일이라고 해도 기계어/어셈블리어로 제작된 프로그램에 비해 매우 느렸다.
      • 당시에 C 언어는 어셈블리어에 비해 CPU/메모리 자원을 효율적으로 사용하지 못했다.
    • 사실 배척도 받았던 C++
      • 객체 지향은 기존의 절차적/구조적 프로그래밍과는 전혀 다른 패러다임을 제시했다.
    • 사실 배척에 의해 버림받을 뻔했던 자바
      • JVM은 말 그대로 자바 가상 기계, 즉 가상의 컴퓨터를 물리적 컴퓨터의 메모리 안에 하나 더 구축하는 것이다.
      • 물리적 CPU 자원과 물리적 메모리를 더 많이 소비했으며 속도도 C/C++에 비해 느렸다.

    3. 책 출간의 변

    우리가 알아야 할 것
    - OOP 개념
    - 자바 언어의 문법
    - 자바가 OOP 개념을 구현한 방식
    이 글은 『스프링 입문을 위한 자바 객체 지향의 원리와 이해』 책을 학습한 내용을 정리한 것입니다.
    Comments