[Java] 특징, JVM, JDK, JRE, 객체지향, 클래스, 인스턴스
1. Java의 특징
- JVM만 있으면 플랫폼과 상관없이 플랫폼에 독립적인 언어로써 돌아간다.
- C 계열 언어보다는 배우기 쉽다.
- 메모리 관리를 하지 않아도 된다.
- 가비지컬렉터 - 메모리 관리를 자동적으로 수행함. 사용되지 않는 것이 자동으로 반환된다. (메모리 프레쉬 기능)
- 코드 자체 로직에 대해 집중할 수 있다.
- 멀티쓰레드를 Java 언어 차원에서 지원한다.
- 강타입언어(Strong Type 언어)
2. JVM(Java Virtual Machine)
- 플랫폼에 종속적, 독립적인 형태
- C로 구현되어 있다.
- JVM ↔ Java 애플리케이션 ↔ JVM ↔ OS(Windows) ↔ 컴퓨터(하드웨어)
- 일반 애플리케이션 ↔ OS(Windows) ↔ 컴퓨터(하드웨어)
- 참고
- C보다 느리다.
- 예전에는 속도가 문제가 되었는데 지금은 JIT와 같은 기술이 발전되어서 속도 문제 거의 해결!
- JIT 컴파일(just-in-time compilation) 또는 동적 번역(dynamic translation)은 프로그램을 실제 실행하는 시점에 기계어로 번역하는 컴파일 기법이다.
- 머신마다 쓰는 기계어가 다르기 때문에.. 컴파일 과정을 거친다..
- 컴파일 하면 바이트 코드가 나온다. 그럼 JVM이 이걸 읽고 기계어로 변환하여 머신이 읽는다.
3. JDK, JRE, JVM
- JVM ⊂ JRE ⊂ JDK
- JDK Java Development Kit (JDK안에 JRE가 들어간다.)
- Java를 사용하기 위한 필요한 모든 기능을 갖춘 Java용 SDK이다.
- JRE 포함 컴파일러 javac와 jdb, javadoc 등의 도구도 있다.
- 즉, JDK는 프로그램을 생성하고 컴파일할 수 있다.
- JRE Java Runtime Environment (JRE안에 JVM이 들어간다.)
- JVM, Java Class Library (API), Java Command 및 기타 인프라를 포함한 컴파일된 Java 프로그램을 실행하는 데 필요한 패키지
- 포함관계
- JDK 1.0부터 시작해서 버전업이 계속 되고 있다.
- JDK 1.5 버전이 되었을 때 언어 자체가 한 단계 업그레이드가 됐다. → Java 5.0으로 명명
- JDK 1.8은 당연히 Java 8이라고 부른다. (상당수가 Java 8을 기업에서 쓰고 있다.)
- Java 9부터 패키지의 상위 개념인 모듈 개념이 생긴다.
- 하위호환성 담보가 깨진다..
- Java 11은 신규로 나온 곳이 많이 쓰고 있다고 함
- 수업은 Java 8로 진행한다.
- Java는 부분 유료
- 기본 기능은 무료(GPL license) 여기에 오라클이 추가적으로 제공하는 글꼴, Java Web Start는 유료로 제공된다.
4. 객체지향의 기본적인 개념
- 프로그래밍의 패러다임 변화부터 알아보자.
- 프로그래밍 방법론의 변화
- 함수형 프로그래밍 → 구조적 프로그래밍, 절차적 프로그래밍
- 객체지향 프로그래밍
4.1 절차적 프로그래밍
- 절차적 프로그래밍의 특징
- 프로그램을 기능별로 세분화해서 함수로 나눠서 프로그래밍을 하는 방식
- 프로그램을 기능 단위로 구현한다. 각 기능을 함수라는 실행 단위로 구현해서 그 함수를 모아 전체 프로그램을 완성
- 장점: 프로그램의 설계가 쉽다. → 개발이 쉽다. → 개발 기간이 단축된다. → 비용 절감
- 단점: 유지보수와 모듈(함수)의 재활용성이 떨어진다.
- 이 단점을 해결하기 위해 나온 프로그래밍 패러다임이 바로 객체지향 프로그래밍이다.
4.2 객제지향 프로그래밍
- 객체지향 프로그래밍의 특징
- 현실세계, 구성요소를 프로그래밍 적으로 표현한다.
- 각각의 객체로 표현하고 모델링한다.
- 구현하고자 하는 현실세계의 문제를 구성하고 있는 구성 요소를 파악하고 이 구성 요소를 프로그램적으로 모델링해서 해당 구성 요소들이 데이터를 주고 받는 형태를 프로그래밍하는 방법
- 장점: 프로그램의 유지보수와 재활용성에 장점이 있다.
- 단점: 설계와 구현이 상대적으로 어렵다.
- 현실 세계의 문제를 구성하고 있는 구성 요소를 파악하는 작업을 해야 한다.
- Abstraction(추상화) 과정을 거쳐서 프로그램적으로 표현해야 하는 속성값, 행위로 표현한다.
- 클래스라는 단위로 속성값 - 변수, 행위 - 함수로 표현한다.
- 객체 모델링의 수단 - 클래스
- 속성값은 변수로, 행위는 함수로, 프로그램적으로 표현해야 한다.
- 이 2가지를 하나의 단위로 만들기 위해서 사용하는 개념이 바로 class.
- 그래서 class의 의미 중 하나는 바로
객체 모델링의 수단
- 변수는 필드 field라고 부른다.
- class 내부에는 변수에 해당하는 field, 함수에 해당하는 method가 존재한다.
- 인스턴스
- 인스턴스화 Instanciation → 클래스로 표현한 것을 메모리 상에 할당을 해야 한다.
- 인스턴스: 메모리 공간
- instance는 class 안에 정의된 변수(field)를 실제 메모리 영역에 공간을 확보한 것.
- class는
instance를 만들어내기 위한 수단
- class도 하나의 데이터 타입 (ADT)
- 클래스는 추상 데이터 타입 Abstract Data Type ADT라고도 불린다.
- class 안에 정의된 field를 이용해서 메모리 공간을 확보하고 해당 공간에 대한 데이터 타입은 당연히 class 명으로 설정해야 한다.
- class는 하나의 데이터 타입.
- 즉, 우리가 임의로 만들 수 있는 데이터 타입이기 때문에
ADT(Abstract Data Type)
이라고도 불린다.
- 추상화의 결과로 나온 것이 결국 class이다.
- class란 무엇인가요?
- 객체 모델링의 수단
- 인스턴스를 만들어내기 위한 수단
- ADT
5. Java program의 특징
- 우리가 자바 프로그램을 작성할 때
- 원칙적으로 하나의 Java Source File에 하나의 class만 정의한다.
- 소스 파일의 확장자는 .java를 사용
- 여러 개의 source file(여러 개의 class)가 모여서 하나의 Java application을 구성한다.
- Java program의 entry point(진입점)는 main() method이다.