일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- 타임리프기본객체
- 정보처리기사
- 타임리프유틸리티객체
- 타임리프 표현식
- 타임리프Escape
- spring
- 정처기실기요약
- 정보처리기사실기
- 이클립스없이cmd
- MySQL설치순서
- 타임리프Unescape
- thymeleaf
- 타임리프변수
- 개체관계모델
- 타임리프 특징
- mysql
- mysql다운로드
- mysql설치하기
- HelloWorld출력
- mybatis
- 타임리프SpringEL
- ER모델
- 타임리프날짜
- java
- git
- 정보처리기사실기요약
- 스프링부트설정
- cmd에서java파일실행
- 타임리프URL
- 정처기실기
- Today
- Total
ye._.veloper
[Java] 변수(Variable) 본문

☁ 변수란 ?
· 메모리 공간(RAM)에 한 개의 값을 기록하기 위한 장소(공간)
☁ 변수의 자료형
* 기본형(Primitive Type)
· 변수(Variable)실제 데이터 (값)을 저장
· 논리형, 문자형, 정수형, 실수형으로 나눠지고 8개의 자료형이 있음
· 각 자료형 별 데이터 저장크기가 다름
* 참조형(Reference Type)
· 데이터가 저장되어 있는 주소를 저장 (객체의 주소)
· 기본형을 제외한 나머지(String 등) 사용자 정의 자료형
· 4byte의 공간을 저장공간으로 할당


☁ 변수의 선언
· 메모리 공간에 데이터를 저장할 수 있는 공간을 할당하는 것
자료형 변수명 = 값;
자료형 : 생성할 변수에 어떤 종류의 값이 들어갈지 타입을 지정
변수명 : 변수의 이름
값 : 변수에 들어갈 데이터
* 정수형
bnum = 1;
snum = 2;
inum = 4;
lnum = 8L;
* 실수형
fnum = 4.0f;
dnum = 8.0;
* 논리형
isTrue = true; // true or false
* 문자 & 문자열
ch = 'A'; //싱글 쿼테이션 사용
str = "A"; //더블 쿼테이션 사용 (한 글자여도 String 사용O)
☁ 변수의 명명 규칙
1. 대소문자가 구분되며 길이 제한이 없다.
2. 예약어를 사용하면 안된다.
3. 숫자로 시작하면 안된다.
ex) age1은 가능하지만 1age는 불가능
4. 특수문자는 '_'(under bar)와 '$'만 허용
ex) sh@rp는 불가능하지만 $harp는 가능
5. 여러 단어 이름은 단어의 첫 글자를 대문자로 한다.
ex) ageOfVampire, userName (= 낙타등표기법, 카멜(Camel)표기법)

☁ 변수의 초기화
· 변수를 사용하기 전에 처음으로 값을 저장하는 것
➡ 지역변수는 반드시 초기화 해야 한다
▷ 선언 후 초기화
int age;
age = 100;
▷ 선언과 동시에 초기화
int age = 100;
☁ 값 대입과 리터럴(Literal)
▷ 값 대입 : 생성한 변수(저장 공간)에 값을 대입하는 것
int age;
age = 10;
age = 20;
-> 변수는 한 개의 데이터만 보관, 마지막에 대입한 값만 보관 (제일 마지막에 작성된 값을 최종값으로 가짐)
▷ 리터럴 : 변수에 대입되는 값 자체를 의미
short s = 32767;
int i = 100;
long l = 10000L;
float f = 0.123f;
double d = 3.14;
char c = 'A';
String str = "ABC";
☁ 상수
· 수학에서는 '변하지 않는 값'을 의미
· 컴퓨터에서는 '한 번만 저장할 수 있는 공간'
➡ 초기화 이후 다른 데이터(값)를 대입할 수 없다.
▷ 상수 선언 예시
final int age;
final double PI = 3.14;
-> 변수의 자료형 앞에 final을 붙여 상수임을 표시
▷ 상수 테스트
int age;
final int AGE; //final을 사용해 상수 선언
age = 20;
AGE =20;
System.out.println("age :" + age);
System.out.println("AGE :" + AGE);
age =19;
//AGE = 19; 상수는 초기화 이후 값을 변경할 수 없기 때문에 주석을 제거하면 에러 발생
System.out.println("변경 후 age: " + age);
System.out.println("변경 후 AGE: " + AGE);
☁ 문자열
· 컴퓨터에서 "기차", "출력하세요" 등 단어나 문장을 문자열이라 표현
➡ " " (Double Quotation, 더블 쿼테이션)으로 묶여있으면 문자열로 인식
· Java에서는 String 객체를 이용하여 저장
▷ 문자열 초기화
String str = "기차";
String str = new String ("기차");
String str = "기차" + "칙칙폭폭";
String str = new String("기차" + "칙칙폭폭");
String str = "기차" + 123 + 45 + "출발"; -> 다른 자료형 + "문자열" = 문자열
String str = 123 + 45 + "기차" + "출발"; -> "문자열" + 다른 자료형 = 문자열
-> 다른 자료형인 123, 45 와 "기차", "출발"이라는 문자열이 합쳐진 경우,
문자열로 인식되어 출력
출력 )
String str = "기차" + 123 + 45 + "출발";
출력 -> 기차123455출발
String str = 123 + 45 + "기차" + "출발";
출력 -> 12345기차출발
☁ 변수 사용 목적
▷ 변수를 사용하지 않으면,
System.out.println(100 + 10);
System.out.println((100 + 10) * 10);
System.out.println(((100 + 10) * 10) - 10);
System.out.println((((100 + 10) * 10) - 10) / 10);
-> 많은 양의 수를 사용하는 경우 코드가 복잡해지고 가독성이 떨어지며 작성하기 어렵다.
▷ 변수를 사용하면,
int num = 100;
System.out.println(num + 10);
System.out.println((num + 10) * 10);
System.out.println(((num + 10) * 10) - 10);
System.out.println((((num + 10) * 10) - 10) / 10);
☁ 데이터 오버플로우(Data Overflow)

public void testOverFlow() {
// byte bnum = 128; => byte는 -128~127까지이기때문에 범위를 벗어나서 에러 발생
byte bnum = 127;
//bnum += 1; // byte + int --> int
//위의 코드를 아래와 같이 형 변환 시켜주기
bnum =(byte)(bnum+1);
System.out.println("bnum: " + bnum);
//결과 값은 오버플로우 처리가 되어서 127 + 1의 값은 범위를 벗어나는 128이 아닌 최소값인 -128로 나온다
}
☁ 형변환(casting)
· 같은 종류 자료형만 대입 가능
· 같은 종류 자료형만 계산 가능
· 계산의 결과도 같은 종류의 값이 나와야 함
➡ 이러한 원칙이 지켜지지 않은 경우, 형변환이 필요
☁ 자동 형변환
· 연산시 컴파일러가 자동으로 형이 변환하는 것을 의미
예시)
int a = 12;
double d = 3.3;
double result = a + d;
a + d = 12 + 3.3 = 12.0 + 3.3 = 15.3
-> 단, byte와 short 자료형의 값의 계산 결과는 무조건 int로 처리
▷ byte와 short의 연산
byte bnum = 10, bnum2 = 20;
byte result = bnum + bnum2; -> 에러 발생
* 에러 발생이 나지 않으려면,
int result = bnum + bnum2;
byte result = (byte)(bnum + bnum2);
☁ 강제 형변환
· 데이터가 큰 자료형에서 작은 자료형으로 변경 시, 데이터 손실이 있을 수 있으므로 유의
int inum = 10;
long lnum = 100;
int isum = 10 + 100;
// int isum = inum + lnum; 타입이 맞지 않아 에러 발생 --> long에서 int로 자동형변환이 될 수 없다.
// 아래 세가지 코드처럼 변환하여 출력할 수 있다
1. long lsum = inum + lnum;
2. int isum = inum + (int)lnum;
3. int isum2 = (int)(inum+lnum);
double temp;
int name = (int)temp;

☁ 변수와 메모리 구조

'Java' 카테고리의 다른 글
[ Java ] Java 파일의 컴파일 과정 (0) | 2023.04.29 |
---|---|
[ Java ] 개발 도구없이 cmd 창으로 컴파일 하기 (0) | 2023.04.28 |
[ Java ] Call by Value와 Call by Reference 차이, 예제 (0) | 2023.03.03 |
[Java] 출력 메서드 (System.out.println(), System.out.print(), System.out.printf() ) (0) | 2023.01.12 |
[OOP] 객체 지향 언어 (0) | 2023.01.10 |