무작정 개발.Vlog

자바의 정석 | Ch 01 - 자바를 시작하기 전에

by 무작정 개발
반응형

지금부터 자바의 정석3판(남궁성 저저) 의 책을 쭉 보며 공부한 자료를 요약해서 정리하고자 한다. 자바의 정석 글모음에 있는 소스 및 자료들은 자바의 정석에서 가져온 자료들이라 상업적인 이유로 무단 배포는 금지!  자세한 것은 하단 링크 참조.

 

카페 : https://cafe.naver.com/javachobostudy?iframe_url=/MyCafeIntro.nhn%3Fclubid=10286641 

 

남궁성의 코드초보스터디(자바 java... : 네이버 카페

전문가가 지도하는 스터디카페에요. 프로그래밍언어(자바 java, C언어)를 제대로 배우고픈 분들 오세요.

cafe.naver.com

 

사용 책 : 자바의 정석 3판 / 저자 : 남궁성


남궁성님 유튜브 자바 공부방법 정리

● 자바하고 같이 공부하면 좋은 것?

- 자바와 성격이 다른 것

- 언어가 아닌 것

- HTML/CSS와 같이 프론트엔드 부분

- 자바와 같이 프로그래밍 알고리즘 하다가 머리아프면 프론트엔드하며 머리식히고 반복

 

● 웹 개발자가 되려면 공부 순서

-> 자바 - 1~5장 진행

-> 자바 - 6장, 7장(객체지향) 최소한 5번 이상 반복하기 + 객체지향 요약본은 전부 암기

-> 자바 8,9,10장은 가볍게 보기

-> 자바 11장은 여러번 반복하기(어렵기 때문)

-> 자바 12장은 가볍게 보기(어려움)

-> 자바 13,14,15,16장은 jsp와 스프링과 연결된다. 굳이 뺀다면 13장(스레드)를 가볍게 본다.

 

- 정독 + 실습 + 연습문제 5회 이상 + OPP개념 명확히 잡기

 

-> JSP - 게시판 만드는 깊은 공부 No!

- 간단히 기본만 JSP, Servlet, request, response, forward, redirect, include, EL, JSTL 등만 알고 넘어가기.

 

-> Spring - oop, 디자인패턴

- 원리 개념 파악 전, 사용법을 먼저 익혀야.

- 사용법 익힌 후, 원리 파악하기


1. 자바란?

썬 마이크로시스템즈에서 개발하여 1996년 1월에 공식 발표한 객체지향 프로그래밍 언어
자바로 작성된 프로그램은 운영체제 종류에 관계없이 실행 가능하다는 큰 장점이 있음
객체지향 개념과 C++의 장점을 채택하고 불필요한 부분은 제거해 간결하게 배우고 활용가능

 

1.1 Java 언어의 특징

  • 운영체제에 독립적
  • 객체지향언어
  • 비교적 배우기 쉬움 (단순함)
  • 자동 메모리 관리 (Garbage Collection)
  • 네트워크 분산처리 지원
  • 멀티쓰레드를 지원
  • 동적 로딩 지원

 

1.2 JVM( Java Virtual Machine)

  • JVM은 자바를 실행하기 위한 가상 컴퓨터(실제 컴퓨터가 아닌 소프트웨어로 구현한 것)이다.
  • JVM은 JAVA와 OS 사이에서 중개자 역할을 수행하여 JAVA가 OS에 독립적 이며, 재사용이 가능하다.
    • 자바 응용프로그램은 OS가 아닌 JVM과 통신하고, JVM은 자바 응용프로그램으로부터 전달받은 명령을 해당 OS가 이해할 수 있도록 변환하여 전달한다.
  • JVM은 메모리 관리  Garbage Collection 을 수행한다.

 

JVM 구조

 

JVM 구조
JVM 구조

 

Class Loader(클래스 로더)

자바 컴파일러를 사용해서 .java 파일을 .class(바이트코드) 파일로 컴파일함. 이후, Class Loader를 통해 JVM에 .class 파일을

로드하고, 링크를 통해 배치하는 작업을 수행한다.

Execution Engine(실행 엔진)

.class 파일을 실행시키는 역할이다. 클래스 로더가 JVM 내의 Runtime Data Area에 .class(바이트코드) 를 배치하고, 이를

실행 엔진에 의해 실행된다.

  • Interpreter
    바이트 코드를 명령어 단위로 읽어서 실행하는 인터프리터. 한 줄씩 수행하기 때문에 느리다는 단점이 있다.
  • JIT compiler(Just - In - Time)
    JIT 컴파일러는 인터프리터 방식의 단점을 보완하기 위해 도입했다.
    인터프리터 방식으로 실행하다가 적절한 시점에 바이트 코드 전체를 컴파일하여 네이티브 코드로 변경하고, 이후에는 네이티브 코드를 직접 실행하는 방식이다.
    단, JIT 컴파일러가 컴파일하는 과정은 바이트 코드를 인터프리팅하는 것보다 훨씬 오래 걸리므로, JIT 컴파일러를 사용하는 JVM은 내부적으로 해당 메서드가 얼마나 자주 수행되는지 확인하여, 일정 정도를 넘을 때에만 컴파일을 수행한다.

GC(Garbage Collector)

GC는 동적 할당된 메모리 영역(heap) 중에서 더 이상 사용하지 않는 영역을 탐지하여 자동으로 해지하는 기법으로, 프로그래머가 메모리를 따로 관리하지 않아도 된다.

Runtime Data Area

자바 프로그램을 수행하기 위해 OS에서 할당 받은 메모리 공간을 의미한다.

  • PC Register
    JVM은 스택 기반의 방식으로 작동하는데, CPU에 직접 Instuction을 수행하지 않고, 스택에서 Operand(주소)를 뽑아 이를 별도의 메모리 공간(PC Register)에 저장한다.
    따라서, 현재의 어떤 명령을 실행해야할 지에 대한 부분을 기록한다.
  • JVM stack
    프로그램 실행과정에서 호출된 메서드의 파라미터, 지역 변수, 리턴 값 및 연산 값 등이 임시로 저장되는 영역이다.
  • Native Method stack
    자바 프로그램이 컴파일되어 생성되는 바이트 코드가 아닌 실제 실행할 수 있는 기계어로 작성된 프로그램을 실행시키는 영역이다.
    JAVA Native Interface를 통해 바이트 코드로 전환하여 저장한다.
  • Heap
    GC의 대상이 되는 영역. 프로그램 실행 중 생성되는 인스턴스(new 연산자)는 모두 Heap 영역에 생성된다.
    즉, 인스턴스변수(instance variable)들이 생성되는 공간이다.
  • Method Area
    프로그램 실행 중 어떤 클래스가 사용되면, JVM은 해당 클래스의 클래스파일(*.class)을 읽어서 분석하여 클래스에 대한 정보(클래스 데이터)를 이곳에 저장한다.
    이 때, 그 클래스의 클래스변수(class variable)도 Method Area(메서드 영역)에 함께 생성된다.

 

반응형

블로그의 정보

무작정 개발

무작정 개발

활동하기