JAVA_01_변수

송지윤·2024년 2월 1일

Java

목록 보기
2/22

JavaScript의 자료형

number
string
object
1. 배열
2. JS객체 ({K:V,K:V...})
function
boolean
undefined

+ null

Data(값) 처리 과정

프로그램 실행 시 사용할 값(Data)이 있다면 그 값은 먼저 메모리에 기록 되어야 함

CPU

뇌의 역할 (기억 못함) 연산만 가능

RAM (메모리)

주기억장치
기억을 담당하는 부분
cpu와 붙어있음
RAM에 있는 애들만 cpu가 읽어서 연산 가능
RAM에는 프로그램 실행시 사용할 값 들어있음
휘발성 메모리
메모리 저장
code나 data를 RAM에 올려두어야 cpu가 계산
변수에 애국가 넣어놓고 RAM에 변수를 저장해서 기록하고 꺼내씀

보조기억장치

HDD SSD

변수 (Variable)

  • 메모리(RAM)에 값을 기록하는 공간
    -> 공간에 기록되는 값(Data)이 변할 수 있어서 변수라고 한다.
  • 변수는 여러 종류 존재 (저장되는 값의 형태, 크기가 다름)

변수 사용 목적

변수를 사용하지 않았을 때

System.out.println(2 * 3.141592653589793 * 5);
System.out.println(3.141592653589793 * 5 * 5);
System.out.println(3.141592653589793 * 5 * 5 * 20);
System.out.println(4 * 3.141592653589793 * 5 * 5);

변수를 사용했을 때

System.out.println(2 * pi * r); // 원의 둘레
System.out.println(pi * r * r); // 원의 넓이
System.out.println(pi * r * r * h); // 원기둥의 부피
System.out.println(4 * pi * r * r); // 구의 겉넓이

변수 사용의 장점

  1. 가독성 증가
  2. 재사용성 증가(한번만든 변수를 계속 사용)
  3. 코드 길이의 감소
  4. 유지보수성 증가(코드 수정이 간단해짐)

결과값은 똑같음

데이터 저장 단위

저장 공간이 제한적이기 때문에 저장 크기에 대한 기준과 CPU가 데이터를 처리할 때 일정한 기준 필요

비트(bit)

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

바이트(byte)

8bit 256가지 나타낼 수 있음
데이터 처리 또는 문자의 최소 단위로서 8개의 비트가 모여 하나의 바이트가 구성됨

1바이트 = 8비트
=> 영어 숫자 표현

2바이트 = 16비트
=> 한글,한문 등등 쓸 수 있음
유니코드(Unicode) 2바이트 문자체계

변수의 선언

메모리 공간에 데이터를 저장할 수 있는 공간을 할당하는 것

변수 값 대입

변수에 값을 집어 넣는 것

자료형 (Type)

변수 저장 가능 범위

Java 기본 자료형 8가지

논리형

boolean(1byte)

참 거짓을 나타냄 0과 1로 표현 가능
(cpu가 연산처리하는 최소 단위가 1byte 1비트만 필요하지만 할당은 1byte)

boolean booleanData;

메모리에 논리값(t/f)을 저장할 공간을 1byte 할당하고 할당된 공간을 booleanData 라고 부르겠다.

정수형

byte(1byte)

byte byteNumber = 127;

128 넣는 순간 에러
메모리에 정수 값을 저장할 공간을 1byte 할당하고 할당된 공간을 byteNumber라고 부르겠다.
선언된 byteNumber변수에 처음으로 127을 넣음.
--> 초기화 : 처음 변수에 값을 대입

short(2byte)

short shortNumber = 32767;

short, byte는 옛날 코드 잔재

int(4byte)

int intNumber = 2147483647;

int(기본형) 정수만 저장 가능 4바이트의 크기를 가짐 32비트

long(8byte)

long longNumber = 10000000000L;

L 또는 l 안 붙였을 때
The literal 10000000000 of type int is out of range
-> 100억 이라는 값은 int의 범위를 벗어났다 21억 몇까지만 가능..
뒤에 L을 붙여줌으로써 long 자료형인 것을 나타냄.

실수형

float(4byte)

float : 소수점 8자리

float floatNumber = 1.2345f;

F 또는 f 안 붙였을 때
Type mismatch: cannot convert from double to float
double 자료형이 기본형

double(8byte)

double : 소수점 16자리

double doubleNumber = 3.141592;

double이 실수형 중에서 기본형
(리터럴 표기법이 없는 실수는 double로 인식)
d를 뒤에 쓸 수는 있다! -> 3.141592d;

문자형

char (2byte, 유니코드)

char ch = 'A';
char ch2 = 66;

System.out.println("ch : " + ch);
System.out.println("ch2 : " + ch2);

문자형 리터럴 표기법 : ''(홑따옴표)
'B' 딱 한글자 들어오는 것
2바이트 '가' unicode 2바이트 문자 표기법 한글자
char 자료형에 숫자가 대입될 수 있는 이유
컴퓨터에는 문자표가 존재하고 있음
숫자에 따라 지정된 문자 모양이 매핑되고 'B' 문자 그대로 대입되면 변수에 숫자 66으로 변환되어 저장
-> 반대로 생각하면 변수에 애초에 66이라는 숫자를 저장하는 것이 가능함.

String은 기본 자료형 아님(참조형)

자료형 변수명 = 리터럴;
프로그래밍에서는 대입되는 이 데이터(값자체)를 리터럴 이라는 단어로도 표현
리터럴 : 변수에 대입되거나 작성되어지는 값 자체
(자료형에 따라 리터럴 표기법이 다름.)

변수의 명명 규칙

  1. 대소문자가 구분되며 길이 제한이 없다.
int abcdefg123456789;
int abcdefG123456789; // G 다름
  1. 예약어를 사용하면 안 된다.

  2. 숫자로 시작하면 안된다.

  3. 특수문자는 '_'와 '$'만을 허용한다.
    (하지만 쓰지 않음)

  4. 여러 단어 이름은 단어의 첫 글자를 대문자로 한다.
    단, 첫 시작 글자는 소문자로 하는 것이 관례이다.(카멜 표기법)

char helloWorldAppleBananaTomato;
  1. 변수명은 언어를 가리지 않음(하지만 쓰지 않음) 한글로 쓸 수 있음
int 정수1번;
double 실수2번 = 3.14;
System.out.println(실수2번);

main method 생성하는 단축키

main 치고 ctrl space + enter
=> main method 자동완성

상수 (항상 같은 수)

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

  • 변수 한 종류
  • 한번 값이 대입되면 다른값을 재대입 할 수 없음
  • 자료형 앞에 final 키워드를 작성

상수 명명 규칙

모두 대문자, 여러 단어 작성 시 _ 사용

상수를 사용하는 경우

1) 변하면 안되는 고정된 값을 저장할 때
2) 특정한 값에 의미를 부여하는 경우

상수명은 대문자로 씀

final double PI_VALUE = 3.14;

PI_VALUE = 2.3232323;
error 재대입 불가

형변환(casting)

값(Data)의 자료형을 바꾸는 것
(단, boolean 제외)
자동 형변환 값의 범위가 큰 자료형과 값의 범위가 작은 자료형의 연산 시 컴파일러가 자동으로 값의 범위가 작은 자료형을 값의 범위가 큰 자료형으로 변환

형변환이 필요한 이유

  • 컴퓨터는 기본적으로 같은 자료형끼리만 연산이 가능함.
  • 다른 자료형과 연산 시 오류 발생.
    --> 이런 상황을 해결하기 위해서 필요한 기술이 형변환.

자동 / 강제 형변환이 존재.

자동 형변환

값의 범위가 큰 자료형과 값의 범위가 작은 자료형의 연산 시 컴파일러가 자동으로 값의 범위가 작은 자료형을 값의 범위가 큰 자료형으로 변환

int num1 = 10;
double num2 = 3.5;
		
System.out.println("자동 형변환 결과 : " + (num1 + num2));

원래 에러가 발생해야 하지만 "자동 형변환" 덕분에 발생하지 않음

int i1 = 3;
double d1 = i1;
		
System.out.println("i1 : " + i1);
System.out.println("d1 : " + d1);

double은 실수만 저장할 수 있는 자료형
정수가 대입되는 연산이 수행되면
자동으로 정수 -> 실수로 자동형변환

int -> long 형변환

int i2 = 2_100_000_000; // 21억 _천단위 구분기호 , 대신 사용
		
long l2 = 10_000_000_000L; // 100억
		
long result2 = i2 + l2;
System.out.println("result2 : " + result2);

int +long -> long + long = long 자동형변환

char -> int 형변환
char 자료형은 문자형이지만 실제 저장하는 값은 0 부터 6만 5천번 사이에 있는 숫자(정수형)

char ch3 = 'V';
int i3 = ch3;
System.out.println("i3 : " + i3);
		
char ch4 = '각';
int i4 = ch4;
System.out.println("i4 : " + i4);

강제 형변환

값의 범위가 큰 자료형을 값의 범위가 작은 자료형으로 변환
강제 형변환 시 데이터 손실이 발생할 수 있음
-> 데이터의 변형, 손실을 감수하고 강제 변환

double temp = 3.14;
int num = (int)temp;

System.out.println("temp : " + temp);
System.out.println("num : " + num);

(int) 없을 때
Type mismatch: cannot convert from double to int

실수 -> 정수형 변환 시 소수점 버림 처리 (데이터 손실)

int -> byte 강제 형변환

int iNum = 290;
byte bNum = (byte)iNum; // Type 
		
System.out.println(iNum);
System.out.println(bNum);

(byte) 없을 때
mismatch: cannot convert from int to byte

같은 정수형 끼리의 변환 시에도 값의 범위 차이 때문에 데이터 손실이 발생

char -> int 강제 형변환

char ch = 'A'; // 65
		
int iNum2 = ch; // 자동 형변환 이용
System.out.println(iNum2);

System.out.println((int)ch); 같은 뜻
결과값 65

int -> char 강제형변환

// 44085;
int iNum3 = 44085;
System.out.println((char)iNum3);

결과값 갵

데이터 오버플로우

오버플로우 현상은 컴퓨터가 미리 예측할 수가 없음(에러 안 뜸)
-> 개발자가 미리 예측해야함.
-128 ~ 127 127 + 1 = -128

int i6 = 2147483647; // int 의 최대값
int result6 = i6 + 1;
System.out.println(result6);

결과값 -2147483648 (맨 앞으로 돌아감)

0개의 댓글