신기술을 기존의 방식이나 기술에 불편, 개선의 필요성을 느껴 재구축된다.
신기술은 이전 기술이 제시한 철학과 기법을 정반합의 논리로 정제하고, 이전 기술을 거름 삼아 새로운 철학과 기법을 더해 나타나는 것이다.
그러므로 기존의 기술에서 어떠한 점이 불편했는지를 잘 파악하고 다음 기술과의 차이점에 대해서 생각해보자!
🤫니모닉이란? 어떤 것을 기억하는 데 쉽게 도움을 주는 것, 쉽게 기억하는 성질 예시) 01010101 → ADD
하지만 각 CPU마다 다르게 실행되는 것은 어쩔 수 없었음
C - One Source Multi Object Use AnyWhere
운영체제에 맞는 컴파일러를 제공
하나의 파일을 작성하면 각각의 운영체제에 맞는 컴파일러가 각각의 CPU에 맞는 목적파일(기계어)을 생성해줌
But. 운영체제마다 나름대로의 특성이 있었음 → Fix Source 운영체제별 소스 수정 과정이 필요했다.
- 예시) 어떤 운영체제에서는 int를 2바이트, 다른데서는 4바이트로 인지한다.
의의 : 인간의 언어 체계와 기계어가 m : n의 매칭이 가능해졌다!
C++
Java - Write Once User AnyWhere
JVM이라는 자바 가상 머신을 가짐으로써 하나의 파일을 작성하더라도 각각의 운영체제에서 실행할 수 있다!
사진 첨부하자
Chapter1에서 설명했듯 Java는 Write Once User AnyWhere의 방식을 따른다.
즉 한번의 소스코드를 작성하면 어떠한 운영체제에서든 각자의 JVM을 설치하면 해당 프로그램을 실행할 수 있다는 말이다.
goto를 이용한다면 프로그램의 순서를 변경할 수 있다. 하지만 이는 개발자가 디버깅을 할 떄 많은 시간과 노력을 필요하게 한다.
절차적 프로그래밍이란 프로그램을 논리적으로 잘 구현해서 순서대로 실행해게 하라는 말이다.
긴 코드를 보면 일단 짜증날것이다. 그러므로 논리를 함수 단위로 분리해서 이해하기 쉬운 코드를 작성하자
자바에서의 프로그램은 메서드 내의 코드를 차례차례 실행하면서 동작한다.
객체지향 프로그래밍에서 제어문이 존재 할 수 있는 공간은 메서드 내부이므로 메서드가 절차적/구조적 프로그래밍의 유산이다.
스태틱(static) 영역 : main() 메서드가 실행 되기 전 JVM은 개발자가 작성한 모든 클래스와 Import 패키지 모두 static 영역에 가져다 놓는다.
스택(stack) 영역 : 여는 중괄호(ex 메서드, if문, while)를 만날 때마다 새로운 스택 프레임(stack frame)을 스택 영역에 할당한다. → 이는 지역변수와 메모리의 개념과 관련있다.
힙(Heap) 영역 : 객체(인스턴스)들이 생성되면 힙 영역에 생성된다.
멀티 스레드(Multi Thread)의 T 메모리 모델은 스택 영역을 스레드 개수만큼 분할해서 사용하는 것
하나의 스레드에서 다른 스레드의 스택 영역에는 접근할 수 없지만 스태틱 영역과 힙 영역은 공유해서 사용 가능하다.
멀티 프로세스(Multi Process)는 다수의 데이터 저장 영역, 즉 다수의 T 메모리를 갖는 구조이다.
하나의 프로세스가 다른 프로세스의 T 영역을 절대 침범할 수 없으므로 안전하지만 메모리 사용량이 크다.
멀티 스레드 환경에서의 전역 변수 사용은 문제를 일으킬 수 있다.(각 특성을 잘 생각해 보면 바로 떠오를 것이다)