[Java] 변수와 자료형

sobam·2022년 10월 17일
0

자바

목록 보기
1/18
post-thumbnail

📔 학습한 내용을 정리하기 위해 작성하는 게시글입니다.

변수(Variable)란?


데이터(data)를 저장하기 위해 프로그램에 의해 이름을 할당받은 메모리 공간을 의미한다. 즉, 메모리 공간에 부여되는 이름이다.


1. 변수 이름 생성 규칙

자바에서 변수, 상수, 메서드의 이름을 지을 때 반드시 지켜야 하는 공통 사항이다.

  • 영문 대소문자와 한글을 사용할 수 있다.
  • 특수 문자는 밑줄( _ )과 달러($)표기만 사용할 수 있다.
  • 숫자로 시작할 수 없다.
  • 공백을 포함할 수 없다.
  • 자바에서 사용하는 예약어는 사용할 수 없다.

2. 변수 이름 생성 권장 사항

  • 변수명
    - 영문 소문자로 시작
    - 영문 단어가 2개 이상 결합할 때는 새로운 단어의 첫 글자를 대문자로 표기
    ※ 낙타 표기법(camel case) 사용

  • 상수명
    - 변수와 구분하기 위해 모두 대문자로 표기
    - 영문 단어가 2개 이상 결합할 때는 밑줄( _ )을 사용해 분리

  • 메서드명
    - 변수명과 동일. 단, 이름 뒤에 소괄호(())와 중괄호({})가 붙음

📌 변수 이름은 해당 변수에 저장될 데이터의 의미를 담아야 한다.


3. 변수 선언 방법

1) 변수의 선언만 하는 방법

: 먼저 변수를 선언하여 메모리 공간을 할당받고, 나중에 변수를 초기화하는 방법

타입 변수이름;

2) 변수의 선언과 동시에 초기화하는 방법

1. 타입 변수이름[, 변수이름];

2. 타입 변수이름 = 초깃값[, 변수이름 = 초깃값];

4. 변수 유형

변수의 위치에 따라 네 가지 유형으로 구분할 수 있다.

1) 멤버변수(Member variable)

클래스부에 선언된 변수들로 객체의 속성에 해당.
인스턴스 변수와 클래스 변수로 구분됨.

2) 인스턴스 변수(Instance variable)

클래스가 인스턴스될 때 초기화되는 변수.
인스턴스를 통해서만 접근할 수 있음.

3) 매개 변수(Parameter)

메서드에 인자로 전달되는 값을 받기 위한 변수.
메서드 내에서는 지역변수 처럼 사용됨.

4) 지역 변수(Local variable)

메서드 내에서 선언된 변수.
멤버변수와 동일한 이름을 가질수 있으며 지역변수가 우선.

5) 클래스 변수(Class variable)

static으로 선언된 변수.
인스턴스 생성없이 클래스이름.변수명으로 사용가능.
main() 메서드에서 참조 가능.



자료형(Data type)이란?


데이터를 저장하기 위해 생성하는 메모리 공간은 목적에 따라 크기와 특징이 다른데, 이를 자료형(data type)이라고 한다. 즉, 메모리 공간의 자료형에 따라 저장할 수 있는 값의 종류와 특징이 결정된다.


1. 자료형의 종류

  • 자바에서 제공하는 자료형은 타입에 따라 크게 기본 자료형과 참조 자료형으로 구분할 수 있다.

  • 값이 들어 있으면 기본자료형이고, 주소가 들어 있으면 참조 자료형이 된다.

  • 기본 자료형은 자바 라이브러리에서 기본으로 제공하며, 각 자료형이 사용할 공간의 크기인 바이트 수가 정해져 있다.

  • 자바에서는 8가지 기본 자료형을 제공한다.

  • [ 기본 자료형 8가지]

정수형문자형실수형논리형
1바이트byte--boolean
2바이트shortchar--
3바이트int-float-
4바이트long-double-

1) 기본 자료형

  • Java언어에 이미 존재하고 있는 데이터 타입
  • 첫 글자 소문자로 시작
  • 자바 컴파일러에 의해서 해석되는 자료형
  • 실제 값을 갖는 자료형으로 null값을 가질 수 없음
  • 여러 형태의 타입을 미리 정의하여 제공
  • boolean / char / byte / short / int / long / float / double

📌 부동 소수점 방식의 오차
실수의 표현 방식은 1)고정 소수점(fixed point)방식2)부동 소수점(floating point)방식이 있다.
(현재 대부분의 시스템에서는 부동 소수점 방식으로 실수를 표현)
float형 타입은 소수 6자리까지, double형 타입은 소수 15자리까지만 오차 없이 표현할 수 있다. 그 이상의 소수 부분을 표현할 때는 언제나 작은 오차가 발생한다.

2) 참조 자료형

  • 여러 가지 데이터들이 모여 있는 복잡한 데이터로, 기본 자료형에 비해 크기가 크다.
  • 첫 글자 대문자로 시작
  • 프로그래머에 의해 만들어진 클래스를 자료형으로 전언하는 경우
  • 값이 아닌 객체의 주소를 가지고 있는 자료형
  • String / class / array / interface

2. 자료형 선언 방법

자료형 변수 = 값;

자료형 선언

int a; //a는 int형 변수
String b; //b는 String형 변수

대입연산자(=)를 중심으로 양쪽의 자료형이 같아야 한다.


3. 자료형 구분 이유

1) 자료형을 이렇게 구분해야 하는 이유는 기본 자료형과 참조 자료형의 값 저장 방식이 서로 다르기 때문이다.

기본 자료형과 참조 자료형은 실제 데이터값이 저장되는 위치가 다르다.

두 자료형 모두 변수의 공간이 스택 메모리에 생성되지만,

클래스 영역, 정적 영역, 상수 영역, 메서드 영역스택 영역힙 영역

↑ 자바의 메모리 구조

스택(stack) 영역 : 변수가 저장되는 공간
힙(heap) 영역 : 객체가 저장되는 공간

기본 자료형은 스택 메모리에 실제 변숫값을 저장하고,
참조 자료형은 스택 메모리에 실제 변숫값이 저장된 힙 메모리의 위칫값을 저장한다. 참조 자료형의 실제 데이터값은 힙 메모리에 저장된다.

2) 값을 저장할 때 확보해야 하는 메모리 공간의 크기를 결정하기 위해서이다.

3) 메모리의 효율성 때문이다. (정수의 경우, 자료형이 4개가 있다.)



상수(constant)란?


final int AGES = 30; //AGES가 상수
  • 상수는 변하지 않는 변수를 의미한다. 메모리값(위치)를 변경할 수 없다.
  • 변수는 변하는 값이라면, 상수는 항상 변하지 않는 값이다.
  • 변수는 값을 재 할당할 수 있지만, 상수는 한번 초기화하면 값을 재 할당할 수 없다.
  • 상수는 final 예약어를 사용해 선언하며, 값이 없을 수 없으므로 반드시 선언과 동시에 반드시 초기화해야 한다.

상수를 사용하는 이유

  • 값(리터럴)에 의미있는 이름을 붙여서 코드의 이해와 수정을 쉽게 만들기 위해 사용
  • 코드의 유지보수성을 높이기 위해 사용


리터럴(literal)이란?


final int AGES = 30; //30이 리터럴
  • 리터럴(literal)이란 값 그 자체를 의미한다.
  • 리터럴은 변수의 값이 변하지 않는 데이터(메모리 위치 안의 값)를 의미한다.
  • 프로그램에서 사용하는 모든 숫자, 문자, 논리값(true, false)을 일컫는다.
  • 변수와 상수와는 달리 데이터가 저장된 메모리 공간을 가리키는 이름을 가지고 있지 않는다.
  • 리터럴은 프로그램이 시작할 때 시스템에 같이 로딩되어 특정 메모리 공간인 상수 풀(constant pool)에 놓인다.

1. 리터럴 타입(literal type)

자바에서 리터럴은 타입에 따라 다음과 같이 구분한다.

1) 정수형 리터럴 (Integer literals)
: 123, -456과 같이 아라비아 숫자와 부호로 직접 표현

대입식정수 리터럴의 자료형 인식
byte a = 3 ;byte에 저장할 수 있는 값이 byte 자료형에 대입되면 byte로 인식 (byte = byte)
short a = 3 ;short에 저장할 수 있는 값이 short 자료형에 대입되면 short로 인식 (short = short)
int a = 3 ;int와 같거나 int보다 큰 정수 자료형(long)에 정숫값이 입력되면 크기에 관계없이 int로 인식 (int = int)
long a = 3 ;long 자료형에 대입되는 정숫값은 크기에 상관없이 int로 인식되지만, 자동 타입 변환이 발생해long으로 변환 (long = long)
byte a = 130 ;byte에 저장할 수 없는 범위의 정숫값이 입력되면 int로 인식 (byt = int) → 오류 발생

2) 실수형 리터럴 (floating-point literals)
: 3.14, -45.6과 같이 소수 부분을 가지는 아라비아 숫자로 표현

대입식실수 리터럴의 자료형 인식
float a = 3.5F ;뒤에 F가 붙었으므로 float로 인식 (float = float)
double a = 5.8 ;실수 리터럴은 기본적으로 double로 인식 (double = double)
double a = 5 ;int로 인식하지만 자동 타입 변환해 double로 인식 (double = double)
float a = 3.5 ;실수 리터럴은 기본적으로 double로 인식 (float = double) → 오류 발생

3) 논리형 리터럴(boolean literals)
: true나 false로 표현

4) 문자형 리터럴(character literals)
: 'a', 'Z'와 같이 작은따옴표('')로 감싸진 문자로 표현

5) 문자열 리터럴(string literals)
: "자바", "홍길동"과 같이 큰따옴표("")로 감싸진 문자열로 표현

6) null 리터럴(null literals)
: 단 하나의 값인 null로 표현


2. 리터럴 타입 접미사(literal type suffix)

  • 리터럴 뒤에 추가되어 해당 리터럴의 타입을 명시해주는 접미사
  • 정수형과 실수형은 타입이 여러 개이므로 접미사를 붙여 구별한다.
종류리터럴접미사
논리형true, false없음
정수형123, 0b0101, 077, 0xFF, 100LL (long)
실수형3.14, 3.0e8, 1.4f, 0x1.op-1f (float), d (double, 생략 가능)
문자형'A', '1', '\n'없음
문자열"ABC", "123", "A", "tree"없음


타입 변환(=형 변환, Type conversion, Type casting)


자료형 A 변수명 = (자료형 A)
long 변수명 =+ L;
long 변수명 =+ l;
float 변수명 =+ F;
float 변수명 =+ f;
  • 하나의 타입을 다른 타입으로 바꾸는 것
  • 자바에서는 boolean형을 제외한 나머지 기본 타입 간의 타입 변환을 자유롭게 수행할 수 있다.
  • 변수에 데이터를 대입할 때와 데이터끼리의 산술 연산을 할 때 형변환이 일어난다.

1. 타입 변환의 종류

1) 자동 타입 변환(묵시적 타입 변환, implicit conversion)
2) 수동 타입 변환(명시적 타입 변환, 강제 타입 변환, explicit conversation)

1) 자동 타입 변환(implicit conversion)

: 자바에서는 값의 허용 범위가 작은 타입에서 큰 타입으로 저장될 때 자동으로 타입이 변환된다. (컴파일러가 자동으로 수행)

업캐스팅(up-casting)
: 작은 자료형을 큰 자료형에 담으면 개발자가 타입 변환 코드를 넣어 주지 않더라도 컴파일러가 자동으로 타입 변환을 실행한다. (타입 변환 생략 가능)

2) 수동 타입 변환(explicit conversation)

: 사용자가 타입 캐스트 연산자(())를 사용하여 강제적으로 수행하는 타입 변환

다운캐스팅(down-casting)
: 큰 자료형을 작은 자료형에 대입하는 행위
→ 데이터 손실이 발생할 수 있으므로 컴파일러에 따른 자동 타입 변환은 일어나지 않으며, 개발자가 직접 명시적으로 타입 변환을 수행해야 한다.

타입 변환을 할 수 없는 경우
char 타입에는 음수가 없기 때문에 음수를 갖는 타입을 char 타입으로 변환하면 컴파일 에러가 발생한다.

📌 자료형의 크기
byte(1) < short(2)/char(2) < int(4) < long(8) < float(4) < double(8)


2. 기본 자료형 간의 연산

boolean을 제외한 나머지 기본 자료형은 서로 연산할 수 있다. 이때 연산은 같은 자료형끼리만 가능하다.

CPU에서 연산 최소 단위가 int이므로 int보다 작은 자료형도 일단 int로 읽어와서 연산을 수행한다.(결과값도 int)

같은 기본 자료형 간의 연산 결과

연산결과
type 자료형 + byte 자료형int 자료형
short 자료형 + short 자료형int 자료형
int 자료형 + int 자료형int 자료형
long 자료형 + long 자료형long 자료형
float 자료형 + float 자료형float 자료형
double 자료형 + double 자료형double자료형

서로 다른 기본 자료형 간 연산 결과

연산결과
type 자료형 + short 자료형int 자료형
byte 자료형 + int 자료형int 자료형
short 자료형(업캐스팅) + long 자료형long 자료형
int 자료형(업캐스팅) + float 자료형float 자료형
long 자료형(업캐스팅) + float 자료형float 자료형
float 자료형(업캐스팅) + double 자료형double자료형


🔔 Reference

<Do it! 자바 완전 정복>
<Do it! 자바 프로그래밍 입문>
<자바의 정석>
https://dinfree.com/lecture/language/112_java_1.html
http://www.tcpschool.com/java/java_datatype_variable
https://sseoui.tistory.com/m/4
https://philipbox.tistory.com/m/64
https://wildeveloperetrain.tistory.com/m/75

0개의 댓글

관련 채용 정보