제 1장 - 자바(JAVA)
JAVA
자바는 썬 마이크로시스템즈의 제임스 고슬링(James Gosling)과 다른 연구원들이 개발한 객체 지향적 프로그래밍 언어이다.
자바언어의 특징
1. 운영체제에 독립적이다.
자바가상머신(JVM)을 통해 자바로 작성된 프로그램은 운영체제와 하드웨어에 관계없이 실행 가능하다.
2. 객체지향프로그래밍 언어이다.
객체지향프로그래밍(OOP)
프로그래밍에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고 그 객체들 간의 유기적인 상호작용을 통해 Ligic(논리 퍼즐)을 구성하는 프로그래밍 방법
⛅ 문제를 쉽고 자연스럽게 모델링 할 수 있어 쉬운 프로그램의 개발로 인한 생산성 향상과 모듈의 재사용을 가능하게 할 수 있음.
✨ 상속
- 클래스로부터 속성과 메서드를 물려받는 것을 말함
- 다른 클래스를 가져와서 수정할 일이 있다면, 그 클래스를 직접 수정하는 대신 상속을 받아 변경하고자 하는 부분만 변경
✨ 추상화: 공통 속성, 기능 정의
- 객체 지향 관점에서 클래스를 정의하는 것
- 불필요한 정보 외 중요한 정보만 표현함으로써 공통의 속성과 기능을 묶어 이름을 붙이는 것
✨ 캡슐화
- 코드를 수정없이 재활용하는 것을 목적으로 함
- 클래스라는 캡슐에 기능과 특성을 담아 묶는다. (= 목적을 기준으로 묶는다.)
✨ 다형성: 오버로딩, 오버라이딩
- 하나의 변수명이나 함수명이 상황에 따라 다르게 해석될 수 있음
- 대표적인 다형성은 오버 로딩과 오버 라이딩이다.
OOP의 5가지 설계 원칙(SOLID)
- SRP(Single Responsibility Principle): 단일 책임 원칙
- 클래스는 단 하나의 책임(목적)을 가지고, 그에 대한 책임을 져야 한다.
- OCP(Open Close Principle): 개방-패쇄 원칙
- 확장에는 열려 있어야 하고 변경에는 닫혀 있어야 한다.
- 즉, 클래스를 수정해야 한다면 그 클래스를 상속(확장)하여 수정한다.
- LSP(Liskov Sibstitution Principle): 리스 코프 치환 원칙
- 상위 타입의 객체를 하위 타입의 객체로 치환해도 상위 타입을 사용하는 프로그램은 정상적으로 동작해야 한다.
- 즉, 자식 클래스를 사용 중일 때, 거기에 부모 클래스로 치환하여도 문제가 없어야 함.
- ISP(Interface Segregation Principle): 인터페이스 분리 원칙
- 각 행위에 대한 인터페이스는 서로 분리되어야 한다.
- ex) 핸드폰으로 전화를 하는데 핸드폰 카메라가 방해가 되면 안된다는 뜻
- DIP(Dependency Inversion Principle): 의존 역전 원칙
- 상위 클래스가 하위 클래스에 의존하면 안 된다는 법칙
- 즉, 기본적인 공통되는 속성을 하위 클래스에 의존하면 안된다.
3. 자동 메모리 관리
가비지컬렉터(Garbage Collector)가 자동으로 메모리 관리를 해주기 때문에 프로그래머는 메모리를 따로 관리하지 않아도 되어 편리하고 개발에 집중 할 수 있다.
4. 네트워크와 분산처리 지원
다양한 네트워크 프로그래밍 라이브러리(JAVA API)를 통해 비교적 짧은 시간에 네트워크 관련 프로그램을 쉽게 개발할 수 있도록 지원한다.
5. 멀티쓰레드 지원
멀티쓰레드(Multi-Thread)
하나의 프로세스 내에서 둘 이상의 스레드가 동시에 작업을 수행하는 것
자바에서 개발되는 멀티쓰레드 프로그램
시스템과는 상관없이 구현가능하며, 관련된 라이브러리(JAVA API)가 제공되므로 구현이 쉽다. 그리고 여러 쓰레드에 대한 스케줄링(Scheduling)을 자바 인터프리터가 담당하게된다.
6. 동적 로딩 지원
실행 시에 모든 클래스가 로딩되지 않고 필요한 시점에 클래스를 로딩하여 실행할 수 있다는 장점이 있다. 그 외에도 일부 클래스가 변경되어도 전체 애플리케이션을 다시 컴파일하지 않아도 된다.
JDK(Java Development Kit) - 자바 개발 키트
자바 애플리케이션을 구축하기 위한 핵심 플랫폼 구성요소, 이 중심에는 자바 컴파일러가 있다.
- 자바 가상 머신(JVM, Java Virtual Machine) 그리고 자바 런타임 환경(JRE, Java Runtime Environment)과 함께 자바 프로그래밍에 사용되는 3대 핵심 기술 패키지 중 하나
JRE(Java Runtime Environment) - 자바 런타임 환경
JVM과 Java 프로그램을 실행(동작) 시킬 때 필요한 라이브러리 API를 함께 묶어서 배포되는 패키지(Package)
자바 애플리케이션을 실행 할 수 있도록 구성된 배포판
Java 클래스 파일을 압축한 Java 아카이브 파일(.jar)생성, 관리하는 압축 프로그램(zip이라 생각하면 된다.)
JRE에는 자바 클래스 라이브러리(Java Class Libraries)와 자바 클래스 로더(Java Class Loader), 자바 가상 머신(Java Virtual Machine)이 포함된다. 이외에도 자바 런타인 환경에서 사용하는 프로퍼티 세팅이나 리소스 파일(jar 파일)을 가지고 있다.
개발관련 도구는 포함하지 않는다. 그래서 JRE만으로 Java 파일을 컴파일 할 수 없다.
JVM(JAVA Virtual Machine) - 자바가상머신
🌎 자바를 실행하기 위한 가상 컴퓨터 🌎
가상 머신: 프로그램을 실행하기 위해 물리적 머신과 유사한 머신을 소프트웨어로 구현한 것
-
자바 애플리케이션을 클래스 로더를 통해 읽어 들여 자바 API와 함께 실행 하는 것이다.
-
JAVA와 OS(운영체제) 사이에서 중개자 역할을 수행하여 JAVA가 OS(운영체제)에 구애받지 않고 독립적으로 작동이 가능
-
가장 중요한 메모리 관리, Garbage Collection(가비지 컬렉션)을 수행
JVM 특징
- 컴파일된 바이트 코드를 기계가 이해할 수 있는 기계어로 변화
- 스택 기반의 가상 머신
- 메모리 관리와 GC를 수행
개발에 필요한 실행 파일
- javac.exe
- 자바 컴파일러. 자바소스코드를 바이트코드로 컴파일 한다.
- java.exe
- 자바 인터프리터. 컴파일러가 해석한 바이트코드를 해석하고 실행한다.
- javap.exe
- 역어셈블러. 컴파일된 클래스파일을 원래의 소스로 변환한다.
- javadoc.exe
- 자동문서생성기. 소스파일에 있는 주석을 이용하여 Java API문서와 같은 형식의 문서를 자동으로 생성한다.
- jar.exe
- 압축 프로그램. 클래스파일과 프로그램의 실행에 관련된 파일을 하나의 jar파일로 압축하거나 압축해제한다.
[참고 문헌]
https://backendcode.tistory.com/160
https://backendcode.tistory.com/204