프로젝트를 진행하다보니 슬슬 CS 공부 + Java 복습을 해야할 때가 온게 느껴졌다.
따로 교재를 사지 않아 강의를 찾아보던 중 찾은 유튜브인데 상당히 유익하다.
[기초] 시리즈는 본강의를 수강후 정리한 글들 입니다.
Java 란 어떤 언어인가?
- 자바 언어는 1996년 JDK(Java Development Kit) 1.0이 발표된 이후 현재까지 발전을 거듭
- JDK : java app을 개발하기 위해서는 도구가 필요함. + 동작할 수 있는 실행환경(JRE)도 필요 => 두가지를 가지고 있는 것
- 각각의 버전마다 크고 작은 변화들이 있었으며 Java5와 Java8 버전에서 제일 큰 변화.
- Java8 부터는 LTS (Long Term Supprt) 버전과 non - LTS 버전으로 나뉘어 출시
- Java9 부터 6개월 단위로 새로운 버전이 나오고있으며 non-LTS 버전은 새로운 버전이 출시되면 더이상 업데이트 지원 안됨.
- 🚩 그러므로 개발을 할때 기준이 되는 버전들은 LTS 버전으로 개발을 해야함.
Java의 주요 특징
- 객체지향 언어 OOP
- 이후에 클래스 학습하면서 자세히
- 멀티 스레드 지원 (별도의 강의로 지원)
- 특정 프로그램의 특정 기능들을 스레드 단위로 나눔. 이렇게 나눠진 스레드단위로 나뉘어진 기능들이 서로 경쟁적으로 수행이됨.
- 이렇게 경쟁 관계에서 각각의 기능들이 수행될 때 사용자는 마치 동시에 수행되는 것처럼 보임
- 대표적인 멀티 스레드 프로그램 : 채팅 프로그램
- OS플랫폼 독립성
- 자바로 작성된 프로그램은 자바 가상 머신 (Java Vertual Machine) 위에서 실행되며 이런 특징으로 인해 자바 프로그램은 어떤 운영체제(OS)에서도 실행 가능. (write once, run anywhere)
- ex) C언어를 기준으로 개발 => 윈도우 체제 버전과 맥 체제 버전에서 실행시키는 버전이 다름. (즉 , OS플랫폼에 따라서 달리 제작)
- 하지만 자바는 자바만의 JVM이 있음. 그러므로 운영체제에 종속되지 않음. 그러나 JVM은 플랫폼에 종속적. 자바 프로그램은 독립적임.
- Garbage Collection
- 메모리에 객체를 만들어 저장했을 때 이것들이 해제되는 방식
- 클래스를 이용해서 인스턴스 객체를 만들어줌. 이후 에 사용이 다 된 객체는 이 메모리에서 해제가 되어야 하는데, 자바는 가비지 컬렉터가 알아서 정리해줌
- 객체를 인스턴스화 했을 때 메모리의 형태가 어떻게 되는지 설명하면서 다시 한번 설명 예정
Java Application 동작 방식
👉 Hello.java (source code) -> compiler -> Hello.class (byte code)
-> (JVM) Class Loader (byte code)기존에 번역된 코드들에다가 다른 클래스도 합치는 과정
-> Hello.class (용량이 다름. class loader를 통해서 다른 클래스가 합쳐졌기 때문)
-> Bytecode verifier (바이트코드 검증기) -> interpreter (한번더 번역)
- 일반적인 프로그램은 소스코드를 컴파일하면 컴퓨터가 직접 해석 및 실행 할 수 있는 실행 파일이 만들어짐.
- 작성된 코드를 번역하는 방식은 컴파일 방식과 인터프리터 방식이 있으며 자바 언어는 두 방식을 모두 수행
- 컴파일 방식 : 전체 내용을 한번에 번역
- 인터프리터 방식 : 해당 코드를 한줄씩 번역
- => 보통 언어는 둘 중 하나의 방식만 하는데 자바는 둘다 함.
- => 기존의 한가지 방식으로만 네이티브 코드가 돼서 실행되는 프로그램과는 다소 속도의 차이가 있으나 장점이 또 있음..추후에..
- 자바 언어로 작성한 코드는 자바 컴파일러(java.exe)를 통해 컴파일을 수행하고 그 결과물은 *.class 파일이 됨.
- *.class 파일은 프로그램이 실행되면 JVM 내부에서 라인단위로 번역되어 실행됨.
🤯Byte code vs Native code
- byte code : JVM이 이해할 수 있는 코드
- Native code = Binary code = 2진수 코드 : 컴퓨터가 읽을 수 있는 코드
강의를 보기 전 정리했던 글들
2022.08.08 - [JAVA] - [JAVA] 객체지향 / 클래스 Class /메쏘드 Method / Static
2022.08.18 - [JAVA] - [JAVA] 기초 - 다시 정리하는 기본 개념
'☕JAVA > 🐣 강의 [JAVA]' 카테고리의 다른 글
[JAVA][기초] 메소드 Method , 오버로딩 Overloading (0) | 2022.10.04 |
---|---|
[JAVA][기초] 연산자 (0) | 2022.10.04 |
[JAVA][기초] 클래스의 이해3 - 필드의 정의 (2) Data Type 의 이해 (0) | 2022.09.30 |
[JAVA][기초] 클래스의 이해2 - 필드의 정의 (1) 변수 Variable (0) | 2022.09.29 |
[JAVA][기초] 클래스의 이해 1 (0) | 2022.09.29 |