[Java] 01. 기본 문법 및 응용 (Java의 특징, 변수, 데이터 타입)
0. 자바의 특징
- OOP is A.P.I.E ?
- OOP(Object-Oriented-Programming = 객체지향 프로그래밍) is
Abstraction. Polymorphism. Inheritance. Encapsulation- GC(Garbage Collection)
- 더 이상 사용하지 않는 메모리를 자동으로 정리하는 기능
1. 변수
- 수학에서는 변하는 수 x
- 컴퓨터에서는 메모리 공간(그릇)
- 메모리 공간에 값(value)을 할당(assign) 후 사용
- 공간의 크기는 타입별로 달라짐
2. Type 이란?
- 데이터의 종류
- Primitive Type (기본형)
- 미리 정해진 크기의 Memory Size로 표현
- 변수 자체에 값 저장
- Reference Type (참조형)
- 크기가 미리 정해질 수 없는 데이터의 표현
- 변수에는 실제 값을 참조할 수 있는 주소만 저장
- Primitive Type
구분 Type bit 수 값 Wrapper Class 논리형 boolean true/false Boolean 정수형 byte 8 -2^7 ~ 2^7-1 (-128 ~ 127) Byte short 16 -2^15 ~ 2^15-1 (-32768 ~ 32767) Short int 32 -2^31 ~ 2^31-1 (-2147483648 ~ 2147483647, 대략 20억) Integer long 32 -2^31 ~ 2^31-1 (-9223372036854775808 ~ 9223372036854775807) Long 실수형 float 32 float f = 0.1234567890123456789f; => 0.12345679 Float double 64 double d = 0.1234567890123456789; => 0.12345678901234568 Double 문자형 char 16 \u0000 ~ \uffff(0~2^16-1) Character
- 총 8개
- Reference Type
- 나머지 모든 데이터 타입(String, int[], Node와 같은 사용자 정의 타입 …)
// 기본문제
int i1 = Integer.MAX_VALUE;
int i2 = i1+1;
System.out.println(i2);
//실행결과
//overflow
3. 형 변환(Type Casting)
- 변수의 타입을 다른 타입으로 변환하는 것
- char <= => int
- Primitive는 Primitive끼리, Reference는 Reference기리 형 변환 가능
- boolean은 다른 기본 타입과 호환되지 않음
- 기본 타입과 참조형의 형 변환을 위해서 Wrapper 클래스 활용
- 형 변환 방법
- 형 변환 연산자(괄호) 사용
double d = 100.5;
int result = (int)d;
// d = 100.5
// result = 100
- 타입의 표현 범위
- byte -> short -> int -> long -> float -> double
- char -> int …
- 타입의 표현 범위가 커지는 방향으로 할당할 경우는 묵시적 형 변환 발생
- 명시적 형 변환은 값 손실이 발생할 수 있다.
- 묵시적 형 변환은 값 손실 걱정없이 JVM이 서비스 해줌
//묵시적 형 변환(값 손실 x) //명시적 형 변환 (값 손실 o)
byte b = 10; int i = 300;
int i = (int)b; byte b = (byte)i;
int i2 = b;
//기본문제
int i1 = Integer.MAX_VALUE;
int i2 = i1 + 1;
System.out.println(i2); // -2147483648
long l1 = i1 + 1;
System.out.println(l1); // -2147483648
long l2 = (long)(i1 + 1);
System.out.println(l2); // -2147483648
long l3 = (long(i1) + 1);
System.out.println(l3); // 2147483648
int i3 = 1000000 * 1000000 / 100000;
int i4 = 1000000 / 100000 * 100000;
System.out.println(i3 + " : " + i4); // -7273 : 1000000 , 컴퓨터는 앞에서부터 계산하기 때문에
int k = 66;
char c = (char)k;
System.out.println(c); // B
c='A';
k=c;
System.out.println(k); //65
int i = 10/3;
System.out.println(i); //3
float f = 10/3;
System.out.println(f); //3.0
float f2 = 10f / 3F;
System.out.println(f2); //3.3333333
double d = 10d / 3D;
System.out.println(d); //3.3333333333333335
System.out.println((10/3)*3); //9
Wrapper 클래스?
래퍼 클래스(Wrapper Class)는 산술연산을 위해 정의된 클래스가 아니므로 인스턴스에 저장된 값을 변경할 수 없다.
단지, 값을 참조하기 위해 새로운 인스턴스를 생성하고, 생성된 인스턴스 값만을 참고할 수 있다.
박싱 : 기본타입 -> 래퍼클래스 / 언박싱 : 래퍼클래스 -> 기본타입 (JDK 1.5부터는 컴파일러가 자동처리, 오토 박싱, 오토 언박싱)
Integer num = new Integer(17); //박싱
int n = num.intValue(); //언박싱
System.out.println(n);
Character ch = 'X'; // 오토박싱, Character ch = new Character('X')
char c = ch; //오토언박싱, char c = ch.charValue();
System.out.println(c);
//실행결과
//17
//X
댓글남기기