4 minute read


Literal 과 정수 Literal

  • Literal
  • 프로그램에서 직접 표현한 값
  • 정수, 실수, 문자, 논리, 문자열 literal 있음
    • ex) 34, 42.195, ‘%’, true, “hello”



  • 정수 literal
    • 10진수, 8진수, 16진수, 2진수 literal
       15 -> 10진수 literal 15
       015 -> 0으로 시작하면 8진수. 십진수로 13 
       0x15 -> 0x로 시작하면 16진수. 십진수로 21
       0b0101 -> 0b로 시작하면 2진수. 십진수로 5
       🔽
       int n = 15;
       int m = 015; 
       int k = 0x15; 
       int b = 0b0101;
      
    • 정수 literal은 int 형으로 컴파일
    • long 타입의 literal은 숫자 뒤에 L 또는 I을 붙여 표시
      • ex) long g = 24L



  • 실수 literal
    • 소수점 형태나 지수 형태로 표현한 실수
      • ex) 12., 12.0, .1234, 0.1234, 1234E - 4
    • 실수 타입 literal은 double 타입으로 컴파일
      double d - 0.1234;
      double e = 1234E - 4;
      // 1234E - 4 = 1234x10^-4이므로 0.2134와 동일
      
    • 숫자 뒤에 f(float)나 d(double)을 명시적으로 붙이기도 한다
      float f = 0.1234f; // f 또는 F는 반드시 작성 필요
      double w = .1234D; // .1234D와 .1234는 동일
      



  • 문자 literal
    • 단일 인용부호 (‘‘)로 문자를 표현
      • ex) ‘w’, ‘A’, ‘가’, ‘*’, ‘글, ₩u0041
        • ₩u 다음에 4자리 16진수(2바이트의 유니코드)
          • \u0041 -> 문자 ‘A’의 유니코드(0041)
          • \uae00 -> 한글 문자 ‘글’의 유니코드(ae00)
            char a = 'A';
            char b = '글'; 
            char c = 0041; // 문자 'A'의 유니코드 값(0041) 사용
            char d = uae00; // 문자 '글'의 유니코드 값(ae00) 사용 
            
    • 특수문자 literal은 백슬래시(₩)로 시작 specialliteral_Procdess
      특수 문자 literal



  • 논리 literal 과 boolean 타입
    • 논리 literal은 두 개
      • true, false
      • boolean 타입 변수에 치환하거나 조건문에 이용
        boolean a = true;
        boolean b = 10 > 0;  //  10 > 0 참이므로 b값은 true
        boolean c = 1;   // 타입 불일치 오류. C/C++과 다르게 Java에서 1,0을 boolean으로 사용 불가.
        while(true) {    //  무한 루프. while(1) 로 사용 불가.
        ...
        }
        



  • 기본 타입 이외의 literal
    • null literal
      • 레퍼런스에 대입 사용
        int n = null;   // 기본 타입에 사용불가
        String str = null; 
        
    • 문자열 literal(String literal)
      • 이중 인용 부호로 묶어 표현
        • ex) “Carefree”, “Life”, “자바”, “01.16”, “26”, “a”
      • 문자열 literal은 String 객체로 자동 처리
        String str = "Good";
        



  • JDK7 부터 숫자에 ‘_’ 허용
    • 숫자 literal의 아무 위치에나 언더스코어 ‘_‘허용
      • 컴파일러는 리터럴에서 ‘_’ 를 빼고 처리
    • 사용 예시
      int price = 20_100; // 20100과 동일
      long cardNumber = 1234_5678_1357_9998L; // 1234567813579998L 와 같음
      long controlBits = 0b10110100_01011011_10110011_11110000; //L 또는 l를 안 붙이면, int값으로 인식(32비트)
      long maxLong = 0x7fff_ffff_ffff_ffffL; // 16진수는 4비트 크기이므로 총 64비트 크기
      int age = 2_____5; // 25와 동일
      
    • 허용되지 않는 4가지 경우
      int x = 15_;   //오류. literal 끝에 사용할 수 없다.
      double pi = 3_.14  //오류. 소수점(.) 앞뒤에 사용할 수 없다.
      long idNum = 980116_1234567_L; // 오류. _L(_F) 앞에 사용할 수 없다.
      int y = 0_x15; //오류. 0x 중간이나 끝에 사용할 수 없다. 0x_15(오류)     
      



  • var 키워드를 사용하여 변수 타입 생략
    • Java 10 부터 도입된 키워드.
      • C++의 auto 키워드
    • 지역 변수의 선언에만 사용
    • 변수 타입 선언 생략: 컴파일러가 변수 타입 추론
    • 사용 예시
       var price = 200; // price는 int 타입으로 결정
       var name = "kitae"; // name은 String 타입으로 결정
       var pi = 3.14; // pi는 double 타입으로 결정
       var point = new Point(); // point는 Point 타입으로 결정(4장 참조)
       var v = new Vector<Integer>(); // v는 Vector<integer> 타입으로 결정(7장 참조)
      
  • 변수 선언문에 반드시 초깃값 지정
    var name; // 컴파일 오류. 변수 name의 타입을 추론할 수 없음
    



  • 상수 선언
    • final 키워드 사용
    • 선언 시 초기값 지정
    • 실행 중 값 변경 불가

      final_Procdess
      상수의 선언



  • 변수, literal, 상수 활용 예제
    • 원의 면적을 구하는 프로그램을 작성해보자.
      public class CircleArea {
       public static void main(String[] args) {
           final double PI = 3.14; // 원주율을 상수로 선언
                
           double radius = 10.0; // 원의 반지름
           double circleArea = radius * radius * PI; // 원의 면적 계산
           //원의 면적 화면에 출력
           System.out.println("원의 면적 = " + circleArea);
       }
      }
      

자동 타입 변환

  • 자동 타입 변환
    • 작은 타입은 큰 타입으로 자동 변환
      • 컴파일러에 의해 이루어짐
    • 치환문(=)이나 수식 내에서 타입이 일치하지 않을 때 autotypechange_Procdess
      자동 타입 변환

강제 타입 변환

  • 자동 타입 변환이 안 되는 경우: 큰 타입이 작은 타입으로 변환할 때
      int n = 300;
      byte b = n; // 컴파일 오류. int 타입이 byte 로 자동 변환 안됨. 
    



  • 강제 타입 변환
    • 개발자가 필요하여 강제로 타입 변환을 지시
      • () 안에 변환할 타입 지정
    • 강제 변환은 값 손실 우려가 있다. typechange_Procdess
      강제 타입 변환



  • 타입 변환 예제
      public class TypeConversion {
          public static void main(String[] args) {
              byte b = 127;
              int i = 100;
              System.out.println(b+i); // 227
              System.out.println(10/4);   // 2
              System.out.println(10.0/4); // 2.5
              System.out.println((char)0x12340041);   // A
              System.out.println((byte)(b+i));    // -29 (아래에 풀이)
              System.out.println((int)2.9 + 1.8);     // 3.8
              System.out.println((int)(2.9 + 1.8)); // 4
              System.out.println((int)2.9 + (int)1.8);    // 3
          } 
      }
    
    • (byte)(b+i) 풀이
      • b + i 는 10 진수 227
      • 2진수로 바꾸면 11100011
      • 첫 비트가 1이면 음수이므로 2의 보수를 취한다 -> 00011101
      • 10진수 29와 동일
      • 음수 이므로 -29가 된다.



최대한의 설명을 코드 블럭 내의 주석으로 달아 놓았습니다.

혹시 이해가 안가거나 추가적인 설명이 필요한 부분, 오류 등의 피드백은 언제든지 환영합니다!

긴 글 읽어주셔서 감사합니다. 포스팅을 마칩니다.



처음으로~

  • Literal 과 정수 Literal
  • 정수 literal
  • 실수 literal
  • 문자 literal
  • 논리 literal 과 boolean 타입
  • 기본 타입 이외의 literal
  • JDK7 부터 숫자에 ‘_’ 허용
  • var 키워드를 사용하여 변수 타입 생략
  • 상수 선언
  • 변수, literal, 상수 활용 예제
  • 자동 타입 변환
  • 강제 타입 변환
  • 타입 변환 예제

Tags:

Categories:

Updated:

Comments