1장 사람을 사랑한 기술
- C언어 : One Source Multi Object Use Anywhere
- One Source : 하나의 C 소스 파일만 작성
- Multi Object : 기종마다 하나씩 기계어 목적 파일을 생성
- Use Anywhere : 모든 컴퓨터에서 실행 가능
- 구조적 프로그래밍
즉, 운영체제가 하드웨어의 특성을 추상화하고 컴파일러는 운영체제별(기종에 맞게 소스를 변경) 로 만들어져 공급
-> 운영체제별 소스 수정 과정이 필요
- Java : Write Once Use Anywhere
- Write Once : One Source
- (One Object)
- Use Anywhere
자바는 JVM(Java Virtual Machine), 즉 가상의 컴퓨터를 물리적 컴퓨터의 메모리 안에 하나 더 구축하여 어떤 운영체제든 하나의 오브젝트 파일만 존재하게 됨
- CBD와 SOA
- CBD : Component Based Development, 컴포넌트 기반 개발
- 애플리케이션을 의미 있는 단위로 구분하고 그 단위들을 결합해 제품을 만듬
- SOA : Service Oriented Architecture, 서비스 중심 구조
- 개발자 입장에서의 개발이 아니라 실제 현실의 업무를 기준으로 개발하자는 사상
- CBD : Component Based Development, 컴포넌트 기반 개발
2장 자바와 절차적 / 구조적 프로그래밍
- JDK - 자바 개발 도구 (JVM용 소프트웨어 개발 도구)
- JRE - 자바 실행 환경 (JVM용 OS)
- JVM - 자바 가상 기계 (가상의 컴퓨터)
JVM > JRE > JDK
- 구조적(절차적) 프로그래밍과 객체지향 프로그래밍의 차이
- 구조적 프로그래밍
- "함수" 중심
- 중복 코드를 한 곳에 모아서 관리
- 논리를 함수 단위로 분리하여 이해하기 쉬운 코드 작성
- 분할 정복 개념
- 객체지향 프로그래밍
- "객체(Object)" 중심
- 객체 : 데이터(속성, 필드)와 그 데이터를 처리하는 메서드(함수)를 함께 포함하는 독립적인 단위
- 문제를 여러 객체로 나누어 해결하며, 객체들 간의 상호작용을 통해 프로그램이 동작
- 구조적 프로그래밍
** 함수 vs 메서드
사실 같은 용어지만, 구조적 프로그래밍에서 사용하는 '함수'라는 개념은 클래스나 객체와 아무 관계가 없지만 객체지향에서 사용하는 '메서드'의 개념은 반드시 클래스 정의 내부에 존재해야 함
- 자바 메모리 구조
- static 영역 - '클래스들의 놀이터'
- 프로그램이 실행되면서 필요로 하는 메타데이터를 저장하는 곳
- JVM이 실행되면서 생기는 공간
- Class 정보, 전역변수 정보, Static 변수 정보가 저장되는 공간
- 전역 변수를 사용하면 클래스 정보 내부에 변수 공간 할당
- Q. 정적 속성에 대한 추가 설명
-
더보기정적 속성 : 해당 클래스의 모든 객체가 같은 값을 가질 때 사용
- 정적 메서드 : 객체 존재 여부에 관계없이 사용. 객체(힙)가 아닌 클래스(스태틱 영역)에 속함
주로 유틸리티성 메서드를 정적으로 구현
- Runtime Constant Pool - '상수'정보가 저장되는 공간
- 모든 스레드에서 정보가 공유됨
- 클래스 언로드 : 특정 클래스가 더 이상 사용되지 않거나, 해당 클래스의 인스턴스가 존재하지 않으며 GC의 대상이 되었을때 발생 (주로 종료될때까지 메모리에 유지)
- stack 영역 - '메서드들의 놀이터'
- 스택 프레임으로 관리 (한 메서드 당 하나의 스택 프레임)
- 스택 프레임 내에서도 여는 중괄호를 만날 때마다 스택 프레임이 하나씩 생김 (클래스 정의 부분 제외)
- 외부 스택 프레임에서 내부 스택 프레임의 변수에 접근하는 것은 불가능하나 그 역은 가능함
- Q. 스택 프레임 내부에 스택 프레임 생성 가능?
-
더보기A. if문을 만나게 되면 메서드 스택 프레임 내에 if문 스택 프레임 생성
-> 닫는 중괄호를 만나면 if블록 스택 프레임은 영역에서 사라지고, 스택 프레임 내의 지역 변수에 값이 할당됨
- 스택 프레임끼리는 서로 접근하지 못함
- 반환값에 의해서만 메서드 사이에서 값이 전달될 뿐 서로 내부의 지역 변수를 볼 수 없음
- 메서드는 고유의 공간
- 포인터가 없음 -> 호출하는 메서드 내부의 지역 변수를 호출 당하는 쪽에서 제어하려면 포인터 개념이 필요
- 지역변수, 메서드의 매개변수와 같이 잠시 사용되고 없어지는 데이터가 저장되는 공간
- LIFO 구조
- 지역변수이지만 참조형이라면 Heap에 저장된 데이터의 주소값을 Stack에 저장
- 스레드마다 하나씩 존재
- 스택 프레임으로 관리 (한 메서드 당 하나의 스택 프레임)
- heap 영역 - '객체의 놀이터'
- new 예약어로 생성된 객체 (Reference Type) 멤버 변수 및 배열이 저장되는 공간
- GC가 처리하지 않는 한 소멸되지 않음
- GC에 의해 자동으로 이루어짐
- 모든 스레드에서 정보가 공유됨
- 멀티 스레드 vs 멀티 프로세스
- 멀티 프로세스 : 다수의 T 메모리를 갖음
- 멀티 스레드 : 스택 영역을 스레드 개수만큼 분할해서 사용 (힙영역, 스태틱 영역은 공유)
![]() |
![]() |
'BOOK Review' 카테고리의 다른 글
[스프링입문을위한 자바 객체지향의 원리와 이해] 6장 ~ 7장 스프링 (4) | 2024.09.14 |
---|---|
[스프링입문을위한 자바 객체지향의 원리와 이해] 3장 ~ 5장 객체 지향 (0) | 2024.09.11 |
[클린코드] Final Review (0) | 2024.07.11 |
[클린코드] TIL - 10장 클래스 (0) | 2024.07.08 |
[클린코드] TIL - 9장 단위 테스트 (1) | 2024.07.05 |