1. JAVA
썬 마이크로 시스템즈(Sun Microsystems, Inc. 이하 썬)에서 개발한 객체지향 프로그래밍 언어이다.
1991년 썬에서 제임스 고슬링이 이끄는 팀에 의해 개발된 C와 C++에 기반을 둔 '오크(Oak)'라는 언어에서 시작되었다. 오크는 가정용 단말기에 적용하려는 목적으로 만들어졌으나, 인터넷이 발전하면서 인터넷 환경에 적합한 언어로써 개발 방향을 바꾸며 1995년 자바(JAVA)라는 이름으로 새롭게 소개되었다.
** 객체란 데이터, 행위, 아이덴티티를 가지고 있는 것
데이터 : 객체의 상태 정보 저장
행위 : 객체가 어떻게 해야하는지
아이덴티티 : 어떠한 객체를 다른 객체와 구분하는 것
** 클래스란 객체를 생성하는 템플릿
객체를 생성하기 위해 메모리에 올릴 바이너리 형태 프로그램 코드
2. JAVA에서 사용하는 용어
2-1) JVM
JVM은 Java Virtual Machine(자바 가상 머신)의 약자이다.
자바언어로 작성된 프로그램은 바이트코드(Bytecode)라는 특수한 바이너리 형태로 변환된다.
여기서 바이트코드란 하드웨어에 종속적이지 않으며 가상 머신을 통해 해석되고 실행되는 이진 표현법이다.
자바 바이트코드를 실행하기 위해서는 JVM이라는 특수한 가상 머신이 필요하며, 이 가상 머신은 자바 바이트코드를 스마트폰, 컴퓨터, Max, 리눅스 등 어느 플랫폼에서나 동일한 형태로 실행시킨다.
2-2) JRE
JRE는 Java Runtime Environment(자바 실행환경)의 약자이다.
JVM이 자바 프로그램을 동작시킬 때 필요한 구성요소로 라이브러리 파일들과 기타 파일들을 가지고 있다.
2-3) JDK
JDK는 Java Development Kit(자바 개발도구)의 약자이다.
JRE와 자바 프로그램 개발에 필요한 구성요소로 javac.exe(자바 컴파일러, 자바 소스코드를 바이트코드로 컴파일), java.exe(자바 인터프리터, 컴파일러가 생성한 바이트코드를 해석하고 실행)등의 파일을 포함한다.
2-4) JAVA SE
JAVA SE는 Java platform Standard Edition의 약자로 자바 API의 집합체이다.
2-5) JAVA EE
JAVA EE는 Java platform Enterprise Edition의 약자로 자바를 이용한 서버 측 개발을 위한 플랫폼이다.
2-6) JAVA ME
JAVA ME는 Java platform Micro Edition의 약자로 임베디드 장비를 위한 것으로 JAVA SE의 기능을 축소한 것이다.
3. JAVA 특징
- 객체지향 언어 : 객체 지향 프로그래밍(Object Oriented Programing, OOP). 클래스 계층 구조, 상속성, 다형성, 그리고 캡슐화를 지원한다.
- 플랫폼 독립적 : 자바 프로그램은 JVM을 통해 어느 운영체제나 하드웨어에서도 동일하게 실행된다.
- 멀티 스레드 : 운영체제의 도움 없이 JVM에서 하나의 프로그램에 다수의 스레드가 동시에 실행할 수 있는 환경을 지원한다.
- 오픈소스 : 오픈소스 언어로, 자바 프로그램에서 사용하는 오픈소스 라이브러리가 많다. 이로 인해 생산성을 증가하고 개발 시간을 단축하며, 유지보수 비용을 절감할 수 있다.
- 속도가 느리다 : 한 번 컴파일로 JVM에 의해 기계어로 번역되고 실행하는 과정을 거치기 때문에 완전한 기계어보다는 속도가 느리다.
- 보안 취약 : 컴파일된 바이트코드는 실행코드가 포함되어, 디코딩하면 소스를 그대로 보이는 단점이 있다.
** 상속은 자식 클래스가 부모 클래스로부터 물려받는 것
다중 상속은 불가능하며 단일 상속만 허용된다. 하지만 부모 클래스는 여러 자식 클래스에게 상속이 가능하다.
예시 - class 자식 클래스 extends 부모 클래스 { ... }
** 캡슐화란 객체의 속성(data)과 동작(method)을 하나로 묶는 것
캡슐화된 클래스의 변수들은 클래스 외부에서 접근 불가능하며 오직 캡슐화된 클래스 내부의 메소드만을 통해 변수 조작이 가능하다.
예시 - private 접근 제어자를 사용해 변수를 선언하며 setter과 getter 메소드를 통해 변수 조작
** 다형성이란 같은 자료형에 여러 객체를 대입하여 다양한 결과를 얻어내는 성질
다형성의 개념을 보여주는 방법은 두 가지가 있다. Overriding과 Overloadinf
Overriding : 부모 클래스의 상속을 받은 자식클래스에서 부모클래스의 메소드 내의 로직을 새롭게 정의한다. 부모 클래스를 상속받는 여러 자식 클래스들이 같은 이름의 다른 기능을 하는 메소드를 정의하고 사용할 수 있다. (같은 이름의 메소드지만 구현하는 클래스마다 다른 기능을 한다)
Overloading : 하나의 클래스에서 같은 이름의 메소드를 여러개 가질 수 있다. (단 메소드 인자의 타입이나 개수 등은 달라야 한다)
4. JAVA 컴파일 과정
- 자바 컴파일러는 javac 명령어를 통해 자바 소스 코드(.java 파일)로부터 바이트코드(.class 파일)를 생성한다.
- 바이트코드는 JVM에 로드되고 JVM에서 실행 엔진에 의해 기계어로 해석되어 메모상에 배치된다.
- 실행 엔진에는 interpreter방식과 JIT(Just In Time)방식이 있으며, Interpreter에 의해 바이트코드를 한 줄씩 읽어 실행하다가 적절한 시점에 바이트코드 전체를 컴파일하고 해당 코드를 직접 실행한다.
틀린 부분 있으면 댓글로 말씀해주세요. 수정하겠습니다!
'Web Programming > JAVA' 카테고리의 다른 글
val var (0) | 2023.09.01 |
---|---|
ArrayList 마지막에 add한 객체가 그동안의 객체를 덮어쓰기 하는 문제 (feat. static) (0) | 2023.01.27 |
Calendar week of year 53주 대신 1주 뜨는 현상 해결 (0) | 2021.01.11 |
HttpServletRequest 요청 URL 정보 얻는 함수 (0) | 2020.11.06 |