[자바] 자료형, 메모리, 연산자

tech_bae·2025년 3월 6일

Java

목록 보기
2/10
post-thumbnail

자바

  • 플랫폼 독립성
    • ‘Write Onne, Run Anywhere’원칙을 기반으로 한번 작성된 코드는 다양한 플랫폼에서 실행될 수 있습니다.
    • JVM이라는 중간 계층에서 자바를 실행시키므로 다른 운영체제에 JVM만 설치되어있다면 자바가 실행 가능
  • 객체 지향 프로그램
    • 자바는 대표적인 객체 지향 프로그래밍 언어이다.
    • 코드의 재사용성과 확정성이 뛰어남

자바의 구성

  • JDK(Java Development Kit)
    • 자바 애플리케이션을 개발하기 위한 도구의 모음
    • 컴파일러, 디버거, 자바API등이 포함
    • 자바 컴파일러(javac)는 자바 코드를 바이트코드로 컴파일하여 JVM에서 실행될 수 있도록 함
    • 자바 표준라이브러리를 통해 내장된 클래스나 매서드를 활용할 수 있게 함
  • JRE(Java Runtime Environment)
    • 자바 애플리케이션을 실행하기 위한 환경 제공
    • JRE는 JVM과 자바 표준 라이브러리로 구성
    • 자바 실행을 위한 모든 요소를 포함(개발도구 X)
  • JVM(Java Virtual Machine)
    • 자바 프로그램 실행 환경을 제공하는 핵심 구성요소
    • 바이트코드(.class 파일)을 읽고 해석 → 기계어로 변환
    • 메모리관리, 가비지 컬렉션, 쓰레드 관리 등의 기능

자료형과 메모리

원시 자료형(Primitive Data Types)

직접적으로 메모리의 특정 위치에 값을 저장

값으로써 직접 사용이 가능하다. 객체가 아님

정수 자료형

  • byte
    • 1byte의 크기
    • -128부터 127까지의 정수 표현가능
  • short
    • 2byte의 크기
    • -32,768부터 32767까지의 정수 표현가능
  • int
    • 4byte의 크기

    • --2,147,483,648부터 2,147,483,647까지의 정수 표현 가능

    • 다양한 진수별 값 할당 가능

      int a = 0;
      int b = -1;
      int c = 0b1110; // 14(2)
      int d = 012; // 10(8) (앞에 0을 써줌으로써 8진수임을 표현)
      int e = 10;  // 10
      int f = 0xA; // 10(16)
  • long
    • 8byte의 크기
    • -9,223,372,036,854,775,808부터 9,223,372,036,854,775,807까지의 정수 표현 가능;;
    • 값 할당시 할당될 값 뒤 L 을 입력해야함 long hugeNumber = 100_000_000_000L;

참고로 정수형 자료형에선 값에 언더바(_)을 사용하여 가독성을 높힐 수 있음

int justNumber = 1_000_000_000;
short smallNumber = 10_000;

실수 자료형

  • float
    • 4byte의 크기
    • 약 6~7자리의 십진수 정밀도
    • double보다 정밀도가 낮아 정밀한 계산에서는 부적절
    • long과 비슷하게 값을 할당시 f를 덧붙여야함 float pi = 3.14f;
  • double
    • 8byte의 크기
    • 약 15자리수의 정밀도 제공
    • float보다 정밀도가 큼

문자 자료형

  • char
    • 2byte의 크기

    • 유니코드를 기반으로 문자를 저장

    • 작은 따옴표 사용(’)

      char a = '\uC548';
      char b = '\uB155';
      char c = '\uD558';
      char d = '\uC138';
      char e = '\uC694';
      
      System.out.printf("%c%c%c%c%c",a,b,c,d,e); // 안녕하세요

논리 자료형

  • boolean
    • 참 or 거짓을 표현
    • 파이썬과 달리 소문자로 써야함.. 맘에 안듬

참조 자료형

  • 참조 자료형은 객체를 참조하기 위해 사용된다.
  • 기본자료형(원시자료형)과는 다르게 값이 저장된 메모리의 주소를 저장합니다.
  • 힙(heap)영역에 저장된다.
  • 참조변수는 힙 메모리의 객체를 가리키는 메모리 주소를 저장
  • 가비지 컬렉션이 더 이상 사용되지 않는 객체를 메모리에서 해제 → 메모리 누수 방지 및 효율적인 메모리 사용

Wrapper Class

기본자료형(원시자료형)을 객체로 다룰 수 있게 하는 클래스

자바에선 객체만이 메서드에 인수로 전달, 컬렉션 클래스와 같은 데이터 구조에 저장

byte → Byte

short → Short

int → Integer

long → Long

float → Float

double → Double

char → Character

boolean → Boolean

  • 박싱(Boxing) : 원시자료형을 래퍼클래스로 변환
  • 언박싱(Unboxing) : 위 과정의 반대
int basicInt = 27;
Integer wrapperInt = Integer.valueOf(basicInt);

int unboxedInt = wrapperInt.intValue();

위 처럼 boxing을 위해선 valueOf를 사용하고

unboxing은 intValue를 사용하여 가능

JVM

JVM은 메모리를 영역들로 나누어 관리

메서드 영역(Method Area)

  • 클래스의 메타데이터를 저장하는 공간(클래스 이름, 상위 클래스, 인터페이스 etc.)
    • 클래스와 메서드의 구조적 정보(클래스 정보, 메서드 코드, 정적 변수, 상수 풀) 저장
  • 모든 스레드가 공유
  • 프로그램 실행 동안 클래스 정의와 메서드 정의 유지

힙 영역(Heap Area)

  • 동적으로 생성된 객체와 배열을 저장하는 공간
  • 가비지 컬렉션에 의해 관리 → 더 이상 참조되지 않는 객체를 해제
  • 프로그램 메모리 사용량 조절 / 데이터 저장과 관리

스택 영역(Stack Area)

  • 스레드마다 별도로 할당
  • 메서드 호출과 관련되 지역변수, 매게변수 저장
  • 메서드 호출 시 스택 프래임이 생성, 종료되면 스택 프레임 제거
  • LIFO방식으로 관리, 지역 변수와 메서드의 실행 정보 저장
  • 메서드 호출의 효율적인 관리, 메모리 할당의 자동화

네이티브 메서드 스택 영역(Native Method Stack)

  • 자바 외부에서 작성된 네이티브 메서드 호출 시 사용
  • 자바 네이티브 인터페이스를 통해 C나 C++로 작성된 네이티브 코드를 실행할 때 필요한 메모리 공간 제공
  • 자바와 네이티브 코드 간의 상호작용을 지원
  • 외부 시스템과 상호작용 필요시 사용

연산자

Shift연산자

좌측 Shift

비트열을 왼쪽으로 지정된 수 만큼 이동(오른쪽 빈 자리는 0으로 채운다) → 결과적으로 2의 제곱수로 곱하는 결과 도출

int a = 7; // 0111
int leftShifted = a << 1; //1110(14)

우측 Shift

좌측 Shift와 동일하게 비트열을 오른쪽으로 이동(왼쪽 빈 자리는 원래의 부호 비트로 채움) → 결과적으로 2의 제곱수로 나눗셈하는 결과

int a = 12; // 1100
int rightShifted = a >> 1; //0110(6)

부호 없는 우측 Shift

우측 Shift와 흡사하나 왼쪽 빈자리를 0으로 채움 → 부호 비트를 무시

int a = -20;  // 1111 1111 1111 1111 1111 1111 1110 1100 
int result = a >>> 2;  // 0011 1111 1111 1111 1111 1111 1111 1011 

연산자의 우선순위

우선순위연산자비고
1( ) , [ ]괄호 / 대괄호
2!, ~, ++, --부정/ 증감연산자 (단항연산자)
3*, /, %곱셈 / 나눗셈연산자
4+, -덧셈 / 뺄셈연산자
5<< , >>, >>>비트 이동연산자
6<, ≤, > , ≥관계연산자
7==, !=
8&비트 논리연산자
9^
10
11&&논리연산자
12
13? :조건연산자
14=, +=, -=, *=, /=, %=, <<=, >>=, &=, ^=, ~=대입, 복합대입연산자

외울 필욘 없을거 같다.

profile
전 아무고토 몰루고 아무고토 못해여

0개의 댓글