기계어부터 객체지향에 이르기까지 정리

기계어부터 객체지향에 이르기까지 정리

 

@기계어

인류 최초의 프로그래머들은 꺼진 상태와 켜진 상태를 각각 0과 1로 해석할 수 있는 진공관을 이용해서 프로그램을 작성했다.

 

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

 

기계어 코드는가 CPU에 따라 다르다.

 

애드삭 1+ 3 

01010101 11110000 11001100

 

유니박 1 + 3

00111100 11100001 11001000

 

 

 

 

@어셈블리어

기계어를 벗어나 인간의 언어로 프로그래밍을 시작할 수 있게됨.

 

기계어의 명령들을 일상 용어로 표현하고 이걸 기계가 알 수 있는 기계어로 번역하게 하면 어떨까? 라는 생각을 하는 사람들이 생겨남.

 

실제로 개발자들은 기계어를 일상 용어로 표현했다.

 

그 결과 기계어 명령어와 일상용어를 일대일로 매칭하는 코드표가 만들어졌다.

 

니모닉과 기계어의 일대일 매칭 코드표를 만들었다. 그 매칭 코드표를 어셈블리라고 불렀다.

 

문제는 cpu마다 기계어가 다르기 때문에 cpu별로 각자의 어셈블리어도 달랐다.

(cpu마다 실행할 수 있는 기계어 세트가 달랐으니 어셈블리어도 기계에 따라 달랐던 것)

 

*어셈블리어를 기계어로 번역해주는 소프트웨어를 어셈블러라고 함.

 

 

 

문제점:

에드삭 어셈블리어 프로그래머가 유니박 어셈블리어 프로그래머로 이직하기 위해서는 유니박용 어셈블리어를 처음부터 다시 배워야 했을 것이고,

거기에 더해 빅엔디안이니 리틀엔디안이니 하는 숫자 표기법도 다시 익혀야만 했을 것이다…

 

 

@C 언어

강력한 이식성 - 원 소스 멀티 오브젝트 유즈 애니웨어

 

 

 

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

그런데 c 언어는 소스파일 하나만 만들면 된다.(싱글소스)

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

 

여전한 문제점

운영체제가 하드웨어의 특성을 추상화하고, 컴파일러는 운영체제별로 만들어져 공급하게 되는데, 그 운영체제들이 또 나름의 특성이 있었기에

하나의 소스로 각 기종별로 컴파일 하기 전에 그 기종에 맞게 소스를 변경하는 작업이 필요했다.

 

예) 어떤 운영체제는 int가 2바이트, 어떤 운영체제는 Int가 4바이트

 

 

c언어가 프로그래밍 방법에 있어서 새로운 패러다임을 제시했는데, 바로 함수로 대표되는 구조적 프로그래밍이다.

 

@객체지향 - 자바

 

 

컴파일러를 기종별로 따로 구매해두지 않아도 되게되었다.

 

c언어로 작성한 소스를 다른 기종의 컴퓨터에서 실행하려면 소스와 각 기종용 컴파일러를 준비해야만 했다.

 

그런데 자바로 구현한 소스는 다른 기종의 컴퓨터에서 실행하기 위해 목적 파일인 오브젝트 파일만 가져가면된다.

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

 

 

 

 

 

 

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