데이터를 담을 수 있는 공간(각각의 데이터에 따라 사이즈 즉 크기가 다를 수 있다.)
변수에는 각각의 공간에 담을 수 있는 데이터의 종류가 다르게 설정되어 있고, 맞지 않는 데이터는 담을 수가 없다.
자료형 : 데이터를 지정해서 담는 용도
변수명 : 데이터 공간의 이름
변수의 선언 -> 자료형 + 변수명;
ex) 자료형 g_Level; // 가능하다
되지 않는것
자료형 41age; (숫자가 앞에 오면 안된다.)
(이미 자바에서 정해져 있는 예약어)
자료형 while;
자료형 for;
변수는 무조건 소문자로 시작한다.
카멜 표기법
int korScore (이어지는 단어의 시작을 대문자로 써서 구분한다.)
헝가리안 표기법(스네이크 표기법)
int FIRSTSCORE (이어지는 단어 앞에 언더바를 이용해 구분한다.)
자료형 | 키워드 | 크기 | 기본값 | 표현되는 값의 범위 |
---|---|---|---|---|
논리형 | boolean | 1bit | false | true 또는 false(0또는1) |
문자형 | char | 2byte | \u0000 | 0~65,535 |
정수형 | byte | 1byte | 0 | -128 ~ 127 |
short | 2byte | 0 | -32768~ 32767 | |
int(기본) | 4byte | 0 | -2147483648 ~ 2147483647 | |
long | 8byte | 0 | -9223372036854775808 ~ 9223372036854775807 | |
실수형 | float | 4byte | 0.0 | -3.4E38 ~ +3.4E38 |
double(기본) | 8byte | 0.0 | -1.7E308 ~ +1.7E308 |
상수란?
항상 변하지 않는 값
상수는 자료형 앞에 final을 붙여 표현하고 항상 대문자 변수명을 사용한다.
특징:
기본적으로 우리는 컴퓨터의 안에 데이터를 볼 수가 없고
이 데이터를 예를 들어 100을 선언한다고 하였을 때
int num = 100; 과 같은 형태로 선언을 할 수 있다.
이 때 100이라는 숫자도 int 100 = 이진수; 로 이루어진
변수이다. 하지만 이 변수는 우리가 설정하는 것이 아니고
이 변수는 항상 같은 값을 유지 해야 하기에 이러한 개념을
리터럴 상수라고 한다.
이러한 리터럴 때문에 우리가 정수나 선언하는 것들을 일일이
2진수로 변환해서 사용할 필요가 없다.
기본적으로 리터럴 상수는
정수 = int, 실수 = double이다.
그렇기 때문에 정수형 중에 Long자료형을 쓸 때는
뒤에 L을 붙여서 표현한다.
실수도 마찬가지로 float자료형을 쓸 때는
뒤에 F를 붙여서 표현해 준다.
업캐스팅
문자 -> 정수 -> 실수
(값이 작은 범위에서 큰 범위로의 형 변환)
작은 곳에서 큰 곳으로 가기에 묵시적 형 변환이 가능하다 (형 변환 타입을 생략 가능하다.)
다운캐스팅
명시적 형 변환으로 큰 곳에서 작은 곳으로 가기 때문에
큰 것을 작은 것으로 변환 하기 위해 타입을 꼭 명시해주어야한다.
예시코드
public class Casting3 {
public static void main(String[] args) {
double kor = 87.5;
double eng = 95.7;
double math = 80.5;
// 각각의 점수들의 소수점을 빼고 합계를 내라
// 그 합계의 평균을 실수형으로 표시해라.
int total = (int) kor + (int) eng + (int) math ;
double avg = (double) total / 3.0;
System.out.println("total: " + total);
System.out.println("avg: " + avg);
}
}
결과 창
항과 연산자
※ 연산을 하게 되면 항상 결과가 나온다.
산술 연산자 실습
public class Operation1 {
public static void main(String[] args) {
int add = 1 + 3 ;
int sub = 10 - 5;
int mul = 10 * 2;
int div = 10 / 5;
int remainder = 10 % 5;
System.out.println(add); // 더하기
System.out.println(sub); // 빼기
System.out.println(mul); // 곱하기
System.out.println(div); // 나누기 몫(정수 끼리의 나누기 경우)
System.out.println(remainder); // 나머지 (배수를 구할 때) (짝수/ 홀수 구할 때)
System.out.println(remainder == 0 ? "5의 배수이다." : "5의 배수가 아니다.");
}
}
결과 콘솔창
실습 코드
public class Operation2 {
public static void main(String[] args) {
int num = 10;
num = num + 1;
// ++num; 해당 라인에서 바로 1을 더해서 변수에 대입(선 증가)
// num++; 해당 라인에서 1을 더 하지만 변수에 대입은 되어있지 않다 (후 증가)
System.out.println(num++);
System.out.println(num);
}
}
콘솔 결과창
관계 연산자와 논리연산자 코드
/*
*
* 논리 연산자
* AND(곱) T && T , T && F 하나라도 F이면 F이다.
*
* OR(합) T || T , T || F , F || F 모두 F 여야 F이다.
*
* NOT(부정) !T 참이면 거짓, 거짓이면 참
*
*/
public class Operation3 {
public static void main(String[] args) {
int num = 11;
boolean flag1 = true;
boolean flag2 = true;
boolean flag3 = num % 2 == 0;
System.out.println(flag1 && flag2);
System.out.println(flag1 && flag3);
System.out.println(!(flag1 || flag3 && flag2));
}
}
결과 콘솔창
public class Operation6 {
/**
* @param args
*/
public static void main(String[] args) {
/*
* 시험 성적을 학점으로 계산하는 프로그램
*
* 정수 자료형 score 변수 선언
* 88 점으로 초기화
*
* 문자 자료형 grade 변수 선언
*
* 조건
* score 가 0점보다 작거나 100점보다 크면 X를 출력
* score 가 90에서 100점이면 A학점
* score 가 80에서 89점이면 B학점
* score 가 70에서 79점이면 C학점
* score 가 60에서 69점이면 D학점
* score 가 0에서 59점이면 F학점
*
*
*/
int score = 58;
char grade = score > 100 || score < 0 ? 'X'
: score > 89 ? 'A'
: score > 79 ? 'B'
: score > 69 ? 'C'
: score > 59 ? 'D': 'F';
char plus = score > 100 || score < 60 ? '\0' : score % 10 > 4 || score == 100 ? '+' : '\0';
System.out.println("점수(" + score + "): " + grade + plus + "학점" );
}
}
결과 콘솔창