기계어 및 어셈블리어
모든 신기술은 이전 기술의 철학과 기법을 정반합의 논리로 정제하고, 이전 기술을 거름 삼아 새로운 철학과 기법을 더해 나타나는 것
#컴퓨터 의 창세기 시절에는 진공관을 이용해 프로그램을 작성했다.
#기계어 는 기계가 이해하는 유일한 언어로 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 개념을 구현한 방식
'개발 관련' 카테고리의 다른 글
스프링 입문을 위한 자바 객체 지향의 원리와 이해 - 4. 자바가 확장한 객체 지향 (0) | 2023.12.25 |
---|---|
스프링 입문을 위한 자바 객체 지향의 원리와 이해 - 3. 자바와 객체 지향 (0) | 2023.12.25 |
스프링 입문을 위한 자바 객체 지향의 원리와 이해 - 2. 자바와 절차적/구조적 프로그램 (0) | 2023.12.18 |