Java 기초 개념 : OOP와 JVM을 중심으로

개발자 구보씨의 일일·2024년 2월 11일

Java 공부

목록 보기
3/4
post-thumbnail

들어가며

자바(Java)란 프로그래밍 언어로서, 1990년대 복잡해진 소프트웨어 개발에 대응하기 위해 C, C++ 등 기존의 프로그래밍 언어를 보완하여 만들어졌다. 자바는 소프트웨어 개발, 유지보수에 유용할 뿐만 아니라 여러 장점 덕분에 지금까지 세계에서 가장 많이 쓰이는 언어 중 하나이다.

이번 포스팅에서는 자바의 주요 특징과 자바로 대표되는 객체지향 언어에 대해 알아보고자 한다.

사족으로, 자바를 왜 자바라고 부를까? 자바는 인도네시아 자바 섬의 자바 커피를 따와 이름 붙여졌다. 어디서든 마실 수 있는 커피처럼 어디서든 쓸 수 있다는 것이 자바 언어의 주요 특징이기 때문이다.

"프로그래머가 자바(JAVA) 커피를 많이 마시기 때문에 이름이 완벽하다"

- 짐 왈도(Jim Waldo), 프로그래밍 언어 Java를 출시한 오라클(Oracle) 수석연구원

출처 : "자바(JAVA), 커피와 프로그래밍언어의 흥미로운 평행이론" (https://www.cwn.kr)

자바의 대표적인 특징

1. 운영체제에 독립적으로 동작

*자바가상머신(JVM, Java Virtual Machine)을 통해 JVM이 설치되어 있는 OS에서는 모두 자바로 작성된 프로그램이 실행 가능하다.

그래서 자바 언어를 Write once, run anywhere (한 번 작성하면, 어디서나 실행된다.)로 표현하기도 한다.

* 자바로 작성된 프로그램을 실행 할 수 있는 가상의 컴퓨터이다.

JVM이란?

JVM의 경우는 기존의 하드웨어로 구성된 컴퓨터를 소프트웨어적으로 구현한 것이다. 이름 그대로, Java 프로그램을 실행할 수 있도록 가상의 기기를 만드는 것이다. 자바로 작성된 프로그램은 모두 이 JVM을 통해 실행되므로 자바 프로그램을 실행하기 위해서는 JVM이 설치되어 있어야 한다.

JVM의 구성요소

인터프리터

Java .class 코드 해석기
ㄴ 운영체제가 읽은 바이트 코드를 기기(기계)가 실행할 수 있는 기계어로 번역

JIT 컴파일러

빠른 Java .class 코드 해석기
ㄴ 인터프리터의 효율을 높여주는 서포터 해석기

메모리 영역

Java 데이터를 저장하는 영역
ㄴ 운영체제로 부터 JVM이 할당받은 메모리 영역

클래스 로더

Java .class 바이트 코드를 메모리 영역에 담는 운반기
ㄴJVM으로 class(바이트 코드)를 불러와서 메모리에 저장함

가비지 콜렉터

Java 쓰레기 청소기
ㄴ메모리 영역에서 안쓰는 데이터를 주기적으로 흡수해가는 청소기

출처 : 스파르타코딩클럽 자바 문법 종합반(https://spartacodingclub.kr/online/java)

2. 객체지향언어 (OOP, Object - Oriented Programming language)

자바는 객체지향개념의 특징인 상속, 캡슐화, 다형성이 잘 적용된 순수한 객체지향언어이다. 자바는 이러한 객체지향 특징 덕분에 소프트웨어 유지 보수에 용이하다.

3. 가비지컬렉터 (GC, Garbage Collector)를 통한 자동 메모리 관리

C와 같은 다른 프로그래밍 언어와는 달리, 자바는 가비지 컬렉터(GC)가 자동으로 메모리를 관리하여 참조되고 있지 않은 메모리를 해제해준다.

이러한 특징으로 인해 프로그래머는 메모리 관리에 신경 쓸 필요 없이 오직 프로그래밍에만 집중 할 수 있다.

4. 네트워크, 분산처리의 지원

다양한 Java API 라이브러리들은 네트워크 및 분산처리와 관련된 기능을 쉽게 개발할 수 있도록 지원한다.

이러한 특징으로 인해 자바 언어는 대규모 분산처리 환경 등의 프로그래밍에 적합하다.

5. 멀티쓰레드의 지원

자바의 멀티쓰레드는 시스템과 관계없이 구현이 가능하며, Java API를 통해 쉽게 구현할 수 있다.

6. 동적 로딩(Dynamic Loading)의 지원

자바는 동적 로딩을 지원함으로써 프로그램 실행 시 모든 클래스가 로딩되지 않고 필요한 시점에 필요한 클래스만을 로딩하여 사용할 수 있다.

출처 : <자바의 정석>, 남궁성

OOP(Object-oriented programming)

속성(Attribute)와 행위(behave)를 가진 객체를 조합하여 프로그램을 구성하는 방법. 프로그램은 객체와 객체간의 상호작용을 통해 동작한다.

객체지향언어는 코드 간에 서로 관계를 맺어줌으로써 보다 유기적으로 프로그램을 구성하는 것을 가능하게 해준다.

출처 : <자바의 정석>, 남궁성

자바의 객체지향적개념은 아래와 같은 특징이 있다.

캡슐화

  • 데이터와 코드의 형태를 외부로부터 알 수 없게 하고, 데이터의 구조와 역할, 기능을 하나의 캡슐 형태로 만드는 방법

추상화

  • 클래스들의 공통적인 특성(변수, 메소드)들을 묶어 표현하는 것

상속화

  • 부모 클래스에 정의된 변수 및 메서드를 자식 클래스에서 상속받아 사용하는 것

다형화

  • 다양한 형태로 표현이 가능한 구조를 말한다.

회고

본 포스팅을 작성하는 과정에서 큰 그림을 볼 수 있어서 자바를 이해하는 데에 도움이 되었다. 다음에는 <객체지향의 사실과 오해>를 읽고 정리해보자.

profile
한 발 한 발 내딛는 거북이걸음

0개의 댓글