240722 내일배움캠프 백엔드 Java 6기 TIL : Java문법 종합반 1일차 Summary(JVM, 자료형)

박대현·2024년 7월 22일
0

1. JVM : 어느 장비에서나 JAVA프로그램을 실행시켜주는 역할

A. JVM 구성요소

  • 컴파일러 : Java -> 바이트코드(.class)
    • Java파일은 컴퓨터가 직접 읽을 수 없다. '해당 운영체제'가 읽을 수 있는 파일로 바꿔준다.

      자바를 컴파일하면 exe파일을 안만들고 굳이 class파일을 생성할까?
      : C처럼 exe프로그램을 바로 만들수있으면 속도가 빠르지만 해당 운영체제에서밖에 동작할 수 없다. 하지만 자바처럼 목적파일인 class파일을 따로 만들면 속도는 느릴지라도 어느 운영체제에서라도 동작이 가능하다는 장점이 있다. 심지어 JIT시스템으로 속도가 많이 개선되었다.

  • 실행엔진(Execution)
    • 인터프리터 : 바이트코드(.class) -> 기계어
    • JIT 컴파일러 : 인터프리터 서포터
  • 메모리 영역 : 할당받은 JVM이 일하는 공간
  • 클래스 로더 : 바이트코드를 메모리에 저장

B. 프로세스

  • 자바파일을 컴파일러가 바이트코드로 변환 -> 클래스로더가 JVM 메모리영역으로 가져다놓음 -> 실행엔진이 기계어로 번역 -> 런타임시스템으로 이관
    • 런타임시스템
      • Method Area : 클래스가 로드되고 처음 메모리공간에 왔을 때 초기화대상을 저장
      • Heap Area : 객체가 생성되는 영역
      • Stack Area : 실행되는 메소드 및 if절같은 블록들{}에 대한 데이터가 저장

C. JRE & JDK

  • JRE : 자바 실행환경. class 실행만 가능
  • JDK : JRE + 컴파일러 + 디버깅

2. 기본형 / 참조형 / 래퍼클래스

A. 기본형 : Byte단위로 크기가 정해져 있다.

  • 숫자 : int, long, float, double
    • 정수 디폴트는 int, 실수 디폴트는 double(정밀도가 더 높다)
  • 문자 : char : 초기화시, 홑따옴표를 쓴다('')
  • 논리 : boolean

B. 참조형 : 크기가 알수없고 정해져 있지 않기에 객체의 주소값을 저장한다.

  • 원본값 : Heap영역 = 동적으로 할당된 메모리 영역, 크기가 늘어날 수 있음
    주소값 : Stack영역 = 정적인 메모리 영역
  • ex)String : 초기화시, 쌍따옴표를 쓴다 (""), List, Array...

C. 래퍼클래스 : 기본형을 박싱(Boxing)해서 클래스 메소드활용으로 확장성을 넓힐 수 있다.(객체지향 활용)

// 박싱
// Integer 래퍼 클래스 num 에 21 의 값을 저장
int number = 21;
Integer num = new Integet(number);

// 언박싱
int n = num.intValue(); // 래퍼 클래스들은 inValue() 같은 언박싱 메서드들을 제공해줍니다.

3. Etc

  • "모든 자바 프로젝트는 제일먼저, 클래스의 main 메소드를 실행시킨다." 그래서 main 메소드가 반드시 있어야한다.
  • 아스키코드
public class HelloWorld {
   public static void main(String[] args) {
      int number = 65;
      char letter = 'A';

      char ch = (char) number;
      number = (int) letter;

      System.out.println(ch); //A
      System.out.println(number); //65
   }
}
  • 형변환
public class HelloWorld {
   public static void main(String[] args) {
      String str = "3";

      System.out.println(str.charAt(0) - '0'); //숫자 3
      System.out.println(str.charAt(0) - '0' + 1); // 숫자 4
      System.out.println(str + 1); //31
      System.out.println(3 + '0'); //51. '0'은 숫자로 48
      System.out.println((char)(3 + '0')); //3
   }
}

0개의 댓글