※ '자바의 정석 기초편'을 읽으며 정리한 자료임을 미리 밝힙니다.
Chapter 01.
(1) 자바(JAVA)란?
- 썬 마이크로시스템즈에서 개발하여 1995년 1월에 공식적으로 발표한 객체 지향 프로그래밍 언어.
- 운영체제(Operating System, OS, 플랫폼)에 독립적이라는 가장 중요한 특징을 가지고 있음.
- 자바로 작성된 프로그램은 운영체제의 종류에 상관없이 실행이 가능하며, 운영체제에 따라 프로그램을 변경하지 않아도 실행이 가능함.
→ 자바는 다양한 기종의 컴퓨터와 운영체제가 공존하는 인터넷 환경에 적합한 언어로써 인터넷의 발전과 함께 많은 사용자층을 확보할 수 있게 됨.
(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)
- 자바를 실행하기 위한 가상 기계 또는 가상 컴퓨터.
- '가상 기계(Virtual Machine)'란 소프트웨어로 구현된 하드웨어를 뜻하는 넓은 의미의 용어.
- 컴퓨터 속의 컴퓨터.
- 자바로 작성된 프로그램은 모두 이 가상 컴퓨터(JVM)에서만 실행되기 때문에, 자바 프로그램이 실행되기 위해서는 반드시 JVM이 필요함.
- 일반적인 프로그램 코드들이 OS만 거쳐 하드웨어로 전달되는 반면, 자바 프로그램은 JVM을 한 번 더 거치며, 하드웨어에 맞게 완전히 컴파일된 상태가 아닌 실행 시에 해석(Interpret)이 되기 때문에 속도가 느리다는 단점이 있었음.
- 하지만 최근에는 바이트 코드(컴파일된 자바 코드)를 하드웨어의 기계어로 바로 변환해주는 JIT 컴파일러와 향상된 최적화 기술이 적용되어 속도의 격차를 많이 줄였음.
'java' 카테고리의 다른 글
05. 연산자(Operator) (0) | 2022.06.25 |
---|---|
04. 기본형과 참조형 (0) | 2022.06.25 |
03. 상수와 리터럴 (0) | 2022.06.25 |
02.변수(Variable) (0) | 2022.06.25 |