자료형(type)
자료의 형태 Data Type
- 문자열 (String)
- 큰 따옴표 내에 들어오는 문자형 자료
- 숫자 자료형 (int, long, double, float)
- 실수 정수 등의 자료
- 불리언 자료형 (boolean)
- true, false를 반환하는 자료
- 기본 자료형
- 실제 데이터 값을 저장
- int, long, float, double, boolean, char, ...
- 참조 자료형
- 데이터가 저장된 메모리 주소 값을 저장
- 클래스, 인터페이스, 배열, 열거형 , ...(String))
기본 자료형(Primitive)
정수형
자료형 | 크기 | 값의 범위 | 설명 |
byte | 1 byte | -128 ~ 127 | 작은 정수를 저장할 때 사용 |
shot | 2 bytes | -32,768 ~ 32,767 | byte보다 큰 정수 |
int | 4 bytes | -2,147,483,648 ~ 2,147,483,647 | 일반적인 정수를 저장 |
long | 8 bytes | -2^63 ~ 2^63 - 1 | 큰 정수를 저장 (64비트) |
실수형
자료형 | 크기 | 값의 범위 | 설명 |
float | 4 byte | 약 ±3.4e-038 ~ ±3.4e+038 | 단정도 부동소수점 (소수점 저장) |
double | 8 bytes | 약 ±1.7e-308 ~ ±1.7e+308 | 배정도 부동소수점 (더 정밀함) |
문자형
자료형 | 크기 | 값의 범위 | 설명 |
char | 2 byte | 0 ~ 65,535 (유니코드 값) | 문자 하나를 저장 |
논리형
자료형 | 크기 | 값의 범위 | 설명 |
boolean | 1 bit | true or false | 논리값 저장 |
참조 자료형(Reference)
자료형 | 설명 |
클래스(class) | 정의된 데이터 구조 (필드와 메소드 포함) |
배열(array) | 같은 타입의 여러 값을 저장하는 데이터 구조 |
문자열(String) | 불변 객체(immutable object) (기본 자료형과 다름) |
래퍼 클래스(Wrapper class) | 기본 자료형을 객체로 감싸는 클래스 |
인터페이스(interface) | 메소드의 껍데기만 정의하여 다형성 지원 |
기본 자료형과 참조 자료형의 차이
항목 | 기본 자료형 | 참조 자료형 |
저장 방식 | 실제 값 저장 | 객체의 메모리 주소 저장 |
메모리 위치 | 스택(Stack) | 참조 변수는 스택, 객체는 힙(Heap) |
기본값 | 0, false 등 자료형별 기본값 | null |
동작 | 연산자(+,-,*,/, ...)로 직접 연산 가능 | 메소드 호출을 통해 동작 수행 |
변수(variable)
값을 자료형에 맞게 저장함
// 선언과 동시에 초기화
자료형 변수명 = 값;
String name = "문자열";
char rank = 'A';
int number = 15;
long number2 = 200;
float number3 = 1.5;
double number4 = 19.5;
boolean pan = true;
// 선언따로 값 따로
자료형 변수명 = 값;
String name;
name = "문자열";
char rank;
rank = 'A';
int number;
number = 15;
long number2;
number2 = 200;
float number3;
number3 = 1.5;
double number4;
number4 = 19.5;
boolean pan;
pan = true;
상수(constant)
변하지 않는 값.
한번 지정하면 바꿀 수 없음.
final 자료형 변수명 = 값;
final int number = 1;
// error
number = 2;
형 변환(type casting)
정수, 실수, 문자열 등 자료형간의 변환
// (자료형) 변수명 or 값;
int number = 5;
float number_f = (float) number; //변수명
double number_d = (double) 93; //값
묵시적 형 변환
컴파일러가 데이터 내부자료의 변화가 없다 판단할 때에는
int => long => float => double
처럼 형변환을 할때 파라미터 내부 자료형은 생략가능
연산자(operator)
값의 계산을 위해 사용되는 기호 (+, -)
산술연산자(arithmetic operator)
연산자 | 비고 | 예시 | 결과 |
+ | 더하기 | 10 + 5 | 15 |
- | 빼기 | 10 - 5 | 5 |
* | 곱하기 | 10 * 5 | 50 |
/ | 나누기 | 10 / 5 | 2 |
% | 나머지 | 11 % 5 | 1 |
++ | 증가 | ++num num++ |
num의 값 1 증가 (전위 연산) num의 값 1 증가 (후위 연산) |
-- | 감소 | --num num-- |
num의 값 1 감소 (전위 연산) num의 값 1 감소 (후위 연산) |
대입연산자(assignment operator)
(int num = 10; 일때)
연산자 | 비고 | 예시 | 결과 |
= | 우측에 있는 값 또는 식을 좌측에 있는 변수에 대입 |
num = num + 2; num = num -2; |
12 8 |
+= | (좌 + 우) 결과를 좌측에 대입 | num += 2; | 12 |
-= | (좌 - 우) 결과를 좌측에 대입 | num -= 2; | 8 |
*= | (좌 * 우) 결과를 좌측에 대입 | num *= 2; | 20 |
/= | (좌 / 우) 결과를 좌측에 대입 | num /= 2; | 5 |
%= | (좌 % 우) 결과를 좌측에 대입 | num %= 2; | 0 |
비교연산자(comparison operation)
연산자 | 비고 | 예시 | 결과 |
> | 좌측이 우측보다 큰가? | 5 > 3 | true |
>= | 좌측이 우측보다 크거나 같은가? | 5 >= 5 | true |
< | 좌측이 우측보다 작은가? | 5 < 3 | false |
<= | 좌측이 우측보다 작거나 같은가? | 5 <= 3 | false |
== | 좌측과 우측이 같은가? | 5 == 5 | true |
!= | 좌측과 우측이 다른가? | 5 != 3 | true |
논리연산자(logical operator)
연산자 | 비고 | 예시 | 결과 |
&& | and 좌측과 우측이 모두 참인가? |
(5 > 3) && (3 > 1) | true |
|| | or 좌측과 우측중 하나라도 참인가? |
(5 > 3) || (3 < 1) | true |
! | (참 또는 거짓)의 반대 | !(5 == 5) | false |
삼항 연산자(ternary operator)
연산자 | 비고 | 예시 | 결과 |
조건 ? 참 : 거짓 | 조건이 참 == 왼쪽 조건이 거짓 == 오른쪽 |
int x = 3; int y =5; int max = (x>y) ? x : y; |
5 |
문자열(String)
(String name = "I am John"; 일때)
기능 | 비고 | 예시 | 결과 |
length | 길이 | name.length(); | 11 |
toUpperCase | 대문자로 | name.toUpperCase(); | I AM JOHN |
toLowerCase | 소문자로 | name.toLowerCase(); | i am john |
contains | 포함 여부 | name.contains("John"); | true |
indexOf | 인덱스 위치 정보 | name.indexOf("John"); | 5 |
lastIndexOf | 인덱스 마지막 위치 정보 | name.lastIndexOf("n"); | 8 |
startWith | 문자열로 시작하는가? | name.startWith("John"); | false |
endsWith | 문자열로 끝나는가? | name.endsWith("n") | true |
replace | 문자열 변환 | name.replacer("John, Tommy"); | I am Tommy |
substring | 문자열 자르기 | name.substring(5); | John |
trim | 앞뒤 공백 제거 | name.trim(); | I am John |
concat | 문자열 결합 | name.concat(" Doe"); | I am John Doe |
비교
//같은 메모리 공간을 참조
String s1 = "Java";
String s2 = "Java";
System.out.println(s1 == s2); // true
// 다른 메모리 공간을 참조
String s1 = new String("Java");
String s2 = new String("Java");
System.out.println(s1 == s2); // false
// 문자열 내용을 비교하려면 equals
String s1 = new String("Java");
String s2 = new String("Java");
System.out.println(s1.equals(s2)); // true
일반적으로 String을 선언할시 똑같은 문자열이면 같은 메모리 주소에 저장되고
같은 메모리공간을 참조함
new 키워드로 선언할시 각각 다론 메모리 주소에 할당되어 같은 문자로 취급하지 않음.
(ex. 동명이인)
특수문자(Escape Sequence)
특수 문자 | 비고 | 예시 | 결과 |
\n | 줄바꿈 | System.out.println("A\nB"); | A B |
\t | 탭 | System.out.println("A\tB"); | A B |
\\ | 역슬래쉬 | System.out.println("A\\B"); | A\B |
\" | 큰 따옴표 | System.out.println("A\"B"); | A"B |
\' | 작은 따옴표 | System.out.println("A\'B"); | A'B |
'Java > Java Language' 카테고리의 다른 글
[Java 기초] 익명클래스 Anonymous, 람다 Lambda, 스트림 Stream (0) | 2024.11.28 |
---|---|
[Java 기초] 리스트 list (0) | 2024.11.28 |
[Java 기초] 클래스 class (0) | 2024.11.28 |
[Java 기초] 아스키코드 ascii code, 메소드 method (0) | 2024.11.26 |
[Java 기초] 제어문 control statement, 반복문 loop statement, 배열 array (0) | 2024.11.26 |