Fast Blinking Hello Kitty
 

[🥸JAVA]객체지향 프로그래밍과 JAVA 동작 원리 기초(➰JVM 구조)

📍 개요

◾ 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️⃣ 향후 개선 방향
오늘 부트캠프에서 배웠던 내용들이 한 번 스쳐갈 때는 괜찮았는데 심화적으로 찾아볼 수록 내용이 다소 어렵게 느껴서 이해하는데 조금 시간이 걸렸습니다. 앞으로 공부할 때 계속해서 찾아보고 리뷰하는 습관을 들여야겠다고 생각했습니다.

 

🧷 참고 문서

◾ JVM 내부 구조 & 메모리 영역 💯 총정리

가비지 컬렉션 동작 원리 & GC 종류 💯 총정리

 

728x90
320x100