study/Java

[sist] 2023.12.27_Java : Comment(주석), DataType(데이터 형), 형 변환, Constant

듀2 2024. 1. 14. 18:15

* Comment(주석)

 - 소스코드 안에서 개발자가 코드의 설명을 부여하기 위해 정의하는 것.

 - compiler(javac.exe)가 해석하지 않는다. -> bytecode에는 주석이 생성되지 않는다. (코드의 실행을 막는 용도)

 - Java API Documentation을 작성할 때도 사용.

 

 사용)

 - 한 줄 주석: //

 : 코드의 부연 설명이 짧거나, 코드의 한 줄 실행을 막아야 할 때.

  // 주석으로 설정할 내용

 

 - 여러 줄 주석: /* */

 : 코드의 부연 설명이 길거나, 코드의 여러 줄 실행을 막아야 할 때. 코드 내의 일부분을 막을 때

 /*

 주석으로

 설정할 내용

 들

 */

 

 - API 주석: /** */ - 정의하는 위치가 결정되어 있다. (단축키: 윈도우-shift+alt+j, 맥-option+command+j)

 : API 문서를 생성할 때 사용. (class 위, field 위, method 위에 정의)

 /**

 API 문서에 들어갈 내용

 */

 


 

* DataType(데이터 형)

 - 값을 저장하기 위해 저장할 종류(상수)에 따라 이름을 부여해 놓은 것.

 - 변수를 선언할 때 사용.

 - 기본형 데이터 형(변수 자체에 을 저장할 목적으로 만들어진 데이터 형 - byte, short, int, long, char, float, double, boolean), 참조형 데이터 형(변수 자체에 주소를 저장할 목적으로 만들어진 데이터 형 - class, String, array)  두 가지를 제공.

 

* Primitive Type(기본형 데이터 형)

데이터 종류 데이터 형 명 크기(byte) 범위(range)
- Signed Value(음수+양수)
- Unsigned Value(양수만)
사용 예
정수 byte 1 -128 ~ +127 byte b = 20;
byte b = 128; // error
short 2 -32768 ~ +32767 short s = 10;
int 4 -2147483648 ~ +2147483647 int i = 10;
long 8 -2^63 ~ +2^63-1 long l = 10; // 형명시 생략
long l = 3000000000L; // 형명시
문자 char 2 '로 감싼 영문자 한자, 한글, 한자, 숫자 한 자의 unicode 값을 저장 char c = 'A'; char c = '0'; char c = '가';
저장되는 값은 unicode값이 저장된다.
char c = 'A'; -> 65가 저장
char c = 65; -> 출력하면 unicode에 해당하는 문자가 출력된다.
16진수 할당가능.
char c = '\u0000' ~ '\uFFFF'
실수 float 4 유효연산 7자리 float f = 12.27F; // 형명시 필수
float f = 12.27f;
double 8 유효연산 15자리 double d = 12.27; // 형명시 생략 가능
double d = 12.27D;
double d = 12.27d;
불린 boolean 1 true/false만 저장 가능 boolean b = true;

 - charset: 컴퓨터에서 문자를 사용할 수 있도록 미리 정의해둔 테이블.

 - ASCII Code: 1byte - 영어, 숫자, 특수문자

 - Unicode: 2byte - 영어, 한글, 숫자, 특수문자


 

* literal: 코딩 창에서 상수를 사용하면, 상수가 저장되는 메모리 공간을 의미.

int i = 10;		// 10이 literal에 저장

 

 - literal은 이름이 없고, literal에 저장된 값은 변수로 할당된다.

 - 정수 literal은 4byte이고, 실수 literal은 8byte이다.

 

int i = 10;

0000 0000 0000 0000 0000 0000 0000 1010

-> int 4byte

0000 0000 0000 0000 0000 0000 0000 1010

-> 정수 literal 4byte

 1. 상수를 정의한 후, 프로그램이 실행되면 상수는 메모리에 저장된다. -> 리터럴에 저장된다.

 2. 그 후 리터럴에 저장된 값이 선언된 변수에 할당된다.

 

long asset = 3100000000; -> 리터럴은 4byte이기 때문에 -21억~+21억까지만 저장할 수 있다. 정의한 값이 21억을 초과하기 때문에 리터럴에 저장할 수 없어서 error

0000 0000 0000 0000  0000 0000 0000 1010 0000 0000 0000 0000 0000 0000 0000 1010

-> long 8byte

0111 1111 1111 1111 1111 1111 1111 1111

-> 정수 literal 4byte -> 리터럴이 가질 수 있는 값 최대 2147483647, 더 큰 값은 저장할 수 없다. error

 

=> 등가(리터럴에 선언된 값이 변수에 할당되려면, 리터럴의 크기와 변수의 크기가 같거나 커야 한다!)

 


 

* 형명시(상수 뒤에만 사용가능)

 - 리터럴의 크기를 일시적으로 변경해주는 것.

 - 정수: L 또는 l을 상수 뒤에 붙여서 리터럴의 크기를 4byte에서 8byte로 변경(크기 늘림)

 사용 예)

  상수L 또는 상수l

  long asset = 3100000000L;

   -> 1. 4byte의 리터럴이 8byte로 증가하여 값이 저장되고, 2. 저장된 값이 변수에 할당된다.

   -> 리터럴이 늘어나면 최대 9223372036854775807 값을 저장할 수 있다.

 

* 실수 리터럴 8byte의 기본

 - D, d, F, f의 형명시를 사용할 수 있다. (D, d는 생략하여 사용)

 - F, f(필수)는 리터럴의 크기를 줄여주는 일.

float f = 12.27;	// error: 8byte의 리터럴이 4byte 변수로 할당될 수 없다.
float f = 12.27f;

  -> 1. 8byte의 리터럴이 4byte로 축소되어 실수 값이 저장되고, 2. 저장된 값이 변수에 할당된다.

 

* Promotion(자동 형 변환)

 - JVM이 상황에 따라 데이터 형의 크기를 자동으로 변경해주는 것.

 - 변수의 값을 할당하거나, 연산할 때 자동 형 변환이 발생한다.

 - promotion, demotion 지원

 

 변수에 할당)

byte b = 10;	// 4byte literal이 1byte로 줄어들어 할당된다. (demotion)
short s = 10;	// 4byte literal이 2byte로 줄어들어 할당된다. (demotion)

 

연산)

 int의 하위 데이터 형이 연산되면 결과는 int로 발생한다. (promotion)

 byte + byte = int

 short + short = int

 byte + short = int (byte가 short로 변환된 후 short끼리 연산되고, 결과는 int로 발생)

 short + int = int

byte num1 = 10;	// -128 ~ +127
byte num2 = 20;
byte result = 0;

result = num1 + num2;	// error!
// int의 하위 데이터형이 연산되면 연산결과가 int(4byte)로 저장되기 때문에
// byte(1byte)형의 result변수로 할당될 수 없다.

 

* Casting(강제 형 변환)

 - 개발자가 필요한 데이터 형으로 일시적인 변환을 하는 것.

 - 값 손실이 발생할 수 있다.

 - 기본형에서 참조형으로, 참조형에서 기본형으로는 강제 형 변환이 되지 않는다.

 - boolean형은 강제 형 변환이 되지 않는다.

 

 문법)

  (변환할 데이터형) 값(변수, 상수);

float f = (float)12.27;
// 1. 8byte 리터럴에 저장된 값이
// 2. 4byte로 축소되고
// 3. 축소된 값이 할당된다.
double d = 12.27;
int i = d;	// error! 8byte의 값(실수)이 4byte(정수)로 할당될 수 없다.

int i = (int) d;
// 1. 8byte 리터럴에 저장된 12.27 값이
// 2. 4byte의 int형으로 변환되고 (실수가 사라진다.)
// 3. 정수만 할당된다. (12) - 값 손실이 발생한다.

 


 

* Constant

 - 변수를 상수처럼 사용할 때 사용. (가독성을 향상시키면서, 값을 변경하지 못하도록 만들기.)

 - 변수: 변하는 수, 가독성 향상

 - 상수: 변하지 않는 수, 가독성 저하

 - class field(instance variable, static variable, constant, constructor, method 존재)에만 정의할 수 있다.

 - Constant는 정의한 클래스 또는 외부 클래스에서도 사용할 수 있다.

 - 프로그램에서 기준 값을 저장하고 사용해야 할 때.

class Test {
// class field(instance 변수, static 변수, constant, method 정의)
	public static void main(String[] args){
	// local
    // Java 코드(출력, 지역변수, 연산, 제어)
    // local
    }
// class field
}

 

 - API에서는 field에서 정의된 Constant를 찾아볼 수 있다.

 

 작성법)

  public static final 데이터형 상수명 = 값;

  - public: 클래스 외부에서 접근 가능

  - static: 모든 메모리에서 접근 가능

  - final: 값 변경 불가

  - 데이터 형: 기본형 데이터 형, 참조형 데이터 형

  - 상수명: 모두 대문자로 기술, 단어를 구분할 때에는 _로 구분한다.

 

 사용)

  정의된 클래스 안)

  Constant명;

  클래스명.Constant명;

class Test{
	public static final int MAX_SCORE = 100;
    
    public static void main(String[] args){
    	MAX_SCORE;
        Test.MAX_SCORE;
    }
}

 

  외부 클래스)

  클래스명.Constant명;

class Temp{
	public static void main(String[] args){
    	Test.MAX_SCORE;
    }
}

 

* Wrapper Class

 - 기본형 데이터 형과 이름이 같거나 유사한 클래스들. (Boolean, Byte, Double, Float, Integer, Long, Short, ...)

 - 기본형 데이터 형(기능이 없음)을 감싸서 객체로 생성한 후 다양한 기능을 사용하기 위해 만들어진 클랫

 - byte: 기본형 데이터 형 - 변수를 선언하고, 값을 저장하고, 사용.

 - Byte: 클래스(참조형 데이터 형) - 객체를 생성하고, 객체가 가진 다양한 기능(method)을 사용.

728x90