Java

[JAVA] 기본 문법

코코형아 2024. 1. 17. 08:45

1. Java 기본 문법

 

1. 자바 기본 문법

  • Variable(변수) : 자료를 저장하기 위한 메모리 공간으로 타입에 따라 크기가 달라짐
  • 데이터 타입에 따른 데이터의 종류
    • 기본형 : 미리 정해진 크기의 데이터 표현, 변수 자체에 값 저장
      • byte의 bit 수는 8인데, 왜 -2^7~2^7-1 의 값을 가지는가?
      → 맨 앞의 비트는 부호비트 이기 때문!
      • int형의 크기는 -20억 ~ 20억 쯤 된다.
    • 참조형 : 크기가 미리 정해질 수 없는 데이터의 표현, 변수에는 실제 값을 참조할 수 있는 주소만 저장
      • 배열 타입
      • 열거 타입
      • 클래스
      • 인터페이스
      • String : 유일하게 new를 사용하지 않고 생성가능한 객체
        • String은 참조형이지만 기본형처럼 사용하게 지원해준다.

 

  • 실수의 연산은 정확하지 않다.
    • 유효 자릿수를 이용한 반올림 처리
  • 실수에서 정확한 연산을 하려면 어떻게 해야 하나?
    1. 정수형으로 바꿔서 계산
    2. BigDecimal을 이용하여 계산

 

  • 형 변환(Type Casting) : 변수의 형을 다른 형으로 변환하는 것
    • primitive는 primitive끼리, reference는 reference끼리 형 변환 가능
    • 기본형과 참조형의 형 변환을 위해서 Wrapper 클래스 사용
    • Wrapper클래스는 총 8개가 존재한다.(기본형을 감싸주는 역할을 하므로)
    • 명시적 형 변환
int i = 100;
byte b = (byte)i;

 

 

    • 묵시적 형 변환
byte b = 10;
int i = b;
  • 값의 크기, 타입의 크기가 아닌 타입의 표현 범위가 커지는 방향으로 할당할 경우는 묵시적 형변환 발생
    • byte(8bit) → short(16) → int(32) → long(64) → float(32) → double(64)
    • char(16) → int(32)
💡 실수형의 값 저장 체계가 정수형보다 크기 때문에 float(32)long(64)보다 큼
  • 주의사항
    • 명시적 형변환은 값 손실이 발생할 수 있으므로 프로그래머 책임하에 형 변환 진행
    • 묵시적 형변환은 자료의 손실 걱정이 없으므로 형변환 연산 생략
    • 산술 이항 연사자는 연산 전에 피 연산자의 타입을 일치시킨다.
    • 피연산자의 크기가 4byte(int) 미만이면 int로 변경한 후 연산 진행
    • 두 개의 피연산자 중 큰 타입으로 형 변환 후 연산 진행
    • 오류가 나는 코드 예시
byte b1 = 10;
byte b2 = 20;
byte b3 = b1 + b2; 

int i1 = 10;
long l1 = 20;
int i2 = i1 + l1;

float f1 = 10.0;
float f2 = f1 + 20.0; /* 20.0이 double이므로 오류 발생*/

 

 

byte b3 = b1 + b2 //오류 발생

위 코드는 왜 오류가 날까?

 

Java에서는 byte나 short같은 int형보다 작은 정수형 타입끼리의 연산은 연산 수행 시 자동으로 int형 타입으로 형 변환된다.

(정수형 연산 시 발생하는 오버플로우(overflow)나 언더플로우(underflow)를 방지하기 위한 것)

 

그렇기 때문에 오류가 나지 않게 하려면 명시으로 형 변환 해줘야한다!

 

byte3 = (byte) b1 + b2; //정상 실행