자바(JAVA)의 5가지 특징 - OOP, GC, 범용성, 멀티 스레드, 동적로딩
오늘은 자바 언어의 특징을 알아보도록 하겠습니다. 자바 언어가 세상에 나온 지 오랜 시간이 지나가고 있습니다. 긴 시간이 지나면서 기존에 자바만이 가지고 있던 특징들 중 일부는 새로운 언어들도 가지고 있는 경우가 생겼습니다. 따라서 이번의 자바 특징들은 다른 언어들도 가지고 있는 특징들임을 인지하고 본 포스팅을 살펴봐주셨으면 좋겠습니다.
객체 지향 (Object Oriented)
자바 언어는 객체지향 언어로 불리는 가장 대표적인 프로그래밍 언어입니다. 객체 지향 언어(Object Oriented Programming)란 부품(객체)을 조립하여 만드는 프로그래밍 언어를 의미하는데요.
객체지향 언어를 예를 들어보면, 객체라는 이름의 퍼즐 또는 부품들을 만들고 이를 조립함으로써 1개의 단일 시스템을 만드는 방법을 의미하는 것으로 이해하면 좋을 거라 생각됩니다. 이처럼 자바 언어는 여러 개의 객체들이 서로 유기적으로 연결되면서 프로그램이 동작하는 것이 특징입니다.
메모리 관리(Garbage Collector)
일부 프로그래밍 언어들의 경우 개발자가 객체를 만들고 사용하면 사용한 객체를 반납해주는 작업을 진행해야 합니다. 만약 개발자가 사용한 객체를 반납하는 로직을 작성하지 않게 되면 사용한 객체는 메모리 영역을 계속 차지하게 되고 이러한 사이클이 계속 반복하게 되면 프로그램이 다운되는 현상이 발생할 수 있게 되는데요. 자바는 이러한 메모리 사용에 관한 이슈를 자동으로 처리할 수 있습니다.
자바는 개발자가 사용한 객체들을 Garbage Collector가 주기적으로 체크함으로써 사용이 종료된 객체들을 자동으로 메모리 할당을 제거함으로써 시스템의 안정성을 높여주는 특징을 가지고 있고, 개발자의 자원사용 및 반납에 대한 부담 없이 오로지 개발에만 집중할 수 있는 환경을 제공해주고 있습니다.
범용성 (Versatility)
자바 언어로 개발된 프로그램은 자바 실행 환경(JRE : Java Runtime Environment)만 설치되어 있다면 다양한 실행 환경, 다양한 운영체제에서 동일한 소스코드로 실행할 수 있는 높은 수준의 범용성을 가지고 있습니다.
요즘은 많은 언어들도 이러한 범용성 부분을 지원하고 있지만 여전히 자바는 범용성에 관한 부분에서는 전혀 뒤지지 않는 강력한 특징을 가지고 있습니다. 예를 들면 스마트폰이 세상에 나오기도 전에 개발된 자바 언어를 가지고 안드로이드 개발을 진행할 수 있다는 점만 봐도 자바 언어가 얼마나 범용성이 높은 언어인지 알 수 있습니다. (자바 언어를 기반으로 만들어진 안드로이드 언어는 이후 자바 언어를 기반으로 만들어진 코틀린 언어를 공식 언어로 채택하고 있습니다.)
어떤 운영체제에서도 단 1개의 자바 소스코드만 작성하면 프로그램 운영에 지장이 없고, 어떤 실행환경(모바일, 웹 등)에서도 단 1개의 자바 소스코드만 작성하면 된다는 점이야 말로 여전히 많은 개발자들이 자바 언어를 사랑하는 이유이지 않을까 싶습니다.
멀티 스레드 (Multi Thread)
스레드란 프로세스내에서 실행되는 흐름의 단위를 뜻합니다. 예를 들어 우리가 게시판에 글을 작성하고 저장을 한다고 가정해 보겠습니다. 이때의 1개의 스레드는 저장버튼을 클릭하고 저장이 완료될 때까지를 의미합니다. 지금의 예시는 어디까지나 1명의 사용자가 저장행위를 사용하는 것을 예로 들었습니다. 그러나 만약 이러한 저장행위를 100명이 해야 한다면 어떻게 될까요? 그것도 동시에 한다면 스레드는 총 100개가 필요하게 될 것입니다. 이와 같이 대량의 스레드를 처리할 때 프로그래멍 언어가 스레드를 어떻게 처리해 주느냐에 따라 성능의 차이는 달라질 수 있습니다.
프로그램이 100개의 스레드를 처리해야 할 경우, 1번 스레드를 처리하고 처리가 완료되면 2번 스레드를 처리하고, 이 과정을 100번대 스레드까지 처리하게 되면 100번대 스레드 사용자는 처리가 완료될때까지 오랜 시간을 기다려야 할 것입니다.
자바는 이러한 문제점을 Multi Thread방식을 통해 해결해주고 있는데요. 자바는 대량의 스레드 요청이 들어오면 필요한 스레드를 자동으로 만들어줘서 동시에 여러 스레드를 처리해 줄 수 있는 기능을 제공함으로써 대량 작업을 처리하기에 적합한 언어적 특징을 가집니다.
동적 로딩 (Dynamic Loading)
자바는 객체 지향 언어입니다. 즉, 소스코드는 객체로 서로 연결되어 있고, 프로그램이 실행되면 연결된 객체들이 메모리에 올라가서 시스템을 동작시키게 됩니다. 시스템이 로딩되면 객체들이 메모리에 올라가서 사용되는 부분은 당연한 이야기지만, 만약 불필요한 객체들이 시스템에 계속 로딩된 상태를 유지한다면 그만큼의 자원의 낭비가 발생될 수 있는데요.
자바언어는 프로그램 실행과정에서 해당 클래스가 필요한 시점에 클래스를 동적으로 로딩하여 객체를 생성하는 방식으로 프로그램이 동작하게 됨으로써 자원을 효율적으로 사용할 수 있도록 돕고 있습니다.
마무리
지금까지 자바의 특징에 관하여 살펴보았습니다. 자바 언어는 개발자가 오로지 개발에만 집중할 수 있도록 도와주는 잘 만들어진 언어입니다. 또한 단 하나의 프로그램만 만들면 다양한 플랫폼에서 동작할 수 있기 때문에 소스의 재활용률 또한 높은 언어라고 생각합니다. 부족하지만 긴 글을 읽어주셔셔 감사드립니다.
'IT > JAVA' 카테고리의 다른 글
[JAVA] 06. 자바(JAVA) JDK 설치 - Open JDK 설치 (Temurin JDK) (1) | 2023.02.24 |
---|---|
[JAVA] 05. Oracle JDK 설치 (3) | 2023.02.22 |
[JAVA] 04. 자바(JAVA) 용어 정리 - JVM, JRE, JDK (0) | 2023.02.20 |
[JAVA] 02. 자바의 유료화 (1) | 2023.02.06 |
[JAVA] 01. 자바란 (1) | 2023.01.27 |