일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- git오류
- git 오류
- 참고X
- 도커
- c언어 제어문
- git기초
- 5장
- 백준
- python자료형
- 코딩테스트
- 데베시 1주차
- 최단거리
- 인텔리제이
- 운체 1주차
- 코테
- python기본
- #코린이 #코딩 #할 수 있다
- 4장
- 그리디
- 자료구조
- 스택
- c언어 기본
- DP
- 인스타
- c언어
- 파이썬 알고리즘 인터뷰
- Workbench
- 1주차(1)
- python기초
- Git
- Today
- Total
하루살이 개발자
[JAVA] 01. 자바란? (자바의 특징, 장단점) 본문
1. 자바의 탄생과 역사
- 자바는 1991년 썬 마이크로시스템즈(Sun Microsystems)사에서 제임스 고슬링(James Gosling)이 고안하였고 오크(Oak), 혹은 그린(Green) 이라고 불렸다.
- 오크는 최초 가전제품에서 쓰일 프로그램의 개발이 목적이었지만 인터넷과 웹의 출현으로 자바의 초점은 가전제품에서 인터넷으로 옮겨지게 되었고, 이후 1995년 이름을 자바로 변경하게되었다.
- 고슬링의 목표는 C/C++ 스타일의 언어와 가상 머신을 구현하는 것으로, Write Once, Run Anywhere(한 번 쓰고 어느 곳에도 실행) 하는것을 약속하였다.
- 자바는 인기플랫폼에 무료 런타임을 제공하였고, 대부분의 브라우저들은 곧 자바 애플릿(Java Applet)을 웹페이지 안에서 실행할 수 있었으며 자바의 인기는 급상승 하였다.
- 2009년 썬 마이크로시스템즈는 오라클과 인수 합병되었고 자바에 대한 권리 및 유지보수 또한 오라클로 넘어가게 되었다.
2. 자바의 특징 - 장점
1) 객체지향 언어이다
- 객체지향 프로그래밍(OOP: Object Oriented Programming)이란 프로그램을 개발하는 기법으로, 부품에 해당하는 객체들을 먼저 만들고, 객체를 하나씩 조립 및 연결하여 전체 프로그램을 완성하는 것을 말한다.
- 객체를 만들기 위해 설계도인 클래스를 작성하고, 객체와 객체를 연결하여 목적에 맞는 프로그램을 만들어 낸다.
- 객체지향 언어의 특징인 캡슐화, 상속성, 다형성을 완벽하게 지원한다.
2)이식성이 높다
- 서로 다른 실행환경을 가진 시스템 간에 프로그램을 옮겨 실행할 수 있는 것을 말한다.
- 자바는 자바 실행환경(JRE)이 설치되어있는 모든 운영체제에서 실행이 가능하다
[참고1] 자바의 런타임 환경인 JRE란?
JRE(Java Runtime Environment)는 자바 실행환경의 약자로, JVM이 자바 프로그램을 동작시킬 때 필요한 라이브러리 파일들과 기터 파일들을 가지고 있다. JRE는 JVM의 실행환경을 구현했다고 할 수 있다.
[참고2] JDK란?
JDK(Java Development Kik)는 자바 개발 도구의 약자로, JRE + 개발을 위해 필요한 도구(javac, java 등)을 포함한다.
3) 인터프리터 언어이다
- 컴파일 언어인 동시에 인터프리터 언어이다.
- 텍스트 소스를 컴파일하여 클래스 파일로 만든 다음 자바 런타임이 클래스 파일을 인터프리트하면서 실행된다.
- 시스템에 무관한 클래스 파일을 만듬으로써 자바는 컴파일 언어에 가까운 속도와 시스템 독립성을 얻을 수 있다.
[참고] 자바는 컴파일 언어이기도 하고, 인터프리터 언어이기도 하다.
컴파일언어?
자바는 다른 컴파일 언어들이 작동하듯이 컴파일러를 이용해 전체 코드를 한번에 번역한다. 여기서 사용하는 컴파일러를 "자바 컴파일러"라고 하며, 이 자바 컴파일러는 우리가 작성한 Java코드를 "자바 가상머신(JVM)"이 실행시킬 수 있는 "자바 바이트 코드"로 번역한다. (자바 바이트코드의 확장자는 .class이다, 바이트코드는 JVM에서 바로 실행가능한 형태이다.)
인터프리터 언어?
자바 바이트코드는 JVM의 자바 인터프리터를 이용해 한 줄씩 실행된다. 즉, 자바 바이트코드로 작성되어 있는 실행 프로그램을 자바 인터프리터가 한 줄씩 읽으면서 컴퓨터가 이해할 수 있는 2진 코드(바이트코드)로 번역한 후 실행시는 것이다.
결론) 자바는 컴파일 언어이면서 인터프리터 언어이므로 "하이브리드 언어"라고 불린다.
처음에는 인터프리터 언어로 사용되다가, 성능 향상을 위하여 컴파일 언어의 장점을 가져왔다고 한다.

4) 메모리를 자동으로 관리한다
- 자바는 개발자가 직접 메모리에 접근할 수 없으며, 메모리는 자바가 직접 관린한다.
- 객체 생성시 자동으로 메모리 영역을 찾아서 할당하고, 사용이 완료되면 Garbage Collector(쓰레기 수집기, GC)를 실행시켜 자동으로 사용하지 않는 객체를 제거한다
- 덕분에 개발자는 메모리 관리의 수고를 덜고, 핵심기능 코딩에 집중할 수 있다. -> 효율적
[참고] 이게 왜 좋은데?
C++은 메모리에 생성된 객체를 제거하기 위해 개발자가 직접 코드를 작성해야 한다. 만약 이 작업을 해주지 않는다면 프로그램은 불완전해지고, 갑자기 다운되는 현상을 겪을 수도 있다.
5) 멀티 스레드 구현이 쉽다
- 운영체제에 따라 멀티 스레드를 구현하는 방법이 다르지만, 자바는 스레드 생성 및 제어와 관련된 라이브러리 API를 제공하므로 운영체제에 상관없이 멀티 스레드를 쉽게 구현할 수 있다.
6) 동적 로딩을 지원한다
- 실행 시 모든 클래스가 로딩되는 것이 아니라, 필요한 시점에 클래스를 로딩하여 사용할 수 있다.
- 애플리케이션의 변경사항이 발생해도 비교적 적은 작업만으로 처리할 수 있는 유연한 애플리케이션을 작성할 수 있다.
7) 분산환경을 지원한다
- 자바에는 TCP/IP 라이브러리가 기본적으로 포함되어 있다.
- HTTP와 HTP 프로토콜을 기본적으로 지원한다.
8) 오픈소스 라이브러리가 풍부하다
- 자바는 오픈소스 언어이고, 자바 프로그램에서 사용하는 라이브러리 또한 오픈소스의 양이 방대하다.
- 고급 기능을 구현하는 코드를 작성하는 대신 검증된 오픈소스 라이브러리를 사용하면, 애플리케이션을 다시 컴파일 할 필요가 없다
- 따라서, 유지보수를 쉽고 빠르게 진행할 수 있다.
3. 자바의 특징 - 단점
- 자바는 실행을 위해 자바 가상 머신을 거쳐야 하므로, 다른 언어에 비해 실행 속도가 느리다.
- 자바는 예외 처리가 잘 되어 있지만, 개발자가 일일이 처리를 지정해줘야 한다는 불편함이 있다.
- 자바는 다른 언어에 비해 작성해야 하는 코드의 길이가 긴 편이다.
면접 질문 대비하기!
Q. 자바의 장단점에 대해 설명해 주세요.
장점
(우선순위 높은 것)
- 특정 하드웨어, 운영체제에 종속되지 않아 플랫폼에 독립적으로 실행 가능하다.
- 자바는 JVM의 가상환경을 사용하여, 멀티 스레드를 지원하지 않는 운영체제의 경우에도 자바 언어를 활용해 멀티 스레드를 구현할 수 있다.
- 가비지 컬렉션을 사용하여 메모리를 자동으로 관리한다.
(추가적으로 말할 것)
- 객체지향 언어로 신뢰성있는 소프트웨어를 손쉽게 작성할 수 있고, 재사용이 가능하다.
- 오픈소스 라이브러리가 풍부해서 빠르게 개발 가능하다.
- 수많은 개발자와 레퍼런스가 있다.
단점
(우선순위 높은 것)
- JVM을 거쳐 코드가 실행되기 때문에, 실행 속도가 다른 언어에 비해 느리고, 더 많은 메모리를 사용한다.
- 자바는 예외 처리가 잘 되어 있지만, 개발자가 일일이 처리를 지정해줘야 한다는 불편함이 있다.
- 가비지 컬렉션이 언제 어떻게 작동될지 모르기 때문에, 중간에 끊김 현상이 발생할 수 있어 실시간 응용 시스템으로는 부적합하다.
(추가적으로 말할 것)
- 소스 코드 길이가 긴 편이다.
- Oracle사의 Java 유료화
[참고문헌]
JRE, JDK 관련: https://wikidocs.net/257
인터프리터 관련: https://jooona.tistory.com/157
자바 특징 관련: https://helloworld-88.tistory.com/3