728x90

네이밍 컨벤션

  • Camel Case 권장
    • 문자열 사이를 대문자로 구분하는 방법
  • 클래스명은 대문자로 쓴다.
  • 패키지명은 소문자로 쓴다.
  • 변수명의 시작은 숫자로 쓰는 건 불가능하다.
  • 변수명의 특수문자에는 $_만 가능하다.
  • 변수명 뒤에 숫자를 쓰는 건 권장되는 방법은 아니다.

⭐ 변수 네이밍의 목적은 프로그래밍 중의 용도에 맞고 가독성을 높이는 것이다!

  • 변수, 함수의 명명은 축약형으로 쓰는 것보다 명시적으로 쓰는 게 좋다!
int ns; // worst
int numberOfStudent; // best
  • indexing variable 같은 경우는 간단한 형태로 표현해도 좋다!
    • Ex: i, j

 


정수

  • bite : 바이트 단위의 데이터 핸들링 시 이용 (음악, 동영상, 실행 파일 등), input / output
  • short : C / C++ 의 라이브러리를 사용할 때 보통 사용
  • int : 기본 정수 자료형
    • 리터럴(프로그램상의 모든 숫자)은 int로 저장
    • 프로그램 내에서 어떤 정수를 로드할 때는 무조건 int를 통해 로드
      -> 변수에 숫자 할당시, 프로그램 내부에 있는 리터릴 숫자를 가져옴
    • long : 리터럴 자체가 4byte로 잡히므로 숫자 뒤에 L 또는 l을 써서 long형임을 명시적으로 표현함
      ⭐ 보통은 L을 써서 혼란을 피한다!
public class VariableTest {
    public static void main(String[] args) {
        byte bnum = -128;

        System.out.println(bnum);

        //int num = 12345678900; // error
        //long lNum = 12345678900; // error
        long lNum = 12345678900L; // OK
        System.out.println(lNum);
    }
}

 


실수

  • 기본 실수 표현형 : double
public class DoubleTest {
    public static void main(String[] args) {
        double dnum = 3.14;
        float fnum = 3.14F;
        /*
        java의 기본 실수형의 리터럴은 double이므로 float를 이용하기 위해서는
        리터럴 뒤에 명시적 식별자 'F'를 추가한다.
        */

    }
}

⭐ 웬만해서는 double을 써서 오류는 피하는 게 좋다!

 

부동소수점 방식

$(-1)^S * M * 2^E$

  • 부동소수점 방식은 자릿수가 제한되어, 표현 가능한 실수의 범위와 정밀도가 제한적이기에 잘 사용되지 않는다.
  • 부동 소수점 방식으로 표현하더라도 오차가 발생한다.
    • 컴퓨터에서는 실수를 근사값으로 리턴하기 때문이다.
    • 지수부가 0을 표현할 수 없기에
    • 부동 소수점 표현 방식의 오차를 해결하기 위해 자바에서는 BigDecimal 클래스를 이용한다.
 

BigDecimal (Java Platform SE 8 )

Returns a string representation of this BigDecimal, using engineering notation if an exponent is needed. Returns a string that represents the BigDecimal as described in the toString() method, except that if exponential notation is used, the power of ten is

docs.oracle.com

 


문자

  • utf-16 인코딩 사용 (모든 문자 2byte)
  • 💡 오버헤드 방지를 위해 일반적으로는 utf-8을 사용한다.
public class CharacterTest {
    public static void main(String[] args) {
        char ch1 = 'A';
        System.out.println(ch1);
        System.out.println((int)ch1);

        char ch2 = 66;
        System.out.println(ch2);
        System.out.println((char)ch2);
    }
}
public class CharacterTest {
    public static void main(String[] args) {
        char ch1 = 'A';
        System.out.println(ch1);
        System.out.println((int)ch1);

        char ch2 = 66;
        System.out.println(ch2);
        System.out.println((char)ch2);

        int ch3 = 67;
        System.out.println(ch3);
        System.out.println((char)ch3);

        // char ch = -66; // 음수 X
        // char ch = 12345678 // 2byte 내에서 핸들링 불가능한 문자 X

        char han = '한';
        char ch = '\uD55C'; // unicode로 표현

        System.out.println(han);
        System.out.println(ch);
    }

 


Local variable type inference

  • Java 10 부터 지원
  • 지역 변수 자료형 추론 : 지역 변수에서 자료형을 명시하지 않아도 사용 가능
  • 한번 선언하여 추론된 변수는 다른 타입의 값을 대입할 수 없음
    • 스크립트 언어가 아닌 컴파일 언어여서 컴파일 당시에 자료형 결정
public class LocalVariableInter {
    public static void main(String[] args) {
        var i = 10;
        var j = 10.0;
        var str = "test";

        System.out.println(i);
        System.out.println(j);
        System.out.println(str);

        var str2 = str;
        System.out.println(str2);

        str = "hello";
        // str = 3; // error
    }
}

 

 

Local Variable Type Inference or LVTI in Java 10 - GeeksforGeeks

A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.

www.geeksforgeeks.org

 

 


상수

  • final
  • 상수같은 경우는 다른 변수와의 차별점을 두기 위해 대문자로 주로 표현
  • 상수를 사용하면 변하지 않는 값을 반복하여 사용할 때 의미있는 문자로 인식하기 쉽고 변하더라도 선언부만 변경하면 됨
public class ConstantTest {
    public static void main(String[] args) {
        final int MAX_NUM = 100;
        final int MIN_NUM;

        MIN_NUM = 0;
        // MAX_NUM = 20; // error

        System.out.println(MAX_NUM);
        System.out.println(MIN_NUM);

    }
}

 


리터럴

  • 프로그램에서 사용하는 숫자, 문자, 논리값
  • 리터럴은 상수 풀(constant pool)에 존재 _ data area
    • 프로그램 실행이 모두 끝난 

 

 


캐스팅

public class TypeConversionTest {
    public static void main(String[] args) {
        int iNum = 255;
        byte bNum = (byte)iNum;

        System.out.println(bNum); // 자료형의 유실로 인한 dummy값 발생

        double dNum = 3.14;
        int inum = (int)dNum;

        System.out.println(inum);

        double dNum1 = 1.2;
        float fNum1 = 0.9F;

        int iNum1 = (int)dNum1 + (int)fNum1;
        int iNum2 = (int)(dNum1 + fNum1);

        // 강제 캐스팅 진행했지만 결과값 상이
        System.out.println(iNum1);
        System.out.println(iNum2);

    }
}

 


Reference

 

자바 BigDecimal: 정확한 실수의 표현과 부동 소수점

자바에서 정확하게 실수를 표현하려면 어떻게 해야 할까? 그리고 부동 소수점 방식이란 무엇일까?

madplay.github.io

 

728x90

'🧑‍💻 Language > Java' 카테고리의 다른 글

[Java] 객체 지향 프로그래밍 (1)  (0) 2022.04.07
[Java] Basic Java (2)  (0) 2022.04.04
[Java] 멀티스레드  (0) 2021.10.18
[Java] 14. 스윙  (0) 2021.06.05
[Java] 13. GUI  (0) 2021.06.01