본문 바로가기

Programming/Java

DAY 33. [JAVA] 변수

 

변수(Variable)

  • 메모리(RAM)에 값을 넣어 기록하기 위한 공간으로 메모리의 일정 부분을 할당 받은 것 (like 상자)
  • 프로그램에 의해 수시로 값이 변한다.
  • 하나의 값만 저장할 수 있다.
  • 변수를 정할 때는 자료형의 타입에 따라 그 크기만큼 메모리 공간을 할당 받아야 한다.
  • 메모리에 값을 기록하려면 변수부터 만들어야 한다. 메모리에 입력 값이 기록되면 그 값을 CPU가 읽어서 연산을 처리한다. 그 계산 결과 값도 메모리에 기록되고 출력 된다.
  • 변수를 사용하면 가독성이 좋아지고, 재사용성 증가로 인해 코드량이 감소하여 유지보수가 용이하다.

 

변수의 선언이란? : 메모리 공간에 데이터를 저장할 수 있는 공간을 할당하는 것

 

<기본 작성 방법>
--> 변수 선언 == 자료형 변수명;

ex.
1. 논리형 변수 선언 → boolean isTure; → 1byte

2. 정수형 변수 선언 → byte bnum; → 1byte short snum; → 2byte int inum; → 4byte long lnum; → 8byte

3. 실수형 변수 선언 → float fnum; → 4byte double dnum; → 8byte

4. 문자형 변수 선언 → char ch; → 2byte

5. 문자열 변수 선언 → String str; → 참조형

 


데이터 저장 단위

비트(bit)

컴퓨터가 나타내는 데이터의 저장 최소 단위로서 2진수 값 하나를 저장할 수 있는 메모리 공간

 

바이트(byte)

데이터 처리 또는 문자의 최소 단위로서 8개의 비트가 모여 하나의 바이트가 됨

8개의 비트 자리에 맨 앞자리는 +- 갚을 알려주는 곳 AND 나머지 7자리에 숫자가 표시 됨

 

 

 


변수 명명 규칙

  1. 대소문자가 구분된다.
  2. 길이 제한이 없다.
  3. 예약어는 사용할 수 없다.
  4. 숫자로 시작 불가능하다.
  5. 특수 문자는 '_'와 '$'만 허용한다. ('$'는 내부 클래스에서 사용, '_'는 관례상 사용하지 않는 것이 좋다.)
  6. 여러 단어 이름은 단어의 첫 글자를 대문자로 하고, 첫 지가 글자는 소문자로 하는 것이 관례이다.

 


값 대입과 리터럴

값 대입

생성한 변수에 값을 대입하는 것

'=' 기준으로 오른쪽의 값을 왼쪽에 대입한다" 는 뜻

변수는 한 개의 데이터만 보관하기 때문에 마지막에 대입한 값만 보관하게 된다.

 

리터럴

변수에 대입 되는 값 그 자체를 말한다.

short s = 32767;
int i = 100;
long l =10000L;
float f = 0.123f;
double d = 3.14;
char c = 'A';
String str = "ABC";

 

 


 

변수의 초기화

변수를 사용하기 전에 처음으로 값을 저장하는 것 → 지역변수(메소드 내의 변수)는 반드시 초기화 해야 한다.

 

선언 후 초기화 ing age; age = 100;

선언과 동시에 초기화 int age = 100;

 


 

문자열

문자열 초기화

다른 자료형 + "문자열" → 문자열
"문자열" + 다른 자료형 → 문자열

 

String str = "기차";
String str = new String("기차"); → 객체를 만들어서 문자열을 초기화 하는 방법
String str = "기차" + "칙칙폭폭";
String str = new String("기차" + "칙칙폭폭");
String str = "기차" + 123 + 45 + "출발";
String str = 123+ 45 + "기차" + "출발";

 


오버플로우

허용된 범위 이상의 비트를 침범하게 되는 현상

 


 

상수

수학에서는 변하지 않는 값을 의미한다. 컴퓨터에서는 한 번만 저장(기록)할 수 있는 메모리를 뜻한다.

상수는 초기화 이후에 다른 데이터(값)을 대입할 수 없다.

final int AGE;

 


Scanner

사용자로부터 입력되는 정수, 실수, 문자열을 처리하는 클래스이다.

 

 

import 작성

import java.util.Scanner;

 

Scanner 생성

Scanner sc = new Scanner(System.in);

 

키보드 입력 값 받기

정수 : sc.nextInt();
실수 : sc.nextFloat(); 또는 sc.nextDouble();
문자열 : sc.next(); 또는 sc.nextLine();

 

※ next()는 띄어쓰기 입력불가, 띄어쓰기를 구분인자로 생각하여 각각 저장, 줄 구분까지 저장하지 않는다.

   nextLine()문자열에 띄어쓰기 가능, 줄 구분까지 저장

 

 


형변환

값의 자료형을 바꾸는 것이다. (boolean은 제외한다.) , 데이터의 타입을 바꾸는 것

 

<컴퓨터의 값 처리 원칙>

같은 종류의 자료형만 대입 가능

같은 종류의 자료형만 계산 가능 ex. 10 + 13.5 (X)

계산의 결과도 같은 종류의 값이 나와야 한다.

→ 이러한 원칙이 지켜지지 않을 경우에 형 변환을 사용한다.

 

 

 

자동 형변환

값의 범위가 작은 자료형을 값의 범위가 큰 자료형으로 변환한다.

단, byte와 short의 자료형 값의 계산 결과는 무조건 int로 처리한다.

컴파일러가 연산을 할 때 자료형을 보고 판단해서 자동으로 자료형을 바꿔준다.

값의 손실이 없이 그대로 보존된다. == 값의 변화가 없다.

 

byte(1) → short / char(2) → int(4) → long(8) → float(4) → double(8)

 

 

강제 형변환

값의 범위가 큰 자료형을 값의 범위가 작은 자료형으로 변환한다.

값(데이터)의 손실이 발생할 수 있다. == 데이터의 변형과 손실을 감수하고 강제로 변환한다.

(바꿀 자료형) 값;

double temp;

int name = **(int)**temp;

 

--> 여기서 사용 된 int는 "형변환 연산자" 가 된다.

 

 


 

변수와 메모리 구조

<RAM 구조>

 

static

static 예약어로 선정된 필드, 메소드가 저장되는 공간으로 클래스 변수 등이 있다. 클래스 영역, 메소드 영역이라고 불림, 기록되면 JVM이 종료될 때까지 사라지지 않고 고정

heap

new 연산자에 의해 동적으로 할당하고 저장되는 공간으로 객체, 배열 등이 있다. 시작 주소를 변수에 담아 준다.

stack

메소드를 호출하면 자동으로 생성되고 메소드가 끝나면 자동으로 소멸한다
→ { } , 지역변수(메소드 내에서 사용되는 변수), 매개변수, 메소드 호출 스택 등이 있다.

 

 


출력 메소드

서식 지정자

%d : 정수형
%o : 8진수
%x : 16진수
%c : 문자
%s : 문자열
%f : 실수 소수점 아래 6자리
%e : 지수 형태 표현
%g :  대입 값 그대로
%A : 16진수 실수
%b : 논리형


정렬방법
%5d : 5칸을 확보하고 오른쪽 정렬
%-5d : 5칸을 확보하고 왼쪽 정렬
%.2f : 소수점 아래 2자리까지만 표시