데이터 타입이란 자료에 대한 형태를 의미
데이터 타입은 변수를 만드는 역할을 하며 타입이 지정된 변수에는 데이터를 넣을 수 있음
1. 기본형, 원시형(Primitive Type), 값형(Value Type)
: byte, short, int, long, float, double, char, boolean
Data Type | Size | Description |
---|---|---|
byte | 1 byte | Stores whole numbers from -128 to 127 |
short | 2 bytes | Stores whole numbers from -32,768 to 32,767 |
int | 4 bytes | Stores whole numbers from -2,147,483,648 to 2,147,483,647 |
long | 8 bytes | Stores whole numbers from -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 |
float | 4 bytes | Stores fractional numbers. Sufficient for storing 6 to 7 decimal digits |
double | 8 bytes | Stores fractional numbers. Sufficient for storing 15 decimal digits |
boolean | 1 bit | Stores true or false values |
char | 2 bytes | Stores a single character/letter or ASCII values |
2. 참조형 (Reference Type)
: 클래스 (Class) > 사용자가 정의 가능
: 배열 (Array)
: 열거형 (Enum)
: 인터페이스 (Interface)
대부분 개발자들은 변수를 생성 후 임의로 초기값을 할당한다.(나중에 발생할 제어 오류로 인한 에러발생 때문에)
Data Type | Default Value (for fields) |
---|---|
byte | 0 |
short | 0 |
int | 0 |
long | 0L |
float | 0.0f |
double | 0.0d |
char | '\u0000' |
String (or any object) | null |
boolean | false |
데이터를 담을 수 있는 그릇
정의된 자료형으로 메모리에 할당받은 공간.
프로그램에서 사용되는 데이터를 입출력하는 용도.
상수(데이터)를 직접 조작하는것보다 변수를 사용하면 조작성이 향상되고, 또한 의미가 분명해진다.(가독성이 높아진다.)
1. 변수 생성하기
자료형 변수명 ;
int javaScore;
2. 변수 초기화
int javaScore = 89;
3. 변수 사용하기
출력, 연산 , 조건, 기록 등...
System.out.println(javaScore);
: 데이터타입은 모양만 가지고 있는 존재로 홀로 메모리를 생성할 수 없다! 그래서 변수를 이용하는 것!
: 변수도 데이터 타입 없이 홀로 존재하는 것이 불가능하다!
1. 헝가리언 표기법
: 식별자를 만들 때 식별자의 접두어로 자료형을 표시하는 방법
: int intAge / int iAge ..등등
: 요즘엔 잘 사용 안 함
2. 파스칼 표기법
:식별자의 첫문자를 대문자 표기 + 나머지 문자를 소문자
: 2개 이상의 합성어 > 각 단어의 첫문자를 대문자로 표기
: 주로 클래스명 만들 때 사용
: int englishscore -> int EnglishScore
3. 캐멀 표기법
: 식별자의 첫문자를 소문자 표기 + 나머지 문자를 소문자
: 2개 이상의 합성어 > 각 단어의 첫문자를 대문자로 표기
: 주로 변수명과 메서드 만들 때 사용
: int mathScore;
4. 스네이크 표기법
: 전부 소문자표기
: 합성어 > 각단어를 '_'으로 연결
: 사용처가 정해져 있지 않음
: int english_score
5. 케밥 표기법
: 전부 소문자표기
: 합성어 > 각단어를 '-'으로 연결
꽤 많은 언어에서는 '-'를 빼기로 인식해서 사용 불가
: 웹 html, css에서는 자주 씀
: int english-score
데이터 중 일부는 값을 변화시키면 안되는 값들이 존재
ex) double pi = 3.14;
final 변수 = 상수 (constant) = 이름을 붙인 변하지 않는 값
상수는 대문자 표현
final double PI = 3.14; //변수와 구분하기 위함
수학 연산자 > 프로그래밍 연산자
피연산자를 대상으로 미리 정해진 연산(행동)을 한 후에 연산(행동)의 결과를 반환하는 역할
연산자 우선 순서
산술 연산자 > 비교연산자 > 논리 연산자 > 대입 연산자
1. 행동 (목적)
: +, -, *, /, %(mod, 나머지)
: 이항 연산자
: 피연산자를 숫자형을 가진다. (정수,실수)
//10 + 3 =13
System.out.printf("%d + %d = %d\n",a,b,a+b);
System.out.printf("%d - %d = %d\n",a,b,a-b);
System.out.printf("%d * %d = %d\n",a,b,a*b);
System.out.printf("%d / %d = %d\n",a,b,a/b);
System.out.printf("%d %% %d = %d\n",a,b,a%b);//%를 하나만 쓰면 스페이스와 %를 형식문자로 생각해서 에러가 남
❗ 주의 할 것 ❗
모든 산술 연산자의 결과값의 자료형
두 피연산자의 자료형 중에서 더 크기가 더 큰 자료형으로 반환된다.
데이터 손실을 최소화하기 위해서
int e = 1000;
byte f = 10;
System.out.println(e+f); //int + byte = int
int g = 1000000000;
int h = 2000000000;
long i =(long)g+h;
System.out.println(i);
//int 30억을 표현할 수 없음. => 에러가 안 뜨고 이상한 값이 나오기 때문에 주의!!
✔ int형을 자주 쓰는 이유
byte j =10;
byte k = 20;
System.out.println(j+k)
// Type mismatch: cannot convert from int to byte 에러 발생
// byte와 short의 연산의 결과는 항상 int이다.
byte l = (byte)(j + k) ; //형 변환이 귀찮기 때문에 주로 int를 자주 사용함
//정수 > int 주로 사용. 가끔씩 long 사용
//실수 > double 주로 사용 (정밀도 때문)
: > , >=, <, <=, ==(equals), !=(not equals)
: 이항 연산자
: 피연산자들의 우위(동등) 비교
: 피연산자는 숫자형을 가진다
: 연산의 결과가 boolean이다. (true,false)
int a = 10;
int b = 3;
System.out.printf("%d > %d = %b\n", a, b, a>b);
System.out.printf("%d >= %d = %b\n", a, b, a>b);
System.out.printf("%d < %d = %b\n", a, b, a>b);
System.out.printf("%d <= %d = %b\n", a, b, a>b);
System.out.printf("%d == %d = %b\n", a, b, a>b);
System.out.printf("%d != %d = %b\n", a, b, a>b);
System.out.println();
//결과
10 > 3 = true
10 >= 3 = true
10 < 3 = true
10 <= 3 = true
10 == 3 = true
10 != 3 = true
문자열(참조형) 비교
String s1 = "홍길동";
String s2 = "홍길동";
String s3 = "홍";
s3 = s3 + "길동";
System.out.println(s1 == s2);
System.out.println(s3);
System.out.println(s1 == s3); //false
//*** 문자열의 비교는 ==, != 연산자를 사용하면 안된다.
//*** 문자열의 비교는 equals() 메서드를 사용한다.
System.out.println(s1.equals(s2)); //s1 == s2
System.out.println(s1.equals(s3)); //s1 == s2
//결과
true
홍길동
false
true
true
: &&(and), ||(or), !(not)
: 2항 연산자 (&&, ||)
: 1항 연산자 (!)
: 피연산자의 자료형이 boolean이다.
: 연산의 결과가 boolean이다.
: 피연산자를 정해진 규칙에 따라 연산을 한 후에 값을 반환
1. A && B (논리곱(X))
T = 1 , F = 0
T && T = T
T && F = F
F && T = F
F && F = F
2. A || B (논리합(+))
T = 1 , F = 0
T || T = T
T || F = T
F || T = T
F || F = F
3. !A
!T = F
!F = T
4. A ^ B = ? ,배타적 논리합(xor)
T ^ T = F
T ^ F = T
F ^ T = T
F ^ F = F
boolean f1 = true;
boolean f2 = false;
System.out.println(f1 && f2);
System.out.println(f1 || f2);
System.out.println(!f1);
System.out.println(f1 ^ f2);
//결과
false
true
false
true
: =
: +=, -=, *=, /=, %= (복합 대입 연산자)
: LValue(변수) = RValue(상수,변수)
=> LValue와 RValue의 지료형이 동일해야한다. > 형변환
: 대입 연산자는 모든 연산자들 중 우선 순서가 가장 낮다.
: 대입 연산자는 연산 방향이 오른쪽 > 왼쪽으로 실행된다.
//대입 연산자만 오른쪽부터 실행
int m1 = 100;
int m2;
int m3;
//m2 = m1;
//m3 = m1;
m3 = m2 = m1;
System.out.println(m3);
//결과
100
//복합 대입 연산자
int n = 10;
//n에 1을 추가하시오. > n의 값에 1을 더한 값을 n에 다시 넣어라 > 누적
n = n + 1 ;
System.out.println(n);
n += 1;
System.out.println(n);
: ++(증가), --(감소)
: 1항 연산자
: 피연산자는 숫자형을 가진다.
: 누적 연산을 한다.
: 기존의 값에 1을 더한다. 1을 뺀다.
❗ 주의 할 점 ❗
연산자와 피연산자의 위치를 바꿀 수 있다.
연산자의 위치에 따라 연산자의 우선 순위가 달라진다.
1. ++n: 전위배치(전치)
: 연산자 우선 순위가 가장 높다. (괄호보단 낮음)
2. n++: 후위배치(후치)
: 연산자 우선 순위가 가장 낮다. (대입 연산자보다 낮음)
//전위배치
int n = 10;
int result = 0;
//result = 10 + ++n;
++n;
result = 10 + n;
System.out.println(result); //결과: 21
```java
//후위배치
int n = 10;
result =0;
result = 10 + n++;
System.out.println(result); //결과: 20
System.out.println(n); //결과: 11
? :
- 3항 연산자
- A ? B : C
- A : boolean > 조건으로 사용
- B,C : 상수,변수 > 연산의 결과로 사용
- A가 참이면 B를 반환, 거짓이면 C를 반환
int age = 25;
System.out.println(age >= 18 ? "통과" : "거절");
// 조건문(if문) 역할
각 숫자의 비트를 비교해 새로운 숫자 반환
//비트 연산자
a = 10;
b = 5 ;
System.out.println(a & b); //0
System.out.println(a | b); //15