
자료형(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 |