개발일지

JAVA 언어 특징 본문

JAVA

JAVA 언어 특징

강강강 2021. 11. 22. 11:32

자바를 사용하면서 과연 잘 사용하고 있는 건가..? 자바에 대해 잘 알고있나..? 생각해보았다. 

나의 주 언어가 뭐냐고 물어본다면 자바라고 할 것같은데 뭔가 가슴 한쪽이 찔리는 느낌. 

그래서 기본!!!기초!!!! 자바의 특징부터 다시 공부해보자. 이미 알고있는 것일 수도 있으나 한번의 정리는 필요해 보인다. 

 

1. 자바는 이식성이 높은 언어다.

이식성이란 -> 서로 다른 실행 환경을 가진 시스템 간에 프로그램을 옮겨 실행할 수 있는 것을 말한다. 

예를 들어 MS윈도우에서 실행하는 프로그램을 리눅스에서 실행할 수 있다면 이식성이 높은 것이고 실행할 수 없다면 이식성이 낮은 것이다. MS 윈도우 환경에서 실행되는 대부분의 프로그램들은 MS 윈도우 환경에 최적화되어있기 때문에 유닉스나 리눅스에서 실행하려면 프로그램 소스 파일을 수정 후 재컴파일과정을 거쳐야 한다. 세상 복잡해. .

근디.. 자바는!! 프로그램 소스 코드를 다시 수정하지 않아도 자바실행환경(JRE; Java Runtime Environment)이 설치되어있는 모든 운영체제에서 실행 가능하다. 그러니까 이식성이 높은 언어라고 하는 것!!

 

2. 객체지향 언어다.

프로그램을 개발하는 기법으로 부품에 해당하는 객체들을 먼저 만들고, 이것들을 하나씩 조립, 연결해서 전체 프로그램을 완성하는 기법을 객체 지향 프로그래밍(OOP; Object Oriented Programming)이라고 한다.  이때 사용하는 언어가 객체지향언어인것!

 

객체를 만들기 위해서 설계도인 클래스를 작성해야 하고 객체와 객체를 연결하여 목적에 맞는 프로그램을 만드는 것이다.

자바는 아주 작은 프로그램이라도 객체를 만들어 사용한다. 

 

객체지향에 대해서는 더 깊게 알아가면 좋기때문에 따로 포스팅할 예정!!

 

3. 메모리를 자동으로 관리한다.

C++는 메모리에 생성된 객체를 제거하기 위해 개발자가 직접 코드를 작성해야 함. 만약 이 작업 까먹게되면 프로그램 불안전해진다..

자바는! 사용자가 직접 메모리에 접근할 수 없게 설계되어있고 메모리는 자바에서 직접 관리한당@@ 얼마나 좋은가..

객체 생성시 자동적으로 메모리 영역을 찾아서 할당하고 사용이 완료되면 GC;Garbage Collector 를 실행시켜 사용하지 않는 객체를 제거해준다. 

 

4. 멀티 스레드를 쉽게 구현할 수 있다.

하나의 프로그램이 동시에 여러 가지 작업을 처리해야 하는 경우와 대용량의 작업을 빨리 처리하기 위해 서브 작업으로 분리해서 병렬처리하려면 멀티스레드 프로그래밍이 필요하다.!!!

자바는 스레드 생성 및 제어와 관련된 라이브러리 API 를 제공하고 있기 때문에 실행되는 운영체제에 상관없이 멀티스레드를 쉽게 구현할 수 있으!

 

5. 동적로딩을 지원한다.

자바 애플리케이션은 여러 개의 객체가 서로 연결되어 실행하는데 이 객체들은 클래스로부터 생성된다.

애플리케이션이 실행될 때 모든 객체가 생성되지 않고 객체가 필요한 시점에 클래스를 동적 로딩해서 객체를 생성한다.

또 개발 후 유지보수할 때 필요한 클래스만 수정하면되므로 전체 애플리케이션을 다시 컴파일 할 필요가 없다. 그래서 유지보수가 쉽다는 것임!!

 

6. 오픈소스 라이브러리가 많아..

자바는 오픈소스 언어이기때문에 자바 프로그램에서 사용하는 라이브러리 넘쳐난다!!

고급 기능을 구현하는 코드를 구현할 경우 많은 시간과 노력이 필요하고 실행 안정성도 보장 못하지만, 검증된 오픈소스 라이브러리를 사용하면 개발기간 단축할 수 있고 안정성 높은 애플리케이션을 쉽게 개발할 수 있다!! 얼마나 좋은가..

앞서 이야기한 멀티스레드도 오픈소스 덕분에 쉽게 구현할 수 있는 것임...

 

 

개인적으로 오픈소스를 잘 활용하는 것도 능력이라고 생각한다!! 

'JAVA' 카테고리의 다른 글

코틀린[Kotlin], 정말 자바[JAVA]와 100% 호환되나?  (0) 2022.11.04
[JAVA] 참조 타입 reference type  (0) 2022.03.03
[JAVA] 자바 가상 기계 JVM  (0) 2021.12.14
[JAVA] StringBuilder  (0) 2021.12.07
int vs. Integer  (0) 2021.09.13