[데브코스] Java 기초 및 개발환경 세팅
Updated: Categories: TILW1D1 - 이제 시작이다 !!
Java 기초
Java는 어떻게 실행되나?
JVM(Java Virtual Machine)
: 자바 프로그램 컴파일 결과를 실행시켜주는 가상 머신JRE(Java Runtime Environment)
:JVM
을 동작시키는 자바 실행환경JDK(Java Development Kit)
:JVM
과JRE
를 합친 자바 개발도구
Java 설치
- 자바를 처음 개발한 것은 SUN Micro Systems지만 Oracle사가 모든 라이센스를 인수하였음
- 다운로드 방법에는 두가지 선택지가 있다
Oracle
: 라이센스를 구매해야 JDK 사용가능Open JDK
: 무료로 다운로드 가능
- JDK를 다운로드했다면 환경변수(Path) 설정을 해주어야 한다.
- 잘 설치되었다면 커맨드에 아래 명령어가 잘 실행되어야 한다.
컴파일과 실행
- 자바를 실행시키려면 아래 과정을 거쳐야 한다.
파일명.java
파일 작성javac 파일명.java
자바 파일 컴파일 -> class 파일(byte 코드) 생성java 파일명
으로 실행
- VScode에서 이것만 수행하려면 extension에서
java compile pack
을 설치하면 된다 - 코테 레포에 자바 저장하려고 푸는건 eclipse에서 하고 코드는 저장소에 복붙했는데… 이젠 그냥 VScode에서 풀 수 있다(개꿀)
Gradle
Build Tools
- 위처럼 컴파일하고 실행하는건 귀찮은 일이다.
- 이를 자동으로 빌드, 실행해주는 툴들이 있음
Ant
,Maven
,Gradle
- 요즘 트렌드는
Gradle
이라고 함 (왠지 다들 그거 쓰더라)
설치하기
- https://gradle.org/ -> 여기서 다운로드
- 다운로드 폴더 압축 풀어서 C드라이브로 옮겨~
- 시스템 환경 변수 편집 -> 환경 변수 클릭 -> 시스템 변수 새로 만들기 -> 변수이름
GRADLE_HOME
, 변수 값은 경로 -> 시스템 변수 Path 선택 -> 편집 -> 새로 만들기%GRADLE_HOME%\bin
추가 - 커맨드에 아래 처럼 나오면 성공
프로젝트 생성하기
- 커맨드를 입력해서 프로젝트를 생성해보자
- 설정을 계속 물어보는데 목적에 맞게 선택해주면 된다.
폴더 구조
- 이렇게 생성하면 아래처럼 폴더 구조가 잡혀있음
build.gradle
커맨드 명령어들을 정의하는 파일src
하위 폴더들이 실제로 사용하는 폴더임main
당연히 메인로직이 동작하는 곳test
테스트 코드를 작성하는 곳resource
asset 파일 넣는곳
Gradle 명령어 메모
# 프로젝트 생성
> gradle init
# 빌드
> gradle build
# 실행
> gradle run
# task 확인
> gradle tasks
IntelliJ
설치 및 프로젝트 생성
- 설치방법은 간단하고 이미 설치했기에 pass
- 프로젝트 생성도 pass
단축키
- Intellij 단축키 보고 완전 꿀이라고 생각했다. 개발 속도를 엄청 향상시켜줄 것 같다.
- 자주 쓸만한 단축키를 정리해보자 (안써놓으면 100% 까먹음)
단축키 | 설명 |
---|---|
Alt + Enter | 수정 도우미 |
Ctrl + Space | 추천 도우미 |
Shift + Shift | 패키지 검색 |
Ctrl + W | 드래그블록 범위 확장 |
Ctrl + Shift + W | 드래그블록 범위 축소 |
Ctrl + Alt + L | 코드 정렬 |
Shift + Tab | 왼쪽 정렬 |
Ctrl + Shift + Alt + T | 리팩토링 메뉴(중요) |
Ctrl + Alt + V | 변수 리팩토링 |
Alt + I (원래 insert) | 오버라이딩 단축키(난 i로 바꿈) |
Ctrl + Shift + A | 액션 검색 |
Ctrl + F10 | 실행서버 옵션 |
Alt + Shift + U | Camel Case 변경 |
Coding Convention
그게 뭐야?
- Team 협업 시 코딩 규칙임
- 보통 Java 개발자끼리의 암묵적인 Rule을 지켜야 한다.
- 참고링크
메소드/변수명
- 클래스 첫 글자는
대문자
, 메소드 첫 글자는소문자
스네이크 케이스
X ->카멜 케이스
O들여쓰기
할땐 Tab과 Space 혼용 금지
Reference
- Java에서는 포인터 대신
Reference
라는 개념이 있다 - Java에선 alloc/free를 신경쓰지 않아도 된다.
- Java에선 8가지를 제외한 모든 것이 레퍼런스이다.
Primitive value
: boolean, byte, int, short, long, float, double, char- Array는
Reference
로 취급한다.
- Call by value :
Primitive value
로 선언된 값은 메모리 공간 안에 그 값이 저장됨 - Call by Reference :
Reference value
는 메모리 공간에 실제 값을 가지는 주소를 저장함
Constant Pool
- Java에선 String을
constant pool
이라는 공간에 저장하는 방식으로 사용
예제 1
String a = "Hello World";
String b = "Hello World";
System.out.println(a == b);
- 위 코드의 결과는
true
가 나온다. - 변수
a
와b
의 값은 똑같기에constant pool
에는 “Hello World” 라는 String 하나만 생성되고 문자열을 재활용한다.
예제 2
String a = "";
for (int i =0 ; i < 10 i++){
a += i ;
}
- 위 코드에서는 빈 String에 늘어나는 값을 하나씩 추가한다.
- 이 과정에서 내부적으로
a
라는 변수에 계속 추가되는 것이 아니라constant pool
이라는 곳에서 하나씩 추가되는 새로운 문자열이 생성된다. ex) “” + “0” + “01” + “012” + … - for문이 끝나면 최종적으로 10개의 문자열이 생성되었을 것이고, 그 중 최종 값이
a
에 담긴다. - 이는 매우 메모리측면에서 비효율적인 방법이므로 사용하지 말자
예제 3
StringBuffer sb = new StringBuffer();
for (int i =0 ; i < 10 i++){
a += i ;
}
StringBuffer
를 사용하면 buffer 공간이 따로 생성된다- for 문을 돌 때 예제 2처럼
constant pool
에 문자열이 계속 저장되지 않고StringBuffer
에서 변경되다가 최종 값만이constant pool
에 저장된다. - 메모리측면에서 매우 효율적!
StringBuilder vs StringBuffer
Object 객체
- 모든 객체의 최상위 객체
- 따라서 모든 객체는 Object 메소드를 호출 가능
- 🚀 포스팅 이동