원티드 프리온보딩 백엔드 챌린지 - 1 주차 첫번째 수업 정리 -1

박경현·2023년 6월 7일
0

원티드에서 이번에 백엔드 챌린지를 열어주었다!

JVM부터 GC, Thread에 대한 전반적이면서 디테일하게 알려주는 수업들로
구성이 되어있어서 보자마자 신청해버렸다!!

저녁시간 월,수 여서 부담도 없고 편하게 듣고 있다

JAVA란 & 자바가 순수 객체 지향이 아닌 이유!

자바는 1995년에 나온 프로그래밍 언어이다
write once, run anywhere => 즉 플랫폼에 구애받지 않고 사용가능한 언어다!
Class based로 되어있음
JVM으로 동작하며 순수 OOP는 아니다!!

그렇다면 왜 자바는 순수 OOP라고 칭해지지 않는 것일까?

순수 객체 지향 언어의 특징에는

추상화, 다형성, 캡슐화, 상속, 객체에 대한 모든 작업은 객체가 정해야함 등 여러 특징이 있다

이때 자바에는 primitive type이라는 int, char, boolean등의 기본 타입 변수가 존재한다!!

자바에서 객체는 String, Int, Character이 있는데 이거 말고 기본타입으로도 프로그래밍 하기에 완전 OOP는 아니다!

추가로 static메서드를 통해 인스턴스의 생성없이 메소드 호출이나 변수 호출이 가능해서 객체를 굳이 안만들고도 어느정도 프로그래밍이 가능해버린다!!

JAVA 아키택쳐

자바의 아키텍처를 검색하면 가장 많이 나오는 그림 중 하나다

JDK - 가장 큰 범주이면서, 자바 개발용 키트임
JRE - 자바 실행환경(JVM + Library) -> 현재는 jdk 내부에 그냥 포함되어서 굳이 따로 설치 안해도 된다!
JVM - 가장 중요!! 논리적 개념, 자바 바이트코드를 기계어로 번역하고 실행!!

JVM의 동작방식

차고로 자바는 JVM 덕분에 다양한 플랫폼에서 동작이 가능한 것이다! (이유는 아래서 설명)

JVM 내부 구조(큰 범위)

Class Loader - 바이트 코트를 동적으로 로딩해서 메모리에 넣어준다!
Runtime Data Areas - 앱 실행을 위해 사용되는 OS로부터 할당받은 메모리 공간
Execution Engine - 메모리 영역에 있는 데이터를 가져와 해당 작업을 수행함!

그렇다면 Java의 동작 방식 정리!

  1. 작성한 소스 파일 (.java)를 java컴파일러(javac)가 바이트코드(.class)로 변환
  2. JVM이 실행되면 바이트 코드 실행에서 필요한 것들을 클래스 로더가 로딩!

    메모리에 로딩된 클래스의 구조, 메서드 등의 일련 정보들을 JVM내부에 저장

  3. 로딩된 클래스의 바이트 코드를 JVM의 실행 엔진이 해석, 실행

    인터프리터를 통해 해석과 동시에 실행!

  4. 실행준비 모두 완료되면 jvm은 메인 메서드인 (Entry point)를 호출
  5. 호출된 메인 메서드를 실행힐 스레드가 생성되면서 메인 스레드의 jvm stacl이 생성됨
  6. 그 후 메인 스레드 jvm stacks에 메인 메서드 스택 프레임이 붙음
profile
SW로 문제를 해결하려는 열정만 있는 대학생

0개의 댓글