diff --git "a/1\354\243\274\354\260\250/git \353\252\205\353\240\271\354\226\264.md" "b/1\354\243\274\354\260\250/git \353\252\205\353\240\271\354\226\264.md" new file mode 100644 index 00000000..c9bee55c --- /dev/null +++ "b/1\354\243\274\354\260\250/git \353\252\205\353\240\271\354\226\264.md" @@ -0,0 +1,184 @@ +# git 명령어 정리 +## 1. git의 repository 구조 +- 작업 폴더(Working Directory) +- 인덱스(Staging Area) +- 저장소(Head-Repository) + +|작업 폴더|인덱스|저장소| +|------|------|------| +|실제 파일들로 이루어짐|준비 영역
(add)|최종 확정본
(commit)| + +## 2. git 명령어 +### - git init +: 새로운 git 저장소(repository)를 생성 +- 현재 디렉토리를 기준으로 git 저장소 생성 + -> 디렉토리 내부에 .git 디렉토리가 생성됨 + +### - git config +: 설정 내용을 확인 또는 변경 +- user.name과 user.email을 전역(--global)으로 설정 +``` +$ git config --global user.name "username" +$ git config --global user.email "useremail" +``` +- 전역(--global)으로 설정된 user.name과 user.email을 삭제 +``` +$ git config --unset --global user.name +$ git config --unset --global user.email +``` +- 전체 config 리스트 보기 +``` +$ git config --list +``` + +### - git status +: 파일의 상태(작업 폴더와 인덱스의 상태)를 확인 + +### - git add +: 작업 폴더상의 변경을 인덱스에 추가 +- 작업 폴더의 변경 내용의 일부만 인덱스에 넘김 +``` +$ git add <파일/디렉토리 경로> +``` +- 현재 폴더의 모든 변경 내용을 인덱스로 넘김 +``` +$ git add . +``` +- 작업 폴더 내의 모든 변경 내용을 인덱스로 넘김 +``` +$ git add -A +``` +> - **git add -A** 는 작업 폴더 상에 어디에 위치하든 항상 동일하게 모든 변경 내용을 인덱스로 넘김 +- **git add .** 는 명령어를 실행한 폴더 이하에서 발생한 변경 내용만 포함하며, 해당 폴더 기준으로 상위 폴더의 변경 내용을 포함하지 않고 넘김 + +- 각 변경 사항을 터미널에서 직접 눈으로 하나씩 확인하면서 인덱스로 넘기거나 또는 제외함 +``` +$ git add -p +``` + +### - git rm +: 파일을 삭제 +- 작업 폴더에는 파일을 남겨두고 인덱스에서만 파일 제거 +``` +$ git rm --cached +``` + +### - git commit +: 변경된 내용을 저장소에 추가 +- 에디터를 열지 않고 터미널에서 바로 메시지를 입력 +``` +$ git commit -m "설명" +``` +- 신규 파일을 제외하고 트래킹하는 모든 파일의 변경사항을 인덱스에 넘김과 동시에 저장소에 넘김 +``` +$ git commit -am "설명" +``` +- 이전 commit에 현재 변경 내용 추가 + -> 에디터가 뜨면서 마지막 커밋 메시지를 수정하는 화면이 나오면 저장하고 에디터를 닫으면(:wq) 이전 커밋에 변경내용이 추가됨 +``` +$ git commit --amend +``` + +### - git log +: 커밋 기록 조회 +-> 가장 위에 나오는 내역이 가장 최근 내역 + +### - git reset +: 특정 지점의 과거 커밋으로 이동하고 이동된 이후의 커밋 삭제 +- 돌아가려는 커밋으로 돌아가서 그 이후의 모든 내용을 삭제 +``` +$ git reset --hard "돌아가려는 커밋" +``` +- 돌아가려는 커밋으로 돌아가서 그 이후의 내용이 지워지지 않고, 해당 내용의 인덱스도 지워지지 않음 +``` +$ git reset --soft "돌아가려는 커밋" +``` +- git reset의 default값으로, 돌아가려는 커밋으로 돌아가서 그 이후의 내용들은 남아있지만 인덱스는 초기화됨 +``` +$ git reset --mixed "돌아가려는 커밋" +``` + +### - git revert +: 특정 지점의 과거 커밋으로 이동하고 변경 내역을 유지 +- 커밋을 되돌림**(이력이 남음)** +``` +$ git revert "되돌릴 커밋" +``` + +### - git branch +: 현재 내가 위치한(로컬에서의) 브랜치 확인 +- 브랜치 생성 +``` +$ git branch "브랜치명" +``` +- 브랜치 삭제 +``` +$ git brach -d "브랜치명" +``` +- 로컬+원격 브랜치 확인 +``` +$ git branch -a +``` + +### - git checkout +: 브랜치로 이동 +- 해당 브랜치로 이동 +``` +$ git checkout "브랜치명" +``` +- 브랜치 생성 후 해당 브랜치로 바로 이동 +``` +$ git checkout -b "브랜치명" +``` + +### - git merge +: 브랜치의 변화 가져옴 +``` +$ git merge "가져올 브랜치명` +``` + +### - git rebase +: 현재 브랜치의 base를 합칠 브랜치가 가리키는 커밋을 가리키게 하고 저장해두었던 변경사항을 차례대로 적용 +``` +$ git rebase "합칠 브랜치명" +``` + +### - git remote +: 원격 저장소 관리 +- 원격 저장소 주소 등록 +``` +$ git remote add "원격저장소명" "주소" +``` +- 원격 저장소 주소 삭제 +``` +$ git remote remove "원격저장소명" +``` + +### - git push +: 원격저장소에 커밋을 저장 +- 폴더의 현 브랜치에 커밋된 내용을 "원경저장소명"의 "브랜치명"에 올림 +``` +$ git push "원격저장소명" "브랜치명" +``` +- 원격저장소의 브랜치 삭제 +``` +$ git push -d "원격저장소명" "브랜치명" +``` + +### - git pull +: 원격저장소의 커밋들을 로컬저장소로 가져와서 merge +- "원격저장소명"의 내용이 "브랜치명"으로 복사됨 +``` +$ git pull "원격저장소명" "브랜치명" +``` + +### - git clone +: 원격저장소의 프로젝트를 내려받음 +- 저장소의 내용을 다운로드받고 자동으로 init됨 +``` +$ git clone "저장소주소" +``` + +### - git fetch +: 원격저장소의 커밋들을 로컬저장소로 가져옴 +-> 원래 내용과 바뀐 내용과의 차이를 알 수 있음 \ No newline at end of file diff --git "a/1\354\243\274\354\260\250/\353\247\210\355\201\254\353\213\244\354\232\264 \354\236\221\354\204\261\353\262\225.md" "b/1\354\243\274\354\260\250/\353\247\210\355\201\254\353\213\244\354\232\264 \354\236\221\354\204\261\353\262\225.md" new file mode 100644 index 00000000..87c18b18 --- /dev/null +++ "b/1\354\243\274\354\260\250/\353\247\210\355\201\254\353\213\244\354\232\264 \354\236\221\354\204\261\353\262\225.md" @@ -0,0 +1,214 @@ +# 마크다운 작성법 +## 1. 마크다운이란 +Markdown은 텍스트 기반의 마크업언어로 2004년 존그루버에 의해 만들어졌으며 쉽게 쓰고 읽을 수 있으며 HTMLFH 변환이 가능하다. 특수기호와 문자를 이용한 매우 간단한 구조의 문법을 사용하여 웹에서도 보다 빠르게 컨텐츠를 작성하고 보다 직관적으로 인식할 수 있다. 마크다운이 최근 각광받기 시작한 이유는 깃허브([https://github.com](https://github.com)) 덕분이다. 깃허브의 저장소 Repository에 과한 정보를 기록하는 README.md라는 깃허브를 사용하는 사람이라면 누구나 가장 먼저 접하게 되는 마크다운 문서였다. 마크다운을 통해서 설치방법, 소스코드 설명, 이슈 등을 간단하게 기록하고 가독성을 높일 수 있다는 강점이 부각되면서 점점 여러 곳으로 퍼져가게 된다. + +### 1-1.마크다운의 장점 +``` +1. 간결하다. +2. 별도의 도구없이 작성 가능하다. +3. 다양한 형태로 변환이 가능하다. +4. 텍스트(Text)로 저장되기 때문에 용량이 적어 보관이 용이하다. +5. 텍스트파일이기 때문에 버전관리 시스템을 이용하여 변경 이력을 관리할 수 있다. +6. 지원하는 프로그램과 플랫폼이 다양하다. +``` +### 1-2. 마크다운의 단점 +``` +1. 표준이 없다. +2. 표준이 없기 때문에 도구에 따라서 변환방식이나 생성물이 다르다. +3. 모든 HTML 마크업을 대신하지 못한다. +``` + +## 2. 마크다운 문법 +### 2-1. 헤더 +- 글머리 : 1~6까지 지원 +``` +# 헤더1 +## 헤더2 +### 헤더3 +#### 헤더4 +##### 헤더5 +###### 헤더6 +``` +> +# 헤더1 +## 헤더2 +### 헤더3 +#### 헤더4 +##### 헤더5 +###### 헤더6 + +### 2-2. 블럭인용 +``` +> 블럭인용 +``` +> 블럭인용 + +블럭인용은 연쇄적으로도 가능하다. +``` +> 블럭인용 +>> 블럭인용 +>>> 블럭인용 +``` +> 블럭인용 +>> 블럭인용 +>>> 블럭인용 + +또한 이 안에서 다른 마크다운 요소를 포함할 수도 있다. +``` +> ### 헤더3 + - 리스트 + ``` + 코드 + ``` +``` + +> ### 헤더3 +- 리스트 +``` +코드 +``` + +### 2-3. 목록 +- 순서있는 목록(번호) + 순서있는 목록은 숫자와 점을 사용한다. +``` +1. 첫 번째 +2. 두 번째 +3. 세 번째 +``` +1. 첫 번째 +2. 두 번째 +3. 세 번째 + +현재까지는 어떤 번호를 입력해도 순서는 내림차순으로 정의된다. + +- 순서없는 목록(*, +, -) +``` +* 안녕 + * 잘가 + * 그래 + ++ 안녕 + + 잘가 + + 그래 + +- 안녕 + - 잘가 + - 그래 +``` +* 안녕 + * 잘가 + * 그래 + ++ 안녕 + + 잘가 + + 그래 + +- 안녕 + - 잘가 + - 그래 + +혼합해서 사용하는 것도 가능하다. + +### 2-4. 코드 +코드블럭을 다음 2가지 방식으로 사용할 수 있다. +- ```
{code}
```를 이용 +``` +
+
+public class practice {
+    public static void main(String [] args){
+        System.out.println("Pull Request Test");
+    }
+}
+
+
+``` +
+
+public class practice {
+    public static void main(String [] args){
+        System.out.println("Pull Request Test");
+    }
+}
+
+
+- 코드블럭코드(```)를 이용 + +### 2-5. 수평선 +``` +
+* * * +*** +***** +- - - +----------------------------------------- +``` + +### 2-6. 링크 +- 참조링크 +``` +[link keyword][id] + +[id]: URL "Optional Title here" +``` +링크 : [velog@minide][minidelink] + +[minidelink]: https://velog.io/@minide "Go minide" + +- 외부링크 +``` +[Title](link) +``` +링크 : [velog@minide](https://velog.io/@minide "Go minide") +- 자동연결 + 일반적인 URL 혹은 이메일주소인 경우 적절한 형식으로 링크를 형성한다. +``` +외부링크 : +이메일링크 : +``` + +### 2-7. 강조 +``` +*single asterisks* +_single underscores_ +**double asterisks** +__double underscores__ +~~cancelline~~ +``` +*single asterisks*
+_single underscores_
+**double asterisks**
+__double underscores__
+~~cancelline~~ +> 문장 중간에 사용할 경우 **띄어쓰기**를 사용하는 것이 좋다. + +### 2-8. 이미지 +``` +![Alt text](/path/to/img.jpg) +![Alt text](/path/to/img.jpg "Optional title") +``` + +![test image](https://images.velog.io/images/minide/post/b2763cf5-3351-4ee7-ad1d-d33fcfa43d69/%EB%B0%B0%EA%B2%BD%ED%99%94%EB%A9%B4.jpeg) +![test image](https://images.velog.io/images/minide/post/b2763cf5-3351-4ee7-ad1d-d33fcfa43d69/%EB%B0%B0%EA%B2%BD%ED%99%94%EB%A9%B4.jpeg "test image") + +- 이미지에 링크 삽입 +``` +[![Alt text](/path/to/img.jpg)](URL) +``` +> 이미지 URL : https://github.com/jeongyuneo/2021-Java-Study/blob/jeongyun/image/testimg.jpeg + +[![test image](https://images.velog.io/images/minide/post/b2763cf5-3351-4ee7-ad1d-d33fcfa43d69/%EB%B0%B0%EA%B2%BD%ED%99%94%EB%A9%B4.jpeg)](https://github.com/jeongyuneo/2021-Java-Study/blob/jeongyun/image/testimg.jpeg) + +- 이미지 사이즈 조절 +``` + +``` +test image
+test image
+``` +test image
+test image
+``` +

+참고 : [마크다운 markdown 작성법](https://gist.github.com/ihoneymon/652be052a0727ad59601) \ No newline at end of file diff --git "a/2\354\243\274\354\260\250/intelliJ IDEA Live Template.md" "b/2\354\243\274\354\260\250/intelliJ IDEA Live Template.md" new file mode 100644 index 00000000..bef89e64 --- /dev/null +++ "b/2\354\243\274\354\260\250/intelliJ IDEA Live Template.md" @@ -0,0 +1,63 @@ +# [Java] intelliJ IDEA Live Template + +## 1. Live Template이란 +특정 **Abbreviation(축약형)**값을 입력하면 자주 쓰는 코드 구성을 불러오는 기능이다. + +## 2. Live Template 확인하기 +1. 우측 상단에 [IntelliJ IDEA] - [Preferences...]를 클린한다. + +[![설정](https://images.velog.io/images/minide/post/a76df2bb-6a1e-4fb6-a976-77c9ec668d8a/%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7%202021-01-07%20%EC%98%A4%EC%A0%84%209.51.40.png)](https://github.com/jeongyuneo/2021-Java-Study/blob/jeongyun/image/preferences.jpeg) + +2. [Editor] - [Live Templates]를 선택하거나 우측 검색창에 'Live Templates'를 검색한다. + +[![Live Templates 확인](https://images.velog.io/images/minide/post/3b0d8f2b-57b7-4aec-896c-088ca525561d/%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7%202021-01-07%20%EC%98%A4%EC%A0%84%209.53.24.png)](https://github.com/jeongyuneo/2021-Java-Study/blob/jeongyun/image/livetemplates.jpeg) + +3. 원하는 언어를 찾아 Live Template를 확인한다. + +## 3. 자주 쓰이는 Java Live Template +### 3-1. psvm + Tab +```java +public static void main(String[] args){ + +} +``` +### 3-2. main + Tab +```java +public static void main(String[] args){ + +} +``` +### 3-3. sout + Tab +```java +System.out.println(); +``` +### 3-4. soutf + Tab +```java +System.out.printf(""); +``` +### 3-5. soutp + Tab +```java +System.out.println(method parameter names and values); +``` +### 3-6. soutm + Tab +```java +System.out.println("curren class and method names"); +``` +### 3-7. soutv + Tab +```java +System.out.println(values); +``` +### 3-8. serr + Tab +```java +System.err.println(); +``` +### 3-9. St + Tab +```java +String +``` +### 3-10. fori + Tab +```java +for (int i = 0; i < ; i++) { + +} +``` \ No newline at end of file diff --git "a/2\354\243\274\354\260\250/intelliJ IDEA \353\213\250\354\266\225\355\202\244.md" "b/2\354\243\274\354\260\250/intelliJ IDEA \353\213\250\354\266\225\355\202\244.md" new file mode 100644 index 00000000..3b939552 --- /dev/null +++ "b/2\354\243\274\354\260\250/intelliJ IDEA \353\213\250\354\266\225\355\202\244.md" @@ -0,0 +1,84 @@ +# intelliJ IDEA 단축키 정리 - Mac +## 1. Run and Debug +### - Control + Option + R +: 코드 실행 +### - Control + R +: 현재 코드 실행 +### - Control + Option + D +: 코드 디버깅 +### - Control + D +: 현재 코드 디버깅 +### - Option + Enter +: 오류 해결 솔루션 제시 + +## 2. Focus +### - Command + 방향키(좌, 우) +: 라인 맨 왼쪽 혹은 오른쪽으로 이동 +(= Fn + 방향키(좌, 우)) +### - Option + 방향키(좌, 우) +: 단어 맨 왼쪽 혹은 오른쪽으로 이동 +### - Option + 방향키(위, 아래) +: 포커스 확장 및 축소 +### - Option + Option + 방향키(위, 아래) +: 멀티 포커스 + +## 3. Editor +### - Fn + 방향키(위, 아래) +: 페이지 위 혹은 아래로 이동 +### - Option + Shift + 방향키(위, 아래) +: 라인 단위로 위 혹은 아래로 이동 +### - Command + Shift + 방향키(위, 아래) +: 구문 단위로 위 혹은 아래로 이동 +### - Command + Shift + 방향키(좌, 우) +: 커서부터 맨 왼쪽 혹은 오른쪽까지 선택 +### - Command + Shift + J +: 라인 합치기 +### - Command + Backspace +: 라인 삭제 +### - Command + N +: 생성자/getter/setter 자동완성 +### - Control + Option + O +: import 정리 + +## 4. Finder +### - F2 +: 오류난 곳으로 이동 +### - Command + F +: 현재 파일에서 검색 +### - Command + R +: 현재 파일에서 교체 +### - Command + Shift + F +: 전체에서 검색 +### - Command + Shift + R +: 전체에서 교체 +### - Shift + Control + N +: 파일 검색 +### - Command + Option +O +: 메소드 검색 +### - Command + Shift + A +: 액션 검색 +### - Command + E +: 최근 열었던 파일 목록 +### - Command + Shift + E +: 최근 수정한 파일 목록 +### - Command + Control +G +: 일치하는 단어 전체 선택 +### - Command + Shift + R +: 일치하는 단어 전체 교체 + +## 5. Refactor +### - Fn + Shift + F6 +: 파일 이름 변경 +### - Command + Option + M +: 메소드 분리 +### - Command + Option + c +: 상수 분리 +### - Command + Option + F +: 필드(객체변수) 분리 +### - Command + Option + V +: 지역변수 분리 +### - Command + Option + L +: 코드 컨벤션 체크 +> ### 코드 컨벤션(code convention)이란? + +가독성을 높이기 위한 코드를 작성하는 방법에 대한 규칙 \ No newline at end of file diff --git "a/2\354\243\274\354\260\250/\354\236\220\353\260\224 \352\270\260\354\264\210.md" "b/2\354\243\274\354\260\250/\354\236\220\353\260\224 \352\270\260\354\264\210.md" new file mode 100644 index 00000000..d3c4f4ec --- /dev/null +++ "b/2\354\243\274\354\260\250/\354\236\220\353\260\224 \352\270\260\354\264\210.md" @@ -0,0 +1,98 @@ +# [Java] Java 기초 +## 1. JVM이란 +JVM이란 Java Virtual Machine의 줄임말로 Java Byte Code를 OS에 맞게 해석해주는 역할을 한다. +> ### Java Byte Code +자바 가상 머신(JVM)이 이해할 수 있는 언어로 변환된 자바 소스 코드 +- 운영체제별로 프로그램을 실행하고 관리하는 방법이 다르기 때문에 운영체제와 자바 프로그램을 중계하는 JVM을 두어 자바 프로그램이 **여러 운영체제에서 동일한 실행 결과**가 나오게 한다. +- Java Byte Code의 확장자는 .class + +따라서 OS에 종속적이지 않고 Java 파일 하나만 만들면 어느 디바이스든 JVM 위에서 실행할 수 있다는 것이 Java의 큰 장점이다. + +## 2. JVM 구성 요소 +JVM은 크게 4가지 구성으로 나누어진다. +1. Class Loader +2. Execution Engine +3. Garbage Collector +4. Runtime Data Area + +![](https://images.velog.io/images/minide/post/ae333858-7e81-42c0-b25a-19254a62bd05/%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7%202021-01-07%20%EC%98%A4%ED%9B%84%204.50.54.png) +### 2-1. Class Loader +: Java 컴파일러에 의해 Byte Code로 변환된 클래스를 읽어들여 Runtime Data Area에 적재한다. +### 2-2. Execution Engine +: Class Loader에 의해 Runtime Data Area에 적재된 클래스(Byte Code)를 기계어로 변환하고 실행한다. +### 2-3. Garbage Collector +: Garbage Collector(GC)는 Heap 영역에 생성되어 있는 객체들 중 참조되지 않은 객체를 찾아 제거한다. +- GC가 실행되는 시간은 정해져 있지 않다. 특히 Full GC가 발생하는 경우, GC를 제외한 모든 스레드가 중지되기 때문에 장애가 발생할 수 있다. +### 2-4. Runtime Data Area +: JVM의 메모리 영역으로, Java 애플리케이션을 실행할 때 사용되는 데이터들을 적재한다. +- Method Area + : 클래스 정보가 저장되는 공간 +- Heap Area + : new 키워드에 의해 생성되는 클래스와 배열 등이 저장되는 공간 +- Stack Area + : 지역 변수, 파라미터, 리턴 값, 연산에 사용되는 임시 값 등이 생성되는 영역 +- PC Register + : 스레드가 생성될 때마다 생성되며, 현재 실행 중인 주소와 명령을 저장하는 영역 +- Native Method Stack + : Java 이외의 코드(JNI)가 저장되는 공간 + +## 3. 컴파일하는 방법 +terminal창에서 자바 코드를 실행해보기 위해 "hello, world!"를 출력하는 간단한 예제를 작성하였다. +먼저, javaTest파일이 존재하는 디렉토리로 이동해야하기 때문에 경로를 복사해준다. +![javaTest파일 경로 복사](https://images.velog.io/images/minide/post/13975e2e-4e0f-4842-8f79-373f27d266ec/%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7%202021-01-07%20%EC%98%A4%ED%9B%84%2012.02.46.png) +> 복사한 파일 경로 : /Users/eojeong-yun/IdeaProjects/javastudy/src/main/java/javaTest.java + +복사한 파일의 경로로 이동할때는 마지막에 있는 javaTest.java는 디렉토리가 아니기 때문에 지워야한다. +![디렉토리 이동 후 목록 보기](https://images.velog.io/images/minide/post/b59946eb-84ad-46d4-8fc9-65d28fcb4278/%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7%202021-01-07%20%EC%98%A4%ED%9B%84%2012.04.00.png) +해당 디렉토리로 옮겨서 하위 목록을 보면 javaTest.java라는 파일이 하나 존재한다. +아래 코드를 입력해주고 다시 목록을 봤을 때 javaTest.class라는 파일이 생성됐으면 컴파일에 성공한 것이다. +``` +$ javac 파일명.java +``` +![컴파일 후 목록 보기](https://images.velog.io/images/minide/post/9b5a58f7-c8c6-4487-907f-eda547ad307e/%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7%202021-01-07%20%EC%98%A4%ED%9B%84%2012.04.27.png) + +## 4. 실행하는 방법 +### 4-1. 컴파일한 후 실행하는 방법 +디렉토리 하위 목록을 보면 .java 파일과 .class 파일이 있는 걸 알 수 있다. +![](https://images.velog.io/images/minide/post/9f19e25d-4caf-45ad-ad11-e08e792dad7f/%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7%202021-01-07%20%EC%98%A4%ED%9B%84%2012.18.19.png) + +아래 코드를 입력하면 코드가 실행된다. +``` +$ java 파일명 +``` +![](https://images.velog.io/images/minide/post/4ceecf88-da0c-438b-9149-20c9a9ecfa2f/%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7%202021-01-07%20%EC%98%A4%ED%9B%84%2012.17.54.png) + +### 4-2. 컴파일하지 않고 실행하는 방법 +컴파일을 하지 않았을 때도 자바 코드를 실행해볼 수 있다. +컴파일을 하지 않았을 때는 아래와 같이 Java Byte Code가 없다는 걸 확인할 수 있다. +![java 폴더 목록](https://images.velog.io/images/minide/post/a2b93a9f-7b1b-4296-93de-e2b755688ad0/%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7%202021-01-07%20%EC%98%A4%ED%9B%84%2012.10.34.png) +이럴 때는 아래와 같이 코드 파일에 확장자명까지 추가해주면 된다. +``` +$ java 파일명.java +``` +![컴파일없이 자바 코드 실행](https://images.velog.io/images/minide/post/96f7e2dd-3c22-4add-a8e3-1b9e5af9754e/%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7%202021-01-07%20%EC%98%A4%ED%9B%84%2012.10.51.png) + +## 5. JIT 컴파일러 +### 5-1. JIT 컴파일러란 +JIT란 Just In Time의 약자로, JIT 컴파일러는 **프로그램을 실행하는 시점에(실시간으로) 기계어로 번역**하는 컴파일러이다. +- "한 번 작성하면 어디에서나 실행"이라는 자바의 장점의 핵심인 Byte Code는 애플리케이션에 대한 적절한 기본 명령어로 변환되는 방식에 따라 애플리케이션의 속도에 큰 영향을 미친다. + - JVM의 표준 구현인 Byte Code로 해석하면 프로그램 실행 속도가 느려진다. 따라서 성능을 향상시키기 위해 JIT 컴파일러는 런타임에 JVM과 상호 작용하고 적절한 Byte Code 시퀀스를 반복적으로 해석하고 상대적으로 긴 변환 프로세스의 패널티를 초래하는 것과는 반대로 원시 코드를 실행할 수 있어 실행 속도의 성능 향상으로 이어질 수 있다. + - 메소드가 덜 자주 실행되지 않는 한, JIT 컴파일러가 Byte Code를 컴파일하는 데 걸리는 시간은 전체 실행 시간에 추가되며, JIT에 의해 컴파일된 메소드가 자주 호출되지 않으면 Byte Code를 실행하는 인터프리터보다 실행 시간이 길어질 수 있다. +- JIT 컴파일러는 Byte Code를 Native Code로 컴파일할 때 특정 최적화를 수행한다. JIT 컴파일러는 일련의 Byte Code를 Native Code로 변환하므로 몇 가지 간단한 최적화를 수행할 수 있다. + - JIT 컴파일러가 수행하는 일반적인 최적화 중 일부는 데이터 분석, 스택 작업에서 레지스터 작업으로의 변환, 레지스터 할당에 의한 메모리 액세스 감소, 공통 하위 표현식 제거 등이다. + - JIT 컴파일러가 수행하는 최적화 수준이 높을 수록 실행 단계에서 더 많으 시간을 소비한다. 따라서 JIT 컴파일러는 실행 시간에 추가되는 오버 헤드와 프로그램에 대한 제한된 보기만 가지고 있기 때문에 정적 컴파일러가 수행하는 모든 최적화를 수행할 여유가 없다. + +> JIT 컴파일러는 같은 코드를 매번 해석하지 않고 실행할 때 컴파일하면서 해당 코드를 캐싱해버린 후, 바뀐 부분만 컴파일하고 나머지는 캐싱된 코드를 사용한다. +**따라서, 인터프리터의 속도를 개선할 수 있다.** + +### 5-2. JIT 동작 원리 +JIT 컴파일러는 런타임 시 Java 애플리케이션의 성능을 향상시키는 JRE(Java Runtime Environment)의 구성요소이다. Java 프로그램은 Byte Code를 포함하는 클래스로 구성되는데, 런타임에 JVM은 클래스 파일을 로드하고 각 개별 Byte Code의 의미를 결정하고 적절한 계산을 수행한다. 해석 중 추가 프로세서 및 메모리 사용량은 Java 애플리케이션보다 느리게 수행됨을 의미한다. JIT 컴파일러는 런타임에 Byte Code를 Native Code로 컴파일하여 Java 프로그램의 성능을 향상시킨다. +![JIT 동작 원리](https://images.velog.io/images/minide/post/9bb05cd4-732d-471f-af94-8a1d21141ff6/%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7%202021-01-07%20%EC%98%A4%ED%9B%84%204.30.17.png) + +## 6. JDK와 JRE의 차이 +- JDK(Java Development Kit)는 자바 개발 키트이다. + JDK = JVM + 라이브러리 API + 컴파일러 +- JRE(Java Runtime Environment)는 자바 실행 환경이다. + JRE = JVM + 라이브러리 API + +> 자바 프로그램을 개발하려면 JDK를 사용하면 되고, 개발된 프로그램을 실행만 한다면 JRE만 설치하면 된다. \ No newline at end of file diff --git a/README.md b/README.md index e0939477..fa26737c 100644 --- a/README.md +++ b/README.md @@ -11,4 +11,4 @@ ## 결과 -### 1주차 +### 1주차 \ No newline at end of file diff --git a/image/livetemplates.jpeg b/image/livetemplates.jpeg new file mode 100644 index 00000000..72df1649 Binary files /dev/null and b/image/livetemplates.jpeg differ diff --git a/image/preferences.jpeg b/image/preferences.jpeg new file mode 100644 index 00000000..60ee8f20 Binary files /dev/null and b/image/preferences.jpeg differ diff --git a/image/testimg.jpeg b/image/testimg.jpeg new file mode 100644 index 00000000..c09473f6 Binary files /dev/null and b/image/testimg.jpeg differ