*프로그램 :
나열된 명령들의 집합.
*프로그래밍 :
사람이 컴퓨터에게 명령하여 컴퓨터가 실행하는 과정
*프로그래밍 언어 :
사람이 컴퓨터에게 명령할 때 사용하는 언어. 사람 친화적 언어로, 컴퓨터가 바로 이해할 수는 없다.
C, python, java 등이 존재.
*기계어 :
컴퓨터가 이해할 수 있는 언어, 0과 1 이진수로 이뤄진 언어
기계는 전류가 통해야 작동하므로 -> 전류가 통한다: 1 /전류가 통하지 않는다: 0로 나타낸다.
*컴파일:
프로그래밍 언어-> 기계어로 번역
*라이브러리:
개발자가 자주 사용하는 기능들을 미리 만들어 모아놓은 것. 코드 작성시 필요한 라이브러리에서 필요한 기능들을 불러온다. 이때 불러오기 위해 연결하는 과정을 링크라고 한다.
*디버깅:
debug(벌레를 꺼내다)+ - ing
-> 프로그램의 오류를 잡는다는 의미.
*프로그래밍 과정(프로그램 실행 과정):
일반 프로그램 실행 과정(ex.C언어) | java 프로그램 실행 과정※ | |
1 코드작성(사람 친화적 언어, 컴퓨터 이해 불가) | .c 파일 생성 | .java 파일 생성※ |
2 컴파일(컴퓨터가 이해할 수 있는 파일 생성) | .obj 파일 생성 | .class 파일 생성 ※ |
3 링크(컴퓨터가 실행할 수 있는 파일) | .exe 파일 생성 | ※ |
4 디버깅 | ※ | |
5 실행 | ※ |
(.xxx에서 xxx는 확장자로, 어떤 프로그램으로 생성했는지, 어떤 프로그램으로 실행할 수 있는지를 나타낸다.)
※ java에서는 .exe가 없지만 JVM을 통해 컴퓨터가 파일을 실행할 수 있다. (일반 프로그램은 .exe 파일을 실행하는데 반해, java 프로그램은 jvm을 통해 .class를 이용해 실행한다.)
*JVM(Java Virtual Machine)
java의 중간 코드를 실행할 수 있는 주체로, java 프로그램과 os(운영체제) 사이의 중개자 역할을 한다.
jvm을 통해 os에 종속되지 않고 사용할 수 있도록 도와준다.
일반 프로그램의 실행 주체는 os이지만(그래서 리눅스 운영체제인지 윈도우 운영체제인지에 따라 실행이 안되는 파일 존재) java 프로그램의 실행 주체는 jvm이다. 그래서 java는 어떤 운영체제이든지 상관없다.
*java 프로그램의 실행 과정
java source(.java)를 컴퓨터가 이해할 수 있는 byte code(.class)로 변환하여 jvm을 통해 실행한다.
*JVM의 구성
- ClassLoader: 모든 클래스(코드)는 참조 순간에 동적으로 JVM에 연결되며 메모리에 로딩
- Execution Engine: JVM은 Method Area의 Byte Code를 Execution Engine에 제공하여 "Class에 정의된 내용대로 실행"
- Runtime Data Areas: 프로그램을 수행하기 위한 OS에서 할당받은 메모리 공간
(os를 사용하는 메모리 공간과 jvm을 사용하는 메모리 공간 2 종류가 있는데, 둘 중 후자에 속한다.)
*메모리 공간(Runtime Data Areas)의 구성
- Class 영역: .class 파일이 기억되는 공간. 사용하는 클래스 파일의 바이트 코드가 로드되는 곳으로 static 변수, 전역변수 등의 정보가 저장되며, JVM이 종료될 때까지 유지되는 메모리 공간
- Stack 영역: 지역변수,매개변수 등 함수의 호출부터 종료까지 유지. 프로그램의 각 기능의 실행에서 종료까지만 존재하는 공간
- Heap 영역: 참조형 변수(주소저장) 들이 저장되는 영역(new). 동적으로 할당받을 때 필요한 영역
*JAVA :
미국의 Sun Microsystems사에서 개발한 객체지향 프로그래밍 언어
*JAVA의 특징
1. 객체 지향 언어이다.
2. 배우기 쉽다(java 이전에 나온 프로그래밍 언어와 비교해서)
3. 어느 운영체제(OS)에 상관없이 실행된다.(jvm 덕분에)
4. 메모리 관리를 개발자가 하지 않는다.(메모리 관리 권한이 개발자에게 없다. -> garbage collection을 지원한다.)
5. 동적이며 스레드를 지원한다.(스레드 : 각 프로그램을 쪼개는 단위. ->프로그램 하나에서 하나의 작업만 수행하지 않고 여러개의 스레드로 나누어 다중 작업을 할 수 있다.)
6. 네트워크 프로그래밍과 분산처리를 지원한다
'개발자 김모립 > JAVA' 카테고리의 다른 글
[소프트웨어공학] 이클립스 시작~! (0) | 2023.09.26 |
---|---|
[소프트웨어공학] jdk(8u381), 이클립스(for RCP and RAP Developers) 설치 (0) | 2023.09.26 |
JAVA(2) | 개발환경 준비 #JDK #eclipse 설치 (1) | 2023.03.27 |