기계어부터 객체지향에 이르기까지 정리
@기계어
인류 최초의 프로그래머들은 꺼진 상태와 켜진 상태를 각각 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가 설처돼 있어야 한다.
참고 : 스프링 입문을 위한 자바 객체 지향의 원리와 이해
'웹개발 > Java' 카테고리의 다른 글
자바의 변수와 메서드는 메모리에 어떻게 표시될까 2 (0) | 2022.10.06 |
---|---|
자바의 변수와 메서드는 메모리에 어떻게 표시될까 1 (1) | 2022.10.05 |
Java IO 패키지 정리 3 - socket 통신 (0) | 2021.03.17 |
Java IO 패키지 정리 2 - 보조스트림 (0) | 2021.03.17 |
Java IO 패키지 정리 1 (0) | 2021.03.17 |