-
[Java] 자바의 자료형 (식별자, 자료형, 래퍼클래스, 형변환)Programming Language/Java 2021. 5. 27. 14:48
이제 Java 진도가 거의 마무리되고 있어서 포스팅하며 전반적으로 정리해보려고 한다.
정리는 학원에서 강사님이 나눠주신 자료 위주로..
1. 식별자
- 사물 등 모든 것에 대해 구별할 수 있는 이름(구성요소를 구별하는 이름)
- 식별자로는 클래스명, 메서드명, 변수명이 있음
- 식별자 정의 규칙
(1) 첫 글자는 '_', '$', 영문 대문자,소문자 (한글 가능/숫자로 시작하지 않음)
(2) 공백문자 및 특수문자 사용 불가
(3) 아래와 같은 예약어 사용 불가
(자바 예약어는 소문자로 이루어져 있고 대소문자를 구분하므로 TRUE, FALSE,NULL은 자바 예약어가 아님)
2. 클래스
FYI: 클래스는 추후 자세히 정리할 예정
- 첫 문자 항상 대문자여야함(첫 문자를 '_' 나 '&' 이외의 특수문자로 시작 불가)
- 하나 이상의 단어가 모여 클래스명 지정할 때, 단어의 첫 문자들만 대문자로 표현
- 클래스 이름은 반드시 파일명과 같아야함
- 숫자로 시작 불가, 공백 포함 불가, 예약어 사용 불가.
- 파스칼 케이스 기법으로 작성(첫글자가 대문자). 예를 들어 CustomerManager
3. 주석
- 주석문은 실제 프로그램에 영향을 주지 않으며 단지 소스코드의 기능이나 동작을 설명하기 위해 사용
- 원시코드(java파일)의 컴파일 단계에서 제외되기 때문에 bytecode(class파일)에는 영향 주지 않음
- 프로그래머 본인 혹은 다른 개발자들이 소스코드를 분석하기 쉽게 하기 위함
- 참고: 주석 컴파일 할 때 javadoc Filename 이용
4. 상수와 변수의 개념
- 상수 : 고유 data 값이며 항상 동일한 의미 지님 = 한 번만 값을 저장할 수 있는 변수(변경 불가능)
- 변수 : 상수를 저장 및 보관(변경 가능)
- 리터럴 = 기존의 상수: 그 자체로 값을 의미하는 것(Java에서 정한 상수의 의미와 구별하기 위해 리터럴이라고 지칭)
- 변수명 : 변수의 특정 이름
- 자료형 : 변수의 크기 규정지어 미리 만들어 둔 크기의 약속(예를 들어 int, double, char 등)
5. 기본 자료형 및 참조 자료형
(1) 기본 자료형(primitive data type): 자바 컴파일러에 의해 해석되는 자료형
(2) 참조 자료형(reference data type)
- 기본자료형이 값을 직접 저장한다면, 참조 자료형은 메모리에 저장된 위치정보를 저장
- 자바 API에서 제공되거나 프로그래머에 의해서 만들어진 클래스를 자료형으로 선언하는 경우(배열, 클래스, 인터페이스)
- 기본 자료형 이외 모든 자료형들이 참조자료형에 속함
6. 자바의 자료형
(1) boolean
- 유일한 논리 자료형
- 1 byte이지만 1 bit만 사용하며 false, true 값을 가짐
(2) byte
- 크기: 1 byte
- 자료형 입출력범위: -128 부터 127 까지
- C언어에서는 초기값이 -129이면 127이지만 Java 에서는 안정성 때문에 컴파일 시 error 발생
하지만 초기화 후 증감연산에 대해서는 C언어와 같음
(3) short
- 크기: 2 byte
- 자료형 입출력범위: -32768 부터 32767 까지
(4) char
- 크기: 2 byte
(주로 UNICODE 사용 - ch= 65, ch='A', ch='\n'
- 아스키코드: 1 byte 문자를 표현, 0 ~ 255 문자범위
- 유니코드(세계문자표준): 2 byte 문자를 표현, 0 ~ 65535 문자범위
유니코드는 세계 여러 국가의 문자들을 표현하는데 어려움이 있어서 1 byte를 추가 할당해서 표현
(5) int (정수 자료형의 기본)
- 크기: 4 byte
(6) float, double: 실수형 (double이 실수 자료형의 기본)
- float 크기: 4 byte (double 보다 크기 작지만 표현할 수 있는 값의 범위가 넓음. 다만 오차 있을 수 있으며, 정밀도는 double이 더 높음)
- double 크기: 8 byte
FYI: 기본적으로 실수는 8 byte 사이즈의 double 에 저장되며, 이에 따라 4 byte 사이즈의 float 에는 저장되지 않아 오류 발생.
4 byte로 저장하기 위해 식별자 F 혹은 f 사용해야함(대부분 소문자 f 사용하는 것 같음)
예를 들어 float f = 3.14f
7. Wrapper Class
- 기본 데이터형을 Class화 해줌
- 기본 자료타입(Primitive type)을 객체로 다루기 위해 사용하는 클래스들을 래퍼 클래스라고 함
- 래퍼 클래스로 감싸진 기본 타입값은 외부에서 변경할 수 없음
- 다른 것들은 첫글자만 대문자 사용하면 되는데, int와 char 는 Integer와 Character 로 사용해야함
- 래퍼 객체 내부의 값을 비교하기 위해 == 연산자를 사용할 수 없음. == 는 내부 값을 비교하는게 아니라 래퍼 객체의 참조 주소를 비교하기 때문이다. 따라서 equals 를 사용해야함
- 래퍼 클래스와 기본 자료형의 비교를 원한다면 == 연산과 equals 연산 모두 사용 가능함
- 예시 (8번부터 15번 line)
1234567891011121314151617181920212223242526import java.lang.*;public class WrapperEx{public static void main(Stirng[] args) {byte a min = Byte.MIN_VALUE;byte a max = Byte.MAX_VALUE;char a min = Byte.MIN_VALUE;char a max = Byte.MAX_VALUE;int a min = Byte.MIN_VALUE;int a max = Byte.MAX_VALUE;float a min = Byte.MIN_VALUE;float a max = Byte.MAX_VALUE;System.out.println("byte = " + a_min + " ~ " + a_max);System.out.println("char = " + (int) b_min + " ~ " + (int) b_max);System.out.println("int = " + c_min + " ~ " + c_max);System.out.println("float = " + d_min + " ~ " + d_max);}}cs 아래 블로그에 자세히 설명되어 있고 박싱, 언박싱 / 자동박싱, 자동언박싱에 대한 설명도 나와있음!
[Java] 래퍼 클래스(Wrapper Class)란 무엇인가? (박싱, 언박싱) (tistory.com)
8. 형 변환
매번 형변환하는건 비효율적 -> 이럴 때 사용하는게 Generic(제네릭)..!
FYI: 추후 포스팅 예정이나, 제네릭 관련해서 미리 공부하고 싶다면 아래 블로그 참고. 재미있게 작성하신 것 같음
[Java] #8-3 자바 Generic과 W.. : 네이버블로그 (naver.com)
(1) 프로모션(자동/묵시적 형변환 =업캐스팅): 작은 타입이 큰 타입으로 들어감
- 묵시적 변환: 자료형의 크기가 서로 다른 자료의 연산 결과는 크기가 큰 자료형으로 자동 변환
(2) 디모션(강제/명시적 형변환 = 다운캐스팅): 큰 타입이 작업 타입으로 들어감
- 프로그래머가 cast연산자를 이용해 그 순간만 필요한 자료형으로 변경할 수 있음 = casting = 형변환
12345678910111213141516//프로모션 (자동)short a,b;a = b = 10;int c = a + b;//디모션 (명시해야함)int c = 0;short s = 10;c = (int)(10+3.5f);cs (3) 숫자 -> 문자열
- String ss = String.valueOf(number);
(4) 문자열 -> 숫자
- byte b = Byte.parseByte(str);
- short s = Short.parseShort(str);
- int i = Integer.parseInt(str);
- long lo = Long.parseLong(str);
- float f = Float.parseLong(str);
- double d = Double.parseDouble(str);
'Programming Language > Java' 카테고리의 다른 글
[자바의 정석] ch6-11 ~ ch6-21 객체지향 개념 정리 (선언위치, 변수종류, 메서드, return문) (0) 2021.07.14 [자바의 정석] ch6-1 ~ ch6-10 객체지향 언어 정리 (0) 2021.07.13 [JAVA] JavaFX 위한 Scene Builder 설치과정 (0) 2021.05.26 [Java] Error: java.lang.UnsupportedClassVersionError (0) 2021.05.26 [백준 알고리즘] 10950번: A+B - 3 (Java: for문) (0) 2021.05.22