[JAVA] 1주차 : JVM, 변수

INHEES·2023년 7월 24일

Java

목록 보기
1/13

JAVA 문법 1주차 : JVM, 변수

JAVA 언어

Java는 여러 기기에서 실행 가능하도록 도와주는 공통 실행환경, 그리고 데잍와 메서드를 담는 클래스를 통해 객체를 만들 수 있는 대표적인 객체 지향 언어이다.

JAVA 언어의 특징

  1. 공통 실행환경에 있어서 여러 기기의 운영체제에서 실행 가능하다.

    운영체제(운영환경) : 기기가프로그램을 실행시키는 운영환경
    ex) Window, Android, IOS, Linux ..
    앱(애플리케이션) : 운영체제 위에서 실행되는 프로그램
    ex) Mobile App, Server App ..

  2. 안전성이 높아서 프로그래밍 오류 방지및 보안상 안전하다. 하지만 Complie 과정에서 에러를 체크하는 과정이 있어 속도가 느릴 수 있다.
  3. 코드 이해와 유지 보수가 쉽다. 절차적 지향 언어와는 반대로 코드간읜 결합도가 낮기 때문이다. 하지만 설계 단계에서 많은 시간이 소모된다. 주로 Bottom-Up 방식을 택한다.

    Bottom-Up : 작은 것부터 하나씩 구현해서 전체를 만드는 방식

  4. 네트워크 및 DB 연결 및 통신 등의 작업을 처리하는 API제공

JVM

Java Virtual Machine의 약자로 가상 머신이라고 불리며 Java 프로그램을 실행 시킬수 있는 기기이다. 여기서 가상 머신은 여러가지의 기기위에 Java 프로그램을 실행시킬 수 있는 가상의 기기를 만들어 주는것을 의미한다.

  • 바이트코드 : OS가 읽을 수 있는 바이트 코드로 Java 컴파일러가 변환한 코드

    java Complier : 작서된 Java 파일들을 OS 가 읽을 수 있는 바이트 코드 즉 Class 파일로 변환하는 변환기

  • 인터프리터 : OS가 읽은 바이트 코드를 기계가 실행할 수 있는 기계어(Low Level)로 번역
  • JIT 컴파일러 : 인터프리터의 효율을 높여주는 서포터
  • 메모리 영역 : OS로 부터 JVM이 할당받은 메모리 영역
  • 클래스 로더 : JVM으로 바이트 코드를 불러와 메모리에 저장

참조 링크 : Compile vs Runtime

Java 개발 환경 구성은 JDK(Java Development Kit)를 기준으로 JRE, JVM 순서로 구성되어 있다. 여기서 JRE는 Java Runtime Environment의 약자로 자바 실행 환경을 뜻하며 Java 프로그램을 실행만 시킬 수 있습니다. 즉 .class 파일만 실행이 가능하며 그러기 위해서 JDK가 javac 명령을 통해 .java 파일을 실행 가능한 .class 파일로 변환해 준다. 또한 JDK는 Jdc 기능을 통해서 코드를 따라가면서 변수를 볼 수 있는 '디버깅' 기능을 제공한다.

마지막으로 Intellij의 Main 클래스를 예시로 설명한다.

public class Main {
	public static void main(String[] args) {
		System.out.println("Hello world!");
	}
}
// Main : Class Name, public : 접근 제어자
// static : Java complier 가 바이트 코드로 변환할대 미리 정의되는 메서드 표기 
// args = input, void = output
// System = class, out = 객체, println = method

변수

  • 변수 : 변하는 저장공간으로 Java 프로그램에서 저장하는 대부분의 값들이 변하는 것
  • 상수 : 저장 효율을 위해 변하지 않을 값을 따로 저장하는 공간
  int number = 10;
  number = 11;
  // 변수 : 변수의 값을 바꾼다. (덮어쓰기)
  final int number = 10;
  // 상수 : final = 상수 키워드 
  • 변수의 표현 범위 : byte(1byte) < short(2byte) < int(4byte) < long(8byte) < float(4byte) < double(8byte)
    실수형 변수의 경우 가수와 지수를 구분하여 저장하고 이값들을 곱한 값을 표현 하는 방식으로 부동 소수점 방식을 사용한다.

부동 소수점 방식 : 가수와 지수를 구분해서 저장하고 이값들을 곱한 값을 저장하는 방식 입니다.

  long longNumber = 3.14f;
  // long < float 자동 형변환 불가
  //명시적 형변환이 필요하다. 
  • 참조형 변수 : 문장을 저장하거나 단일 저장공간에 담을 수 없는 값을 저장하는 변수ex) String, Object, Array, List...
    참조형 변수는 실제 값이 아닌 원본값의 들어있는 저장공간의 주소값을 저장한다. 즉 주소형 변수라 불린다. 원본값은 Stack 영역에 있는 기본형 변수와는 다르게 Heap 영역에 위치한다. Stack 영역에는 Heap 영역주소 값을 저장한다.

    Stack 영역 : 정적으로 할당된 메모리 영역, 크기가 정해져 있는 기본형 변수를 저장
    Heap 영역 : 동적으로 할당된 메모리 영역, 크기가 가변적으로 변할 수 있는 참조형 변수의 원본을 저장

  • 래퍼 클래스 : 기본형 변수를 클래스로 한번 랩핑 하는 변수이며 사용하는 이유로는 클래스로 변수로 관리하면 객체 지향의 많은 기능(Method)를 사용가능하다.
  int number = 21;
  Integer num = new Integer(number); //boxing
  int n = num.intValue(); // intValue()
  • 자동 형변환 : 작은 크기의 타입에서 큰 크기의 타입으로 변수가 저장될때 자동 형변환이 일어난다.
  double number = 12.345
  int num = number; 
  //자동 형변환 
  //암시적 형변환 
  

비트&바이트

1Byte = 8bits 로 이루어져 있다.
type 이 character 인경우 1byte로 이루어져 있는데 char type의 표현 범위는 -128 ~ 127로 2^8(bits) = 256개의 문자를 표현 가능하다. 이진수로 표현할 경우 채워지지 않는 자리는 앞에 0으로 채워준다.

char ch = 'a';
String binary = Integer.toBinaryString(ch);
System.out.println(binary);
// result : 1100001

출력

Java 프로그램은 기본적으로 Scanner.in 객체의 next() 명령을 사용해서 입력받는다.

next() : 공백을 기준으로 입력을받는다.
nextLine() : 문장 전체를 입력 받는다.

정리

익히 알고있는 Java 문법정리가 아니라 부족하거나 깊게 알지 못했던 부분들을 정리할 수 있는 시간이였다. 다음시간에는 연산자, 조건문, 반복문, 배열, 컬렉션에 관한 내용을 정리하겠다.

profile
이유를 찾아보자

0개의 댓글