[자바] 1.자바(JAVA)란?

[자바] 1.자바(JAVA)란?

목차

자바(JAVA)는 운영체제에 독립적이고 객체지향 개념이 잘 적용된 프로그래밍 언어다. 이 글에서는 자바의 정석 기초편을 바탕으로 자바란 무엇인지, 그리고 자바를 대표하는 7가지 특징을 정리한다. 자바를 처음 배우거나 복습하는 사람이 핵심 개념을 빠르게 잡는 데 도움이 되도록 구성했다.

이 글은 [자바] 기초 시리즈의 1편이다. 자바란 무엇인지 살펴본 뒤 2편 변수, 3편 연산자, 4편 조건문과 반복문 순서로 이어진다.

자바란 무엇인가

자바는 썬 마이크로시스템즈에서 개발하여 1996년 1월에 공식적으로 발표한 객체지향 프로그래밍 언어다. 발표 이후 인터넷의 발전과 함께 폭넓은 사용자층을 확보했으며, 오늘날까지 서버 개발과 안드로이드 앱 개발 등에서 널리 쓰인다. 아래에서 자바의 대표적인 특징을 하나씩 살펴본다.

1. 운영체제에 독립적이다

자바는 운영체제(OS)에 독립적이다. 자바로 작성된 프로그램은 운영체제의 종류에 관계없이 실행이 가능하고, 운영체제에 따라 프로그램을 전혀 변경하지 않고도 실행할 수 있다. 이러한 장점 덕분에 인터넷의 발전과 함께 많은 사용자층을 확보할 수 있었다.

이것은 일종의 에뮬레이터인 자바가상머신(JVM)을 통해서 가능하다. 자바 응용프로그램은 운영체제나 하드웨어가 아닌 JVM하고만 통신하고, JVM이 자바 응용프로그램으로부터 전달받은 명령을 해당 운영체제가 이해할 수 있도록 변환하여 전달한다.

자바로 작성된 프로그램은 운영체제에 독립적이지만 JVM은 운영체제에 종속적이다. 그래서 썬(회사)에서는 여러 운영체제에 설치할 수 있는 서로 다른 버전의 JVM을 제공한다.

2. 객체지향 언어이다

자바는 프로그래밍의 대세로 자리 잡은 객체지향 프로그래밍 언어 중 하나로, 객체지향 개념의 특징인 추상화, 상속, 캡슐화, 다형성이 잘 적용된 순수한 객체지향 언어라는 평가를 받는다.

3. 비교적 배우기 쉽다

자바의 연산자와 기본 구문은 C++에서, 객체지향 관련 구문은 스몰톡이라는 객체지향 언어에서 가져왔다.

간결하고 이해하기 쉬운 코드를 작성할 수 있도록 했고, 객체지향 언어의 특징인 재사용성과 유지보수의 용이성을 장점으로 가지면서도 객체지향 개념을 보다 쉽게 이해하고 활용할 수 있도록 하여 객체지향 프로그래밍의 저변 확대에 크게 기여했다.

4. 자동 메모리 관리(Garbage Collection, GC)를 지원한다

자바로 작성된 프로그램이 실행되면 GC가 자동으로 메모리를 관리해 주기 때문에 개발자가 메모리를 따로 관리하지 않아도 된다.

GC가 없다면 프로그래머가 사용하지 않는 메모리를 직접 체크하고 반환하는 일을 수동으로 처리해야 한다. 자동 메모리 관리가 다소 비효율적인 면도 있지만, 프로그래머가 프로그래밍 자체에 더 집중할 수 있도록 도와준다.

5. 네트워크와 분산 처리를 지원한다

인터넷과 대규모 분산 환경을 염두에 둔 까닭에, 풍부하고 다양한 네트워크 프로그래밍 라이브러리를 통해 비교적 짧은 시간에 네트워크 관련 프로그램을 쉽게 개발할 수 있다.

6. 멀티스레드를 지원한다

자바에서 개발되는 멀티스레드 프로그램은 시스템과 상관없이 구현할 수 있으며, 관련 라이브러리가 제공되므로 구현이 쉽다. 여러 스레드에 대한 스케줄링은 자바 인터프리터가 담당한다.

7. 동적 로딩을 지원한다

보통 자바로 작성된 애플리케이션은 여러 개의 클래스로 구성되어 있다. 자바는 동적 로딩을 지원하기 때문에 실행 시점에 모든 클래스를 한꺼번에 로딩하지 않고, 필요한 시점에 클래스를 로딩하여 사용할 수 있다.

그 덕분에 일부 클래스가 변경되어도 전체 애플리케이션을 다시 컴파일하지 않아도 되며, 변경 사항이 발생해도 비교적 적은 작업만으로 처리할 수 있는 유연한 애플리케이션을 작성할 수 있다.

정리

지금까지 살펴본 자바의 특징을 정리하면 다음과 같다.

  • 운영체제 독립성: JVM을 통해 OS에 관계없이 실행.
  • 객체지향: 추상화·상속·캡슐화·다형성을 지원.
  • 쉬운 학습: C++·스몰톡 기반의 간결한 문법.
  • 자동 메모리 관리: GC가 메모리를 자동 회수.
  • 네트워크·분산 처리: 풍부한 네트워크 라이브러리 제공.
  • 멀티스레드: 시스템 독립적인 스레드 구현.
  • 동적 로딩: 필요한 시점에 클래스를 로딩.

객체지향, JVM, GC, 객체지향의 특징, 스레드, 동적·정적 로딩 같은 키워드는 그림이 포함된 자료로 함께 찾아보면 이해가 더 쉽다. 자바 개발 도구(JDK)와 이클립스는 직접 설치한 뒤 실습을 진행하면 된다.

다음 글은 [자바] 2. 변수에서 변수와 상수, 리터럴, 기본형의 종류와 범위를 다룬다.

💬 댓글 3

💬 댓글을 남기려면?
여겸 김
김여겸 멘토 2024.07.15
기본 내용의 핵심을 잘 써주었네요. 편의 보고 쉽게 알 수 있도록 작성해주셔서 감사합니다. 개발을 JAVA로 시작하는 많은 분들이 참고하기 좋은 글인 거 같네요.
원빈 이
이원빈 멘티 2024.07.26
예비군 다녀와서 지금봤네요. 좋은 말씀 해주셔서 감사합니다!
여겸 김
김여겸 멘토 2024.07.31
별말씀을요. 지금처럼 꾸준히 활동해주시는 것만으로도 고맙게 생각하고 있습니다. 최대한 좋은 피드백을 주기 위해서 저도 노력할게요.

이 콘텐츠가 도움이 됐나요?

누스쿨 커뮤니티에서 더 많은 커리어 전략을 나눠요