언어별 비교 ( 참조 : 나무위키 - 프로그래밍 언어 )
- 해석방식의 차이
컴파일(Compile) |
소스코드를 미리 기계어로 변환하여 실행 | ex. C언어, 델파이 |
인터프리터(Interpreter) |
소스코드를 한줄한줄 읽어 바로 번역하여 수행 | ex. 파이썬, 자바스크립트 |
바이트코드(Bytecode) |
소스코드를 컴파일하여 바이트코드로 변환, 이를 인터프리터(JVM,닷넷 프레임워크)에서 한줄 한줄 해석하여 수행. | ex. 자바, C# |
- 정적타입, 동적타입
정적 타입 |
자료형이 고정되어 있는 언어. 묵시적 형변환이 엄격함. ( C언어, 자바 ) | ex. C, C++, 자바 |
동적 타입 |
자료형이 동적으로 변환될 수 있는 언어. 묵시적 형변환이 비교적 허용. | ex. 파이썬,루비 _ 인터프리터 언어 |
- 계산모델에 따른 분류
절차(명령)형 언어 |
단계단계 문제를 해결해 가는 언어, 절차적인 해결과정(알고리즘) |
C언어 |
객체지향 언어 |
추상화, 캡슐화, 상속성, 다형성의 특징. 각 구성요소(변수,메서드)의 객체화 |
C++, Java |
선언(논리)형 언어 |
무엇을 표현할지만 명시하는 언어 |
HTML, SQL |
함수형 언어 |
함수개념에 기반을 둔 언어. 변수가 존재하지 않는다. |
|
2번 문제.
C++과 JAVA 비교
- Java는 C++ 보다 객체 지향에 충실한 언어이며 프로그램의 중심단위가 C++ 은 함수(function)단위, Java는 클래스(Class) 단위이다.
- C++은 다중상속 지원. Java는 다중상속을 지원하지 않고, 인터페이스를 통해 대체 가능하다.
- C++은 컴파일 언어이며, Java는 바이트코드 언어로서 실행속도에서는 C++이 더 빠르다.
4번 문제.
Syntax analysis
파싱의 종류
Top-Down(하향식) |
Left Parse(좌파스) - 루트노드부터 시작하여 단말노드, 확장의 개념 |
Bottom-Up(상향식) |
Right Parse(우파스) - 단말노드부터 시작하여 루트노드, 축약의 개념 |
- 파스트리에서 해석에 불필요한 부분을 제외한 것이 추상 구문트리 로서, 추상 구문트리는 파스트리에 비해 기억 공간이 효율적이다.
- 추후 추가
8번 문제.
레이스 컨디션 & 데드락
경쟁조건(Race Condition) |
|
교착상태(Deadlock) |
둘 이상의 프로세스가 서로가 가진 한정된 자원을 요청하는 경우 발생하는 것 프로세스가 진전되지 못하고 모든 프로세스가 대기 상태가 된다. |
9번 문제.
l-값 r-값
10번 문제.
14번 문제.
바인딩
바인딩 |
프로그래밍시 각종 값들이 확정되어 더 이상 변경할 수 없는 구속(bind) 상태가 되는 것. |
정적 바인딩 |
컴파일 및 링크시에 확정되는 바인딩, 실행 효율이 높다. |
동적 바인딩 |
프로그램의 실행과정에서 바인딩, 융통성이 있다. |
17번 문제.
정적 영역규칙 & 동적 영역규칙
정적 영역규칙 |
1. 자신의 블록 확인 -> 2. 외부 상위 블록 확인( 대부분의 경우 main ) |
동적 영역규칙 |
1. 자신의 블록 확인 -> 2. 호출한 블록 확인 |