블로그

[JAVA] 타입 본문

개발자 준비과정/JAVA

[JAVA] 타입

하늘바람a 2024. 2. 20. 18:01

자바에는 크게 두가지 타입이 있다.

// *기호가 붙은 것은 자주 쓰는 타입

1.원시타입(primitive type, 기본타입)
 1.1 정수
      byte,short,*int,*long
 1.2 실수
      float,*double
 1.3 논리
      *boolean
 1.4 문자
      *char

2.참조타입(reference type)
 원시타입 빼고 다

 

정수
  • 정수형 : byte(1), short(2), int(4), long(8)
  • 실수형 : float(4), double(8)
  • (괄호)안은 각 정수형을 표현하기 위한 메모리 크기도 단위는 바이트이다.
  • 음수를 표현하기 위하여 메모리 사용 크기를 반으로 나누어 저장한다.
  • 앞자리가 1인경우 음수

 

실수
  • +m*10^n  (부동 소수점 방식으로 메모리에 저장)
    • +,-:부호 m:가수 n:지수
  • float : 부호(1bit) + 지수(8bit) + 가수(23bit) = 32bit = 4byte
  • double : 부호(1bit) + 지수(11bit) + 가수(52bit) = 64bit = 8byte
  • 근사값으로 저장한다.
  • float 는 리터럴 뒤에 f나 F를 붙여 컴파일러가 float 타입임을 알 수 있도록 해야한다.

 

논리(Boolean)
  • 값 : true false
  • 크기 : 1byte

 

문자 
  • 작은따옴표(' ')안에 적는다.
  • 하나의 문자만 쓸 수 있다.
  • 음수값 없음. 모두 양수. 그러므로 2^8=65535가지 수가 나온다
  • 유니코드의 16진수는 0x로 시작.
  • 다음은 16진수가 넘어가는 유니코드 작성법이다
int p = 0x1f3a4;
char[] emoji2 = Character.toChars(p);
String emojit = new String(emoji2);
System.out.println("emojit = " + emojit);

참고)  이모티콘을 찾고 싶을 때는 윈도우키 + v 를 누르면 된다😜

           귀엽고 예쁜 이모지들이 많이 있다💕

 

 

문자열 String

 

  • 큰따옴표(" ")안에 적는다.
  • \n 줄바꿈. 텍스트블록 문법인 """ (큰따옴표 3개)를 쓰면 이스케이프 필요없이 타자를 친대로 저장된다.
    • 이스케이프 : 문자열 내부에 역슬래쉬(\)가 붙은 문자
  • java21부터 가능한 String templete이 있다.
    • \{name} \{country} 등으로 문자열안에 사용 가능하다.
  • scanner 기능 
public static void main(String[] args) {

    Scanner scanner = new Scanner(System.in);

    System.out.println("이름을 입력하세요.");
    String name = scanner.nextLine();
    
    String desc = STR."저는 \{name}입니다.";
    System.out.println("소개 = " + desc);

    scanner.close();}

 

자동변환
  • 크기가 작은 타입에서 큰 타입으로 변환 가능. 반대는 안됨
  • 정수형 : byte(1), short(2), int(4), long(8)
  • 실수형 : float(4), double(8)
  • byte < short,char < int < long < float < double 순으로 허용범위가 크다
  • char타입을 int 타입으로 변환하는 것은 흔하다고 한다.

자동 타입 변환 하는 법

  • 바꾸고 싶은 변수 앞에 변환하고자 하는 타입을 적는다.
char charValue = 'A';
int intValue = charValue; 
//A의 유니코드값인 65가 int타입인 변수, intValue에 저장된다

 

참고1)

  • 그러나 short와 char는 똑같은 2바이트(2^16가지)여도 변환 하지 못함.
  • 이유는 short는 음수와 양수가 같이 있고 (-32768~32767),
  • char 는 양수만 있음(0~65535)

참고2)

  • long은 8바이트, float는 4바이트지만 long에서 float로 변환하지 못함.
  • long보다 float가 훨씬 더 큰 수이기 때문.
  • long : 2^64 대략 1800경. -900경~+900경의 수를 가짐 9.22372*10^18
  • float : 1.4*10^-45~3.4*10^38 음수값도 가짐.

 

var : 변수의 타입을 할당되는 값으로부터 추론한다.
따라서 변수의 선언과 할당을 동시에 해야한다.  가령 var value; value=2; 불가능

 

literal (리터럴)
  • 프로그래머가 직접 입력한 값
  • 정수형 literal : int, 실수형 literal : double 이다.

 

변수는 선언된 블럭{} 안에서만 사용 가능하다.
if (true) {
    int var1 = 2;}
    {System.out.print("var1 = " + var1);}

 

위의 코드는 불가능하다. 변수 var1이 선언된 블록 밖에서 var1을 쓰려고 했기 때문이다.