본문 바로가기

java

01. JAVA란?

※ '자바의 정석 기초편'을 읽으며 정리한 자료임을 미리 밝힙니다. 

 

 

 

Chapter 01.

(1) 자바(JAVA)란?

 

  1. 썬 마이크로시스템즈에서 개발하여 1995년 1월에 공식적으로 발표한 객체 지향 프로그래밍 언어
  2. 운영체제(Operating System, OS, 플랫폼)에 독립적이라는 가장 중요한 특징을 가지고 있음.
  3. 자바로 작성된 프로그램은 운영체제의 종류에 상관없이 실행이 가능하며, 운영체제에 따라 프로그램을 변경하지 않아도 실행이 가능함. 

→ 자바는 다양한 기종의 컴퓨터와 운영체제가 공존하는 인터넷 환경에 적합한 언어로써 인터넷의 발전과 함께 많은 사용자층을 확보할 수 있게 됨. 

 


 

(2) 자바의 특징

 

1. 운영체제에 독립적

자바 응용 프로그램은 운영체제나 하드웨어가 아닌 JVM하고만 통신하며 JVM이 자바 응용 프로그램으로부터 전달 받은 명령을 해당 운영체제가 이해할 수 있도록 변환하여 전달.

→ 그렇기 때문에 일종의 에뮬레이터인 자바 가상 머신(Java Virtual Machine)을 통해 운영체제나 하드웨어에 상관없이 프로그램을 실행.

한 번 작성하면, 어디서나 실행된다. (Write once, Run Anywhere).


2. 객체 지향 언어

객체 지향 프로그래밍 언어(Object-Oriented Programmming language, O.O.P) 중의 하나.

→ 객체 지향 프로그램의 특징인 상속, 캡슐화, 다형성이 잘 적용된 순수한 객체지향 언어라고 평가.

 

객체 지향 프로그래밍 언어(Object-Oriented Programmming language, O.O.P)란?

- 프로그램을 단순히 데이터와 처리 방법으로 나누는 것이 아니라, 프로그램을 수많은 객체(Object)라는 기본 단위로 나누고 이들의 상호 작용을 통해 만드는 방식
- 객체(Object) 하나의 역할을 수행하는 '메소드와 변수(데이터)'의 묶음.

ex. 컴퓨터가 작동하기 위해서는 CPU, RAM, HDD/SSD, VGA 등이 있어야 한다. 이때 CPU, RAM 같은 각각의 부품을 객체라고 할 수 있고, 이것들이 연결되고 조립되어야 컴퓨터는 정상적으로 작동할 수 있다. 고장이 나더라도 부품만 교체하면 되기 때문에 유지 보수가 쉽고 편해진다. 객체 지향 프로그래밍 언어 또한 이와 같은 장점을 가지고 있음. 


◈ 객체 지향 프로그래밍 언어(O.O.P)의 특징

1. 캡슐화(Encapsulation)
변수와 함수를 하나의 단위로 묶는 것. 데이터 번들링(bundling)이라고도 하며, 이것은 클래스(Class)를 통해 구현되고 해당 클래스의 인스턴스 생성을 통해 클래스 안에 포함되어 있는 멤버 변수와 메서드에 쉽게 접근할 수 있음. 
→ 이것을 통해 정보를 은닉할 수 있으며, 데이터와 코드의 형태를 숨길 수 있음. 
모듈 간의 결합도를 떨어트려 유연함과 유지 보수성을 높임. 

2. 정보 은닉(Information Hiding)
→ 캡슐화로부터 파생된 개념. 프로그램의 세부적인 구현을 외부로 드러나지 않도록 특정 모듈 내부로 감추는 것. 
→ 내부 구조는 Private으로 숨겨두고 외부에서 조작할 수 있는 것들은 Pubilc으로 공개함. 
외부로의 노출을 최소화하여 모듈 간의 결합도를 떨어트려 유지보수성을 높임. 


3. 상속(Inheritance)
상위 클래스의 모든 것을 하위 클래스가 모두 이어 받는 개념. 상속을 통해 캡슐화를 유지하는 동시에 클래스의 재사용을 가능하게 함. 
→ 상위 클래스의 특성과 기능을 그대로 물려받음으로써 하위 클래스를 이용해 프로그램의 요구에 맞추어 클래스를 수정할 수 있게 하고, 클래스 간의 종속 관계를 형성함으로써 객채를 조직화할 수 있음. 

4. 다형성(Polymorphism)
→ 상속과 연관되어 있으며, 한 객체, 변수 또는 함수가 상황에 따라 다른 의미로 재구성될 수 있는 것
오버로딩(Overloading)오버라이딩(Overriding)이 있다. 
* 오버로딩(Overloading) : 같은 이름의 메서드를 여러 개 가지면서 매개 변수의 유형과 개수가 다르도록 하는 것. 
* 오버라이딩(Overriding) : 상위 클래스가 가지고 있는 메서드를 하위 클래스가 재정의하여 사용하는 것. 

5. 추상화(Abstraction)
공통의 속성이나 기능을 묶어 이름을 붙이는 것
→ 불필요한 정보를 숨기고 중요한 정보만 표현함으로써 프로그램을 보다 간단화 시켜줌. 
→ 객체 지향적 관점에서 클래스를 정의하는 것을 '추상화'라고 정의 내릴 수 있음. 
 
ex. 강아지, 고양이, 너구리, 사자, 호랑이 등을 객체라고 할 수 있고 이 객체들을 하나로 묶어야 한다면, '동물' 혹은 '생물'이라는 이름으로 묶을 수 있다. 이것을 추상화라고 한다. 


3. 비교적 배우기 쉽다

→ 자바의 연산자와 기본 구문은 C++에서, 객체지향 관련 구문은 스몰톡(Small Talk)이라는 객체지향 언어에서 가져옴. 

→ 이들 언어의 장점은 취하면서 복잡하고 불필요한 부분은 과감히 제거하여 단순화함으로서 쉽게 배울 수 있으며, 그 덕분에 간결하고 이해하기 쉬운 코드를 작성할 수 있음. 

 

4. 자동 메모리 관리(Garbage Collection)

→ 자바로 만든 프로그램이 실행되면 가비지 컬렉터(Garbage Collector)가 자동적으로 메모리를 관리해주기 때문에 프로그래머는 메모리를 따로 관리하지 않아도 됨.

→ 프로그래머가 보다 프로그래밍에 집중할 수 있도록 도와줌. 

 

5. 네트워크와 분산 처리 지원

→ 풍부하고 다양한 네트워크 프로그래밍 라이브러리(Java API)를 통해 네트워크 관련 프로그램을 쉽게 개발할 수 있도록 지원함. 

 

6. 멀티 쓰레드 지원

→ 자바에서 개발되는 멀티 쓰레드 프로그램은 시스템과는 관계없이 구현 가능하며 관련된 라이브러리(Java API)가 제공되므로 구현이 쉬움. 

→ 여러 쓰레드에 대한 스케줄링을 자바 인터프리터가 담당함. 

 

7. 동적 로딩(Dynamic Loading) 지원

→ 프로그램을 실행 시 모든 클래스가 로딩되지 않고 필요한 시점에 클래스를 로딩하여 사용할 수 있음.

→ 일부 클래스가 변경되어도 전체 애플리케이션을 다시 컴파일하지 않아도 됨.

→ 애플리케이션에 변경 사항이 발생하더라도 비교적 적은 작업 만으로도 처리할 수 있는 유연한 애플리케이션을 작성할 수 있음. 


(3) 자바 가상 머신(Java Virtual Machine, JVM)

 

  1. 자바를 실행하기 위한 가상 기계 또는 가상 컴퓨터
  2. '가상 기계(Virtual Machine)'란 소프트웨어로 구현된 하드웨어를 뜻하는 넓은 의미의 용어.
  3. 컴퓨터 속의 컴퓨터.
  4. 자바로 작성된 프로그램은 모두 이 가상 컴퓨터(JVM)에서만 실행되기 때문에, 자바 프로그램이 실행되기 위해서는 반드시 JVM이 필요함. 
  5. 일반적인 프로그램 코드들이 OS만 거쳐 하드웨어로 전달되는 반면, 자바 프로그램은 JVM을 한 번 더 거치며, 하드웨어에 맞게 완전히 컴파일된 상태가 아닌 실행 시에 해석(Interpret)이 되기 때문에 속도가 느리다는 단점이 있었음. 
  6. 하지만 최근에는 바이트 코드(컴파일된 자바 코드)를 하드웨어의 기계어로 바로 변환해주는 JIT 컴파일러와 향상된 최적화 기술이 적용되어 속도의 격차를 많이 줄였음

'java' 카테고리의 다른 글

05. 연산자(Operator)  (0) 2022.06.25
04. 기본형과 참조형  (0) 2022.06.25
03. 상수와 리터럴  (0) 2022.06.25
02.변수(Variable)  (0) 2022.06.25