1. 자바(JAVA)의 개념
자바(JAVA)는 1995년에 미국의 '썬마이크로시스템즈'라는 회사에서 개발한 객체지향 언어 중 하나이며, 운영체제에 독립적이라는 것이 가장 큰 특징이다. 즉, 자바 언어로 작성된 프로그램은 운영체제의 종류와 관계없이 실행 가능하다. 때문에 운영체제에 따라 프로그램을 변경하지 않아도 실행이 가능하다는 것이다. 또한 다른 객체지향 언어에서 잘 사용되지 않는 부분을 제외시킴으로써 표현이 간결해지고, 비교적 배우기 쉬운 언어이다.
2. 자바(JAVA)의 장단점
2-1. 자바(JAVA)의 장점
- 객체지향 프로그래밍 언어(OOP: Object Oriented Programming)
객체별로 코드를 작성하고 목적에 맞는 객체와 객체를 조합하여 전체 프로그램을 완성하는 프로그램 설계 방법론이다. 때문에 유지보수가 용이하며, 직관적인 코드 분석이 가능하다.
- 쉬운 난이도
자바(JAVA)는 기본적으로 C언어와 C++언어의 문법을 적용한 언어이지만, 이해하기 어려운 포인터나 다중 상속등의 개념을 없앰으로써 문법적인 난이도를 낮춘 언어이다.
- 분산 네트워크 기술 지원
자바(JAVA)는 네트워크상에서 동작되는 것을 기본으로 TCP/IP 라이브러리가 포함된 언어로 네트워크 관련 프로그램을 쉽게 개발할 수 있도록 HTTP 프로토콜을 지원한다.
- 자동 메모리 관리(Garbage Collecter)
자바(JAVA)에서 객체를 생성하게 되면 자동으로 메모리 영역에 할당되고, 생성된 객체의 사용이 끝나면 가비지 컬렉터(Garbage Collecter)에 의해 메모리에서 해제하여 메모리를 정리해 준다. 때문에 자바로 개발할 때 메모리 관리에 대한 부담을 줄일 수 있다.
- 멀티스레딩(Muti Thread) 지원
멀티스레딩을 지원한다는 것은 여러 작업을 동시에 같이 할 수 있다는 것이며, 여러 스레드에 대한 스케줄링을 자바 인터프리더가 담당한다.
- 동적 로딩(Dynamic Loading) 지원
자바(JAVA)로 개발을 하게 된다면 여러개의 클래스로 구성될 것이다. 이때 자바는 동적 로딩을 지원하기 때문에 실행 시 모든 클래스가 로딩되는 것이 필요한 시점에 필요한 클래스를 로딩하여 사용할 수 있다. 또한 일부 클래스가 변경되어도 전체 애플리케이션을 다시 컴파일하지 않아도 되기 때문에 애플리케이션에 변경사항이 발생하여도 비교적 적은 작업만으로 처리가 가능하다.
- 높은 이식성
C언어 같은 경우에는 Linux 운영체제에서 개발한 프로그램은 Window 운영체제에서 실행이 되지 않는다.
물론 반대로 해도 결과는 똑같이 실행되지 않는다. 이는 코드로 작성된 프로그래밍 언어를 해석하는데 사용되는 도구의 차이에서 발생한다. 프로그램을 실행하는 과정에서 사람에 친화적인 컴퓨터 언어를 운영체제가 이해할 수 있는 기계어인 바이트 코드(byte code)로 변환해 주는 과정 즉, 컴파일링이라는 과정을 거치게 되는데, 이때 각 운영체제가 이해할 수 있는 기계어로 변환되기 때문에 서로 다른 운영체제에서는 사용이 불가하다.
하지만 자바(JAVA) 언어로 작성된 프로그램은 자바 컴파일러가 바이트 코드(byte code)로 변환한 후에 자바가상머신(JVM, Java Virtual Machine)에 의해 해당 운영체제에 맞게 바이트 코드를 한줄씩 읽어서 해석한 후에 실행한다. 때문에 자바(JAVA)는 운영체제의 종류와는 관계없이 작동한다.
2-2. 자바(JAVA)의 단점
- 불편한 예외처리
자바(JAVA)는 try-catch 등을 활용하여 예외처리를 하는데, 안정성을 위해선 상황에 맞는 예외처리를 해줘야 한다.
때문에 일일이 개발자가 예외를 지정해 줘야 한다는 불편함이 있다.
- 속도 문제
자바(JAVA) 언어로 만들어진 프로그램을 실행하기 위해서는 반드시 자바가성머신(JVM)을 거쳐야 하기 때문에 다른 언어에 비해 실행 속도가 느리다. 하지만 바이트 코드(byte code)를 하드웨어의 기계어로 변환해 주는 JIT컴파일러와 Hotspot(향상된 최적화 기술)과 같은 기술의 적용으로 자바가상머신(JVM)의 기능이 향상되어 속도 문제가 많이 개선되었다.
'Java' 카테고리의 다른 글
[Java] 문자열 연결 방식 비교: String vs StringBuilder vs StringBuffer (4) | 2024.02.05 |
---|---|
[Java] 예외 처리 printStackTrace()의 취약점과 대안 (2) | 2024.02.01 |
[Java] 문자열 연결에 대한 StringBuilder와 StringBuffer 비교 (2) | 2024.01.31 |
[JAVA] JVM(JAVA Virtual Machine) 이란? (19) | 2023.01.29 |