자바 & 절차적/구조적 프로그래밍
자바 프로그램 구성
- JDK(Java Development Kit)
- JVM용 소프트웨어 개발 도구
- 자바 컴파일러(javac.exe)포함
- JRE(Java Runtime Environment)
- JVM용 OS
- 자바 프로그램 실행기(java.exe)포함
- JVM(Java Virtual Machine)
- 가상 컴퓨터
- 포함관계: JVM < JRE < JDK
- Write once Run Anywhere 특성을 지님
절차적/구조적 프로그래밍과 자바
- 객체 지향 프로그래밍도 절차적/구조적 프로그래밍을 기반으로 만들어졌다.
- 절차적 프로그래밍(PP)
- 프로그램 전체가 유기적으로 연결되도록 만드는 프로그래밍 기법
- 프로그램의 흐름 파악 용이
- 각 코드의 유기성이 높아 유지보수 어렵다
- goto문을 사용하지 마라!
- 자바에서는 goto문 사용을 금지하기 위해 예약어로 선점해놨다.
- 구조적 프로그래밍
- 함수를 사용해라!
- 중복코드 관리 용이
- 논리를 함수 단위로 분리해서 이해하기 쉬움
- 전역 변수보다는 지역 변수를 사용!
- 자바에서는 함수 = 메서드(클래스 안에만 존재)
- 객체지향에서는 클래스 외부에 존재할 수 있는 것은 없다.
프로그램의 메모리 사용 방식
- 코드 실행영역과 데이터 저장 영역으로 나눠진다.
- 데이터 저장 영역은 Static영역, Stack영역, Heap영역으로 나눠진다.
- Static 영역
- 작성한 Class 및 import package들이 속한다.
- java.lang 패키지는 반드시 포함
- 클래스 멤버 변수는 JVM이 종료시 소멸
- 전역 변수(공유 변수) 공간 할당, 전역 변수를 통해 메서드 사이에 값을 주고 받을 수 있지만 사용하지 마라! 읽기 전용으로 전역 상수로 사용
- Stack 영역
- 메서드들이 속한다.
- 여는 중괄호 '{'를 만날 때마다 스택 프레임 생성
닫는 중괄호 '}'로 스택 프레임 소멸 - 스택 프레임의 맨 밑에 반환 값을 저장할 변수 공간 할당
그 위에 메서드 인자의 변수 공간 할당
그 위에 지역 변수 공간 할당 - 지역 변수는 스택 프레임이 소멸시 같이 소멸
- 지역 변수는 별도의 초기화가 없으면 쓰레기 값을 갖게된다.
- if 블록 스택 프레임도 존재
- 외부 스택 프레임에서 내부 스택 프레임 변수에 접근하는 것은 불가능
그 역은 가능하다. - 두 메서드 사이에서 값을 주고 받는 방법은 메서드 인자와 반환 값으로만 가능(Call By Value)
- 자바에서 main() 메서드가 끝나는 것은 프로그램 종료를 의미
= JRE 종료 & 메모리상에서 JVM이 사라짐 - Heap 영역
- 객체들이 속한다.
- 객체 멤버 변수는 객체와 함께 가비지 컬렉터에 의해 소멸
멀티 스레드/멀티 프로세스
- 멀티 스레드
- 스택 영역을 스레드 개수만큼 분할해서 사용
- 스택 영역에는 접근할 수 없지만 스태틱과 힙 영역은 공유
그래서 멀티 프로세스 대비 메모리를 적게 사용 - 전역 변수 사용시 스레드 안정성이 깨짐
- 멀티 프로세스
- 다수의 데이터 저장 영역을 갖는 구조
- 서로 참조할 수 없는 구조
- 메모리 영역을 침범할 수 없어 안전한 대신 메모리 사용량이 크다.
출처: 김종민, ⌜스프링 입문을 위한 자바 객체 지향의 원리와 이해⌟ 위키북스
Leave a comment