기계어 및 어셈블리어

모든 신기술은 이전 기술의 철학과 기법을 정반합의 논리로 정제하고, 이전 기술을 거름 삼아 새로운 철학과 기법을 더해 나타나는 것

#컴퓨터 의 창세기 시절에는 진공관을 이용해 프로그램을 작성했다.

#기계어 는 기계가 이해하는 유일한 언어로 2진 숫자인 0과 1로만 표현 된다.

  • 기계어 코드가 CPU에 따라 다르다.
  • 애드삭(EDSAC)과 유니박(UNIVAC)

기계어를 사람의 일상 용어로 표현하고 기계어로 번역한 일대일 매칭 하는 코드표를 #어셈블리 라고 불렀다.
어셈블리어를 기계어로 번역해 주는 소프트웨어를 #어셈블러(Assembler)라고 한다.

어셈블리어라면 같은 일을 하는 프로그램의 소스 파일을 각 기계의 종류만큼 만들어야 했다. #멀티소스

C 언어 및 C++

#C언어 의 등장으로 소스 파일 하나만 만들면 하나의 소스 파일이 각 기계에 맞는 컴파일러로 컴파일만 하면 각 기계에 맞는 기계어 목적 파일이 만들어 진다. #싱글소스

각 기종 별로 목적 파일이 만들어지지만 운영체제가 하드웨어의 특성을 추상화하고 컴파일러는 운영체제 별로 만들어져 공급하게 되는데 각 기종 별로 컴파일하기 전에 그 기종에 맞게 소스를 변경하는 작업이 필요했다.

어떤 운영체제는 int를 2바이트로 인지하고, 다른 운영체제는 int를 4바이트로 인지하기 때문에 발생하는 문제가 있다.

C언어의 특성

  • 어셈블리어 대비 이식성이 좋음
  • One Source 하나의 소스 파일
  • Multi Object 기종마다 하나씩 기계어 목적 파일 생성
  • Use Anywhere 모든 컴퓨터에서 실행 가능

컴퓨터의 작동 원리를 이해하고 싶다면

어셈블리어 책 한권 정독 권장

C 언어로 k = a + b 소스는 a 변수에 저장된 값과 b 변수에 저장된 값을 더해 k 변수에 대입하라가 인간이 이해하는 번역된 문장이다.
이 소스를 어셈블리어로 작성하면 다음과 같다. 인텔 80xx CPU 어셈블리어

  • load 레지스터1, 110번지
  • load 레지스터2, 114번지
  • add 레지스터2
  • save 106번지, 레지스터1

C 언어가 함수로 대표되는 구조적 프로그래밍을 새로운 패러다임으로 제시했다.

자바

#자바 가 진정한 객체 지향 언어?
객체 지향 언어의 중심에는 클래스(Class)가 있다. 자바에서는 클래스를 떠나 존재할 수 있는 것은 아무것도 없다. 프로그램 시작점인 main() 메서드 마저도 클래스 외부가 아닌 내부에 존재해야 한다. 그리고 모든 메서드도 클래스.메서드명() 또는 객체.메서드명()으로 접근해야만 한다.
그런데 C++은 순수 객체 지향 개념에 가장 충실한 언어이긴 하지만 객체 없는 프로그래밍도 가능하다. mian() 함수는 클래스와 별개로 존재할 수 있고, printf() 함수는 클래스나 객체와 관계없이 호출할 수 있다.

자바와 C# 두 언어가 인간을 이롭게 한 것은 #가상머신(Virtual Machine) 이다.

자바의 특성

  • Write Once (=One Source)
  • One Object
  • User Anywhere

컴파일러는 기종별로 따로 구매해두지 않아도 된다. 자바 컴파일러는 무료이다.
C 언어로 작성한 소스를 다른 기종의 컴퓨터에서 실행하려면 소스와 각 기종용 컴파일러를 준비해야 했지만, 자바로 구현한 소스는 다른 기종의 컴퓨터에서 실행하기 위해 목적 파일인 오브젝트 파일만 가져가면 된다.

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

어셈블리어 / C 언어 / JAVA 특성 비교

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

프로그래밍 언어의 발전사

CBD ? SOA?

CBD (Component Bsed Development)

  • 컨포넌트 기반 개발
  • 애플리케이션을 의미 있는 단위로 구분하고 그 단위를 하나씩 개발하는 소프트웨어 개발 방법론

SOA (Service Oriented Architecture)

  • 서비스 중심 구조 또는 서비스 지향 구조
  • 실제 현실의 업무 기준으로 개발하는 사상

스프링은 OOP 프레임워크 이다

스프링 삼각형 Ioc/DI, AOP, PSA -> POJO(Plain Old Java Object)

스프링 프레임워크는 OOP 프레임워크라는 개념을 제품화한 것익, OOP 개념을 구현한 대표적인 제품 중에서는 자바이다.

이 책에서 설명하고자 하는 내용

  • OOP 개념
  • 자바 언어의 문법
  • 자바가 OOP 개념을 구현한 방식