[데브코스] Java 기초 및 개발환경 세팅

Updated: Categories:

W1D1 - 이제 시작이다 !!

Java 기초

Java는 어떻게 실행되나?

  • JVM(Java Virtual Machine) : 자바 프로그램 컴파일 결과를 실행시켜주는 가상 머신
  • JRE(Java Runtime Environment) : JVM을 동작시키는 자바 실행환경
  • JDK(Java Development Kit) : JVMJRE를 합친 자바 개발도구

Java 설치

  • 자바를 처음 개발한 것은 SUN Micro Systems지만 Oracle사가 모든 라이센스를 인수하였음
  • 다운로드 방법에는 두가지 선택지가 있다
    • Oracle : 라이센스를 구매해야 JDK 사용가능
    • Open JDK : 무료로 다운로드 가능
  • JDK를 다운로드했다면 환경변수(Path) 설정을 해주어야 한다.
  • 잘 설치되었다면 커맨드에 아래 명령어가 잘 실행되어야 한다.


컴파일과 실행

  • 자바를 실행시키려면 아래 과정을 거쳐야 한다.
    1. 파일명.java 파일 작성
    2. javac 파일명.java 자바 파일 컴파일 -> class 파일(byte 코드) 생성
    3. java 파일명 으로 실행
  • VScode에서 이것만 수행하려면 extension에서 java compile pack을 설치하면 된다
  • 코테 레포에 자바 저장하려고 푸는건 eclipse에서 하고 코드는 저장소에 복붙했는데… 이젠 그냥 VScode에서 풀 수 있다(개꿀)


Gradle

Build Tools

  • 위처럼 컴파일하고 실행하는건 귀찮은 일이다.
  • 이를 자동으로 빌드, 실행해주는 툴들이 있음
    • Ant, Maven, Gradle
  • 요즘 트렌드는 Gradle 이라고 함 (왠지 다들 그거 쓰더라)

설치하기

  1. https://gradle.org/ -> 여기서 다운로드
  2. 다운로드 폴더 압축 풀어서 C드라이브로 옮겨~
  3. 시스템 환경 변수 편집 -> 환경 변수 클릭 -> 시스템 변수 새로 만들기 -> 변수이름 GRADLE_HOME, 변수 값은 경로 -> 시스템 변수 Path 선택 -> 편집 -> 새로 만들기 %GRADLE_HOME%\bin 추가
  4. 커맨드에 아래 처럼 나오면 성공

프로젝트 생성하기

  • 커맨드를 입력해서 프로젝트를 생성해보자
  • 설정을 계속 물어보는데 목적에 맞게 선택해주면 된다.

폴더 구조

  • 이렇게 생성하면 아래처럼 폴더 구조가 잡혀있음

  • 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가 나온다.
  • 변수 ab의 값은 똑같기에 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 메소드를 호출 가능
  • 🚀 포스팅 이동