본문 바로가기

Back End/Java

자바의 데이터 타입

  00. 기본

   1) 자바 소스 파일의 파일명은 public 클래스명과 동일해야 한다.
   2) 자바는 대소문자를 구분한다.
   3) 소스 파일이 변경되면 컴파일부터 다시 진행하기
   4) 문장은 ; 으로 끝나야 한다.

 


  01. 변수

   1) 프로그램 사용 중에 발생하는 임의 값을 저장하기 위한 공간
   2) 변수명의 시작은 항상 영문자 소문자로 작성
   3) 중간에 _나 숫자를 사용할 수 있다.
   4) 키워드(예약어)는 변수로 사용할 수 없다.
   5) 변수에 할당되는 값을 리터럴이라고 한다.

   6) 형식 → 데이터 타입 변수명 = 변수에 저장할 값(리터럴);
      예) 숫자(정수)를 저장할 수 있는 변수를 선언하고 100을 할당

 


02. 자바의 데이터 타입

- 기본형은 실제 값을 가지고 있지만 참조형은 참조할 수 있는 주소 값을 가진다.
- stack 영역에 저장된 값이 리터럴이면 기본형, 주소값이면 참조형이다.
* 1byte는 부호 비트 1bit와 7bit이다.

01) 상수

① final
 - final이 추가된 변수는 상수

 - 상수는 정해진 값이 저장된 변수로 값을 다시 변경할 수 없다.
 - 상수는 대문자로 정의한다.

final int NUM1 = 100;

 

02) 기본형

- 메모리에 값 자체를 저장
- 산술 계산 가능
- null 값을 가질 수 없음(객체 타입이 아님)
예) 정수형, 실수형, 문자형, 논리

① 정수형
 - 정수형 변수에 저장되는 리터럴은 기본 데이터 타입이 int형
 - long 타입은 리터럴로 표현할 수 있는 범위 밖의 값을 저장해야 하므로 접미사(L, l)를 추가해서 int 리터럴이 아니라 long 리터럴이라는 것을 컴파일러에게 알려준다.

 - 종류: byte(1byte), short(2byte), int(4byte), long(8byte)

long myLong = 123456789L; // 'L' 혹은 'l'을 추가하여 long 타입임을 명시

 

② 실수형
 - 실수형 변수에 저장되는 리터럴은 기본 데이터 타입이 double형
 - float 타입도 long처럼 접미사(F, f)를 추가한다.

 - 종류: float(4byte), double(8byte)

float myFloat = 3.14F; // 'F' 혹은 'f'를 추가하여 float 타입임을 명시

 

 ③ 논리형
 - 종류: boolean

④ 문자형
 - char 타입의 변수에 할당되는 리터럴은 ' ' 로 표현한다.

 - 종류: char

03) 참조형

- 메모리에 데이터 주소(참조 값)를 저장(실제 값은 힙 메모리에 위치)
- 산술 연산 불가능
- null 값을 가질 수 있음(NPE에 대한 대비 및 처리 필요)
예) 배열, 열거, 클래스, 인터페이스

 - API 클래스나 직접 작성한 클래스를 메모리에 할당한 후 사용하기 위해서 선언한 변수
 - 주소값을 가지고 있다.
 - new 연산자를 이용해서 클래스를 메모리에 저장(객체생성, 인스턴스화)
 - heap에 할당된 클래스를 객체, 인스턴스라 한다.
 - 생성된 객체의 주소를 객체 참조(갖고 있는 변수를 이용해서 객체)의 기능을 사용
 - . 연산자를 통해 접근

할당될 클래스 변수 = new heap 할당될 클래스명()
───┬───                ────┬────
  데이터 타입                사용하고 싶은 클래스




java 실행 > .class파일 검증 > 클래스로더가 .class를 사용하기 위해서  Runtime Data Area 의 Method Area에 올려놓는다.
method area: 정보들이 저장

① Stack
 - 후입선출(LIFO) 형태의 선형 데이터 구조
 -  컴파일러 또는 인터프리터가 관리하며, 함수 호출과 지역 변수와 같은 작은 크기의 데이터를 저장하는데 사용
 - 자동 메모리 관리를 지원
 - 함수 호출 시 지역 변수와 매개 변수가 스택 프레임에 순차적으로 할당
 - 함수 실행이 끝나면 스택 프레임이 해제되며, 이전에 할당된 메모리 공간을 재사용한다.
 - 상대적으로 작은 메모리 공간을 사용
 - 스택 프레임의 크기는 컴파일 시점에 결정되며, 일반적으로 제한된 크기를 가지고 있다.

② Heap
 - 동적으로 할당되는 데이터를 저장하기 위한 구조
 - 메모리 할당 및 해제를 개발자가 직접 관리
 - 상대적으로 큰 크기의 메모리 공간을 사용하며 힙의 크기는 운영체제 및 사용 가능한 시스템 메모리에 따라 달라짐
 - 메모리를 명시적으로 해제하기 전까지 계속 존재
 - 개발자가 메모리 해제를 하지않으면 메모리 누수가 발생할 수 있다.
 - 주로 동적으로 생성된 객체, 큰 데이터 구조 및 메모리가 오래 지속되어야 하는 데이터를 저장하는데 사용

 


 

03. 데이터 형변환

1)  기본형

① 자동 형변환
 - 작은 데이터를 큰 데이터타입의 변수에 저장할 수 있다.
 - byte → short → int → long → float → double
char → int   (ASCII코드값)

② 명시적 형변환(강제형변환)
 - 강제로 데이터의 타입을 변환
 - 사이즈가 큰 변수를 작은 변수를 할당할 수 없다.
 - 이런 경우 강제로 형변환

 타입 변수 = (변환하려고 하는 데이터 타입)변수;

2) 참조형

① 업캐스팅(Upcasting)
 - 하위 클래스의 객체를 상위 클래스 타입으로 변환하는 것
 - 자식 클래스 타입의 객체를 부모 크래스 타입으로 형 변환하는 것을 의미
 - 업캐스팅은 자동으로 이루어지며, 명시적인 형변환 연산자는 필요없다.

Parent parent = new Child(); // 업캐스팅

 

② 다운캐스팅(Downcasting)
 - 상위 클래스의 타입의 객체를 하위 클래스의 타입으로 변환하는 것
 - 업캐스팅 된 객체를 다시 원래의 하위 클래스 타입으로 형변환하는 것을 의미
 - 명시적인 형변환 연산자를 사용하여 직접 형변환을 수행해야 한다.
   이때, 원래 객체가 해당 클래스의 인스턴스인지를 확인해야 한다.
   Instanceof 연산자를 사용하여 확인할 수 있다.

Parent parent = new Child();
Child child = (Child) parent; // 다운캐스팅

 


04. 연산자

   1) 산술 연산자:  +  -  /  *  %
   2) 단항 연산자(증감 연산자): x++, ++x, x--, --x
   3) 비교 연산자: >  >=  <  <=  !=  ==
   4) 논리 연산자: &  |  !  &&  ||
- &&과 ||의 경우 조건 충족 시 나머지 항은 검사하지 않음
→ 뒷 항이 오류가 나는 항이면 검사하지 않고 넘어가 오류가 나지 않음
   5) 삼항 연산자: 조건?참:거짓
   6) 대입 연산자: i+=30;   i/=30; 등

 


 

'Back End > Java' 카테고리의 다른 글

배열  (0) 2023.07.14
제어구문  (0) 2023.07.14
자바 환경설정 및 개념  (0) 2023.07.14