[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

태그:

카테고리:

업데이트:

댓글남기기