독서/스프링 입문을 위한 자바 객체 지향의 원리와 이해

1장 - 사람을 사랑한 기술

pshoon25 2023. 6. 27. 11:56

신기술은 이전 기술을 거름 삼아 새로운 철학과 기법을 더해 나타나는 것

스프링을 이해하려면 이전의 어떤 기술을 이해하고 있어야 할까 ?

  • SOA (Service Oriented Architecture) : 서비스 지향 개발
    • 서비스 중심 구조 또는 서비스 지향 구조
    • 개발자 입장에서의 개발이 아니라 실제 현실의 업무를 기준으로 개발하자는 사상
  • CBD (Componented Based Developed) : 블록화 개발(컴포넌트 기반 개발)
    • 애플리케이션을 통짜로 개발하지 말고, 애플리케이션을 의미 있는 단위로 구분하고 그 단위를 하나 하나씩 부품으로 개발해 마치 레고 블록을 쌓아 올리듯 부품을 결합해 소프트웨어 제품을 완성하자는 방법론
  • OOP (
  • 절차적/구조적 프로그래밍
  • 기계어나 어셈블리어

기계어 → 어셈블리어 → C → C++ → Java

기계어란 ? → 0과 1

  • 컴퓨터는 0과 1(2진법) 밖에 이해하지 못한다.
  • 최초의 프로그래머는 꺼진 상태와 켜진 상태를 각각 0과 1로 해석 할 수 있는 진공관 이용해 프로그램을 작성했다.
  • 기계어 코드는 CPU에 따라 다르다. (애드삭 & 유니박)

어셈블리어란 ? → 인간 지향

  • 기계어를 일상 용어로 표현
  • 기계어 명령어와 일상 용어를 일대일로 매칭하는 코드표
  • CPU마다 기계어가 다르기때문에 CPU별로 각자의 어셈블리어가 있었다.
  • 어셈블리어가 남긴 진정한 유산은 기계어를 벗어나 인간의 언어를 모방해 프로그램을 작성하는 것
  • 멀티 소스 : 어셈블리어는 같은 일을 하는 프로그램의 소스 파일을 각 기계의 종류만큼 만들어야 했다.

C언어란 ? → One Source Multi Object Use Anywhere

  • One Source : 하나의 C 소스 파일만 작성
  • Multi Object : 기종마다 하나씩 기계어 목적 파일을 생성
  • Use Anywhere : 모든 컴퓨터에서 실행 가능
  • 싱글 소스 : 하나의 소스 파일을 각 기계에 맞는 컴파일러로 컴파일만 하면 각 기계에 맞는 기계어 목적 파일이 만들어 지는 것
  • 하나의 소스를 가지고 기종별로 컴파일만 하면 해당 기종별로 목적 파일(기계어 코드)가 만들어지는 것이다.
  • C언어가 프로그래밍 방법에 있어서 새로운 패러다임을 제시
  • → 함수로 대표되는 구조적 프로그래밍

C++ 언어란 ? → 객체 지향

  • C++언어는 C에 객체 지향 개념을 도입합으로써 역사에 한 획을 그은 언어이다.
  • C++는 객체 없는 프로그래밍도 가능하다.

Java란 ? → 진정한 객체 지향 언어 & Write Once Use Anywhere

  • 객체 지향 언어의 중심에는 클래스(class)가 있다. (객체 [Object]라고 해도 된다.)
    • 프로그램의 시작점인 main() 메서드마저도 클래스 내부에 존재해야 한다.
    • 모든 메서드도 클래스.메서드명(), 객체.메소드명()으로 접근해야만 한다.
    → C++의 main() 함수는 클래스와 별개로 존재할 수 있으며, print() 함수는 클래스나 객체와 관계없이 호출할 수 있다.
  • 가상 머신(Virtual Machine)
  • 컴파일러를 기종별로 따로 구매해두지 않다도 된다.
  • 즉, CPU 기종이 몇 개든 단 하나의 JVM용 기계어 생성

→ C언어로 작성한 소스를 다른 기종의 컴퓨터에서 실행하려면 소스와 각 기종용 컴파일러가 필요

→ 자바로 구현한 소스는 다른 기종의 컴퓨터에서 실행하기 위해 목적 파일인 오브젝트 파일만 필요

⇒ 단, 다른 기종의 컴퓨터에 해당 기종용 JRE가 설치돼 있어야 한다.

스프링 프레임워크란 ? → 스프링 프레임워크의 개념은 OOP 프레임 워크

  • 스프링 프레임워크를 이해하려면 OOP를 알아야 한다.
  • OOP 프레임워크 with IoC, DI, AOP, PSA, WEB, ORM, OXM, SEcurity, …등 무수히 많다.
  • 스프링 프레임워크에도 스프링을 지배하는 근원적인 요소가 존재
    • 스프링 삼각형
      • IoC/DI
      • AOP
      • PSA : 일관성 있는 추상화 기법
        • 중구난방으로 구현된 다양한 기술을 표준화된 방식으로 사용할 수 있게 지원
          • 엔터프라이즈 애플리케이션은 ORM, OXM, JMS, AOP, CoC등 다양한 기술을 다양한 공급자가 각자의 방식으로 구현하고 제공하여 각 기술을 학습하고 적용하는 것이 고되고 힘든 작업이었다.
        • 스프링을 도입하면서 엔터프라이즈 애플리케이션을 더 쉽고 편하게, 더 안정적으로 개발할 수 있다.
    • 스프링 삼각형은 POJO(Plain Old Java Object)에 세 가지 유형의 진동을 줌으로써 거대한 프레임워크를 완성해냈다.
  • 스프링 프레임워크는 ORM, OXM, JMS, AOP, CoC 등 엔터프라이즈 애플리케이션(Enterprise Application)을 구현하는 데 필요한 거의 모든 서비스를 지원해준다.
  • 사회적 필요를 충족하기 위해 만들어지는 애플리케이션을 엔터프라이즈(기업) 애플리케이션이라고 한다.