📍 개요
◾ JAVA의 객체지향 프로그래밍 원리와 JVM 구조에 대해 살펴보는 시간을 가졌습니다.
◾ JAVA와 JavaScript의 메모리 관리 방식을 비교하여 알아보았습니다.
1️⃣ 객체지향 프로그래밍
객체와 객체간의 상호작용 방식으로 프로그램을 개발하는 기법
📁 캡슐화 (Encapsulation)
◾ 객체의 상태와 행동을 하나로 묶고, 객체 내부의 구현 세부 사항을 숨길 수 있어
내부 구현을 변경해도 외부 코드에 영향을 미치지 않습니다.
📁 상속 (Inheritance)
◾ 기존 클래스(부모 클래스)의 속성과 메서드를 새로운 클래스(자식 클래스)가 물려받는 것
ex) 차량 클래스에서 자동차, 자전거 클래스를 상속
📁 다형성 (Polymorphism)
◾ 동일한 메서드 이름이 서로 다른 클래스에서 다르게 동작할 수 있는 특성
ex) 동물 클래스의 소리내기() 메서드가 개에서는 멍멍, 고양이에서는 야옹으로 동작
📁 추상화 (Abstraction)
◾ 복잡한 시스템을 단순화하여 사용자가 필요한 정보만 제공하는 것
ex) 차량이라는 추상적 개념을 통해 자동차, 트럭 등 다양한 구체적인 클래스가 정의 가능
2️⃣ 운영체제와 독립성
📁 JVM(Java Virtual Machine)
◾애플리케이션을 실행하기 위한 소프트웨어 기반의 가상 환경
👉 JVM 덕분에 자바 애플리케이션은 다양한 플랫폼에서 실행될 수 있습니다.
예를 들어, IntelliJ, 비주얼 스튜디오, 이클립스와 같은 개발 환경에서 자바 코드를 작성하고 실행할 수 있습니다.
📁 JAVA 동작원리
✔️ 자바 소스코드 작성
개발자가 자바 언어를 사용해 코드를 작성(.java 파일로 저장)
↓
✔️ 컴파일
자바 컴파일러가 이 소스 코드를 바이트코드라는 중간 형태로 변환(.class 파일로 저장)
↓
✔️ 실행
바이트코드는 자바 가상 머신(JVM)에서 실행 -> 실제 하드웨어에서 실행될 수 있게 해주는 소프트웨어
💬 JVM과 자바의 독립성은 어떤 연관이 있을까요?
이 과정 덕분에 자바 애플리케이션은 한 번 작성하면 여러 다른 컴퓨터에서 실행할 수 있습니다. 자바의 플랫폼 독립성은 JVM 덕분에 가능하며, 이는 자바 코드가 다양한 운영 체제와 하드웨어에서 동일하게 동작하게 합니다.
💬 애플리케이션은 프로젝트 같은 것을 의미하나요?
✔️ 애플리케이션
- 애플리케이션은 최종적으로 사용자가 이용하는 소프트웨어 또는 프로그램
ex) 브라우저, 게임, 모바일 앱 등
✔️ 프로젝트
- 애플리케이션을 개발하기 위해 관리하는 작업 집합체
- 계획, 개발, 테스트, 배포 등 소프트웨어 개발 생명 주기의 모든 단계를 포함
ex) 애플리케이션을 만들기 위한 코드, 리소스, 빌드 설정, 테스트 파일 등
✔️ 레포지토리
- 레포지토리는 소스 코드와 관련 파일들을 저장하고 버전을 관리하는 장소
ex) GitHub
3️⃣ 메모리 자동 관리(Garbage Collector)
메모리 관리의 자동화된 부분으로, 더 이상 사용되지 않는 객체를 찾아서 메모리에서 제거합니다. 이를 통해 메모리 누수를 방지하고 메모리 자원을 효율적으로 사용합니다.
📁 자바와 자바스크립트의 GC 구조 차이
✅ 자바
✔️ 메모리 관리
자바는 메모리에서 더 이상 사용되지 않는 객체를 자동으로 정리하는 여러 방법을 가지고 있습니다.
✔️ 힙 메모리
자바에서 객체는 힙 메모리라는 특별한 공간에서 생성됩니다.
이 공간은 자바 프로그램이 실행되는 동안 동적으로 관리됩니다.
자바는 힙 메모리를 Young 영역과 Old 영역 두 부분으로 나누어 관리합니다.
Young 영역은 새로 만들어진 객체들이 저장되며 Old 영역은 오랜 시간 동안 사용된 객체들이 저장이 됩니다.
✅ 자바스크립트
✔️ 메모리 관리
자바스크립트는 객체를 자동으로 정리하는 방법으로 주로 마크 앤 스윕 방식이라는 것을 사용합니다.
✔️ 마크 앤 스윕
자바스크립트는 모든 객체를 조사해서 현재 사용 중인 것들만 표시하고, 사용되지 않는 것들은 메모리에서 삭제합니다.
✔️ 순환 참조 해결
이 방식은 서로를 참조하는 객체들이 있을 때도, 메모리를 잘 정리할 수 있습니다.
📝 부트캠프 회고
1️⃣ 잘했던 점
JAVA의 특징에 대해 알고 있었던 내용이지만 누군가에게 설명하라고 하면 어려운 상태였었습니다. 이번 부트캠프를 통해 확실히 정리할 수 있는 기회를 만들게 되어 심화까진 아니더라도 기본적인 수준은 설명할 수 있게끔 공부를 하였습니다.
2️⃣ 부족했던 점
GC의 경우에는 처음 보는 용어여서 이해하기 어려운 부분이 있었습니다. 그렇기에 깊이있는 내용이 부족하다고 느껴 아래 첨부된 JVM 구조 및 GC 동작 원리와 종류에 대한 문서를 읽고 리뷰를 해보겠습니다.
3️⃣ 향후 개선 방향
오늘 부트캠프에서 배웠던 내용들이 한 번 스쳐갈 때는 괜찮았는데 심화적으로 찾아볼 수록 내용이 다소 어렵게 느껴서 이해하는데 조금 시간이 걸렸습니다. 앞으로 공부할 때 계속해서 찾아보고 리뷰하는 습관을 들여야겠다고 생각했습니다.
🧷 참고 문서
'☕ JAVA' 카테고리의 다른 글
[🥸JAVA] 자바 조건문(if, switch)과 반복문(for, while) 정리 (0) | 2024.09.04 |
---|---|
[🥸JAVA] 실무에서 자주 사용하 자바 연산자 종류(➰단항, 이항, 삼항!) (0) | 2024.09.03 |
[🥸JAVA] 자바 자동/강제 타입 변환, 문자열 숫자 변환(➰parseInt, valueOf 메서드) (2) | 2024.09.02 |
[🥸JAVA] 자바 기본 타입 변수와 참조 변수 메모리 영역 차이(➰Heap, Stack) (2) | 2024.09.02 |
[🥸JAVA] 자바 변수 선언과 데이터 타입(➰오버플로우, 리터럴 접미사) (0) | 2024.08.30 |