Live-Study 11

6 주차 - 패키지

학습 내용 package 키워드 import 키워드 접근제어자 클래스패스 CLASSPATH 환경변수 -classpath 옵션 패키지 클래스를 구분짓는 폴더 개념 자바는 패키지의 가장 상위 디렉토리 ( root ) 에서 실행해야한다는 약속이 있기 때문에 해당 패키지로 가서 컴파일 하지 않는다. 소스에 가장 첫 줄에 있어야하고, 패키지 선언은 소스 하나에 하나만 있어야 한다. 패키지 이름과 위치한 폴더의 이름이 같아야 한다. 패키지 이름을 java 로 시작하면 안된다. 모든 클래스에는 정의된 클래스 이름과 패키지 이름이 있다. 이 둘을 합쳐야 완전하게 한 클래스를 표현한다고 할 수 있으며, FQCN ( Fully Qualified Class Name ) 이라고 한다. 패키지 이름 명명 규칙 패키지 이름은 모..

Live-Study 2021.06.21

4 주차 - 클래스 ( Class )

클래스와 객체 클래스는 객체지향 프로그래밍 ( Objec - oriented programming ) 에서 객체를 생성하기 위해 상태 ( State ) 와 행동 ( Behavior ) 을 정의하는 일종의 설계도이다. 여기서 객체란 어플리케이션의 기능을 구현하기 위해 서로 협력하는 개별적인 실체로써 물리적일 수도 있고 개념적일 수도 있다. 객체지향의 4대 특성 ( 추상화, 캡슐화, 상속, 다형성 ) 을 통해 프로그램 개발 및 유지보수를 더욱 쉽고 빠르게 할 수 있을 것이다. 클래스 선언 클래스 이름은 다른 클래스와 식별할 수 있어야해서 다음과 같은 자바 식별자 규칙에 따라 만들어야 한다. 1) 클래스명은 자바 메소드명과 다르게 첫글자를 대문자로 표현한다. 여러 단어가 혼합되면 CamelCase 를 따른다...

Live-Study 2021.04.27

3주차 : 연산자

연산자 ( Operator ) : 연산을 수행하는 기호 * 피연산자 : 연산자의 작업 대상 * 단항 연산자 : 피연산자를 하나만 받는 받는 연산자는 단항(Unary) 연산자라고 부릅니다. 피연산자의 부호를 뒤집는 단항 마이너스 연산자가 단항 연산자의 대표적인 예 입니다. * 이항 연산자 : 두 개의 피연산자를 받는 연산자는 이항(Binary) 연산자라고 부릅니다. 산술 연산자 산술 연산자 (Arithmetic Operator) 는 정수, 부동소수점, 문자열 등 Boolean 타입을 제외한 모든 Primitive Type 에서 사용이 가능합니다. 피연산자들 중 부동소수점이 있다면 부동소수점 산술이 되고 그렇지 않다면 정수 산술이 됩니다. 정수 산술과 부동 소수점 산술이 나누기를 수행하는 방식과 언더플로우(..

Live-Study 2021.03.20

2주차 : Java 데이터 타입, 변수 그리고 배열

1. 원시 or 기본형 타입 ( Primitive type ) 종류와 값의 범위 그리고 기본 값 기본 값이 있기 때문에 NULL 이 존재하지 않는다. 만약 기본형 타입에 NULL 을 넣고 싶다면 래퍼 클래스를 활용한다. 실제 값을 저장하는 공간으로 스택(Stack) 메모리에 저장된다. 만약 컴파일 시점에 담을 수 있는 크기를 벗어나면 에러를 발생시키는 컴파일 에러가 발생한다. 주로 문법상의 에러가 많다. 종류 2. 참조 타입 ( Reference Type ) 기본형 타입을 제외한 타입들이 모두 참조형 타입(Reference Type) 이다. 빈 객체를 의미하는 NULL이 존재 한다 값이 저장되어 있는 곳의 주소 값을 저장하는 공간으로 힙(Heap) 메모리에 저장된다. 문법상으로는 에러가 없지만 실행시켰을..

Live-Study 2021.03.07

1주차 : JDK 와 JRE 차이

JDK 와 JRE 차이 1. JDK : Java Development Kit ( 자바 개발 도구 ) JRE : Java Runtime Environment ( 자바 실행 환경 ) 즉, 자바 언어로 프로그램을 개발하기 위해서는 JDK 를 설치해야 하고 자바 언어로 작성된 프로그램을 실행하기 위해서는 JRE 를 설치해야 한다. JDK 를 설치하면 JRE 가 포함되어 같이 설치된다. JRE 는 자바 Application을 수행하기 위한 SW ( JVM 과 Class Libraries 등 최소한의 환경 ) 라고 볼 수 있고 JDK 는 JRE + 개발에 필요한 SW 를 모아 놓은 좀 더 큰 범위의 SW 라고 볼 수 있다. 자바 어플리케이션을 개발하기 위해서는 JDK 를 필수로 설치 해야 한다.

Live-Study 2021.02.28

1주차 : JVM 구성 요소

1. Class Loader : 클래스 파일을 로드하는 데 사용되는 하위 시스템이다. 2. Method Area : JVM Method Area 는 메타 데이터, 상수 런타임 풀, 메서드에 대한 코드와 같은 클래스 구조를 저장한다. 공유자원 ( 여기서 공유자원이라는 의미는 다른 스레드에서도 활용 가능한 자원을 말함) 이다. 3. Heap : 모든 객체, 관련 인스턴스 변수 및 배열은 Heap 에 저장된다. 이 메모리는 여러 스레드에 걸쳐 공유된다. 4. JVM Language Stack : Java Language Stacks 는 로컬 변수를 저장하고 부분적인 결과를 얻는다. 각 스레드에는 자체 JVM 스택이 있으며, 스레드가 생성될 때 동시에 생성된다. 메서드를 호출할 때마다 새 프레임이 생성되고, 메..

Live-Study 2021.02.28

1주차 : JIT 컴파일러란 무엇이며 어떻게 동작하는지

JIT 컴파일러란 무엇이며 어떻게 동작하는가 ? JIT 컴파일러 - 기존 클래스파일(바이트코드)를 실행하는 방법은 Interpreter 방식이 기본이다. Interpreter 방식은 명령어를 하나씩 해석해서 처리하는 개념이기 때문에 명령어 하나하나 실행하는 속도는 빠를지 모르지만 전체코드 관점에서는 실행 속도가 느린 단점을 가지고 있다. 해당 문제를 해결하기 나온 방법이 JIT 컴파일러이고 JIT 컴파일러는 런타임 시 클래스파일(바이트코드)를 네이티브 기계어로 한방에 컴파일 후 사용하는 개념으로 이해하는 것이 편한다. 전체 컴파일 후 캐싱 > 이후 변경된 부분만 컴파일하고 나머지는 캐시에서 가져다가 바로 실행. 바로 꺼내서 사용하고 변경 부분만 컴파일 하기 때문에 코드 수행속도가 Interpreter 방..

Live-Study 2021.02.28

1주차 : Byte Code 란 무엇인가 ?

Byte Code란 무엇인가 ? 자바 가상 머신이 이해할 수 있는 언어로 변환된 자바 소스 코드, 자바 컴파일러로 변환되는 코드의 명령어 크기가 1 바이트라서 바이트 코드라고 불린다고 한다. 다시 풀어서 이해하자면 자바는 OS에 종속적이지 않기 위해서 JVM이 이해할 수 있는 언어인 바이트 코드 형태로 제공되고 바이트 코드와 JVM이 있으면 어느 운영체제에 종속적이지 않고 실행된다고 이해하면 된다. ( .java 파일은 확장자가 java인 단순 텍스트 파일이다 ) 프로그램을 실행하는 것은 결국 컴퓨터이다. 다시 말해 프로그램은 컴퓨터가 이해할 수 있는 형태로 작성되어 있어야 한다. 자바 문법으로 작성한 .java 파일은 사람이 이해할 수 있는 언어로 작성했기 때문에 컴퓨터는 이해할 수 없다. 그렇기 때문..

Live-Study 2021.02.28

1주차 : 실행하는 방법 ( JVM 실행 방법 )

java filename.class 위 명령어로 실행할 때 JVM 의 구성요소인 Class Loader 가 fileName.class 파일을 메모리 상의 JVM으로 가져온다. 내부적으로는 ClassLoader > Byte Code Verifier ( 바이트 코드 변조 확인 ) > Execution Engine 에서 실행되는 구조다. Execution Engine 에서 클래스파일( 바이트코드로 구성) 을 기계어로 변경해서 명령어 단위로 실행한다. 다만 명령어 단위 실행은 2가지 방식으로 동작한다. Interpreter 방식 : 명령어를 하나씩 수행 하는 방식 JIT 방식 : 전체 바이트 코드를 네이티브 코드로 변환하고 그 이후에는 네이티브 코드로 실행하는 방식

Live-Study 2021.02.23

1주차 과제 : 컴파일 하는 방법

Java Compiler 흔히 우리가 JIT Compiler 라고 부르는 Compiler 는 실행중에 바이트 코드를 여러가지 다양한 테크닉을 사용하여 JVM 해석 엔진 없이 바로 수행되는 기계어 코드를 만들어 낸다. 그럼으로써 바이트 코드가 가지는 장점과 기계어가 가지는 장점을 결합할 수 있다. 과정 1. Java Compiler (javac 명령어 실행)에 의해 Java Source ( .java 확장자) 로부터 Byte Code ( .class 확장자 )가 생성된다. 2. JVM에 있는 Class Loader 에 의해 Byte Code는 JVM내로 로드되고 실행엔진에 의해 기계어로 해석되어 메모리 상 ( Runtime Data Area)에 배치된다. 3. 실행엔진에는 Interpreter와 JIT (..

Live-Study 2021.02.22