변수와 자료형
- 프리미티브 타입(Primitive Type): int, long, float, double
- 레퍼런스 타입(Reference Type): Integer, Long, Float, Double
- 레퍼런스 타입은 참조형 변수이기에 프리미티브 타입보다 연산속도가 느림
- 정수형: short, int, long
- 실수형: float, double
- 논리형: boolean
- 문자형: char
/* 변수 선언 */
type varName = value;
/* 변수 선언 예시 */
int iVar = 10;
long lVar = 10;
float fVar = 10.0f;
double dVar = 10.0;
System.out.println(iVar);
System.out.println(lVar);
System.out.println(fVar);
System.out.println(dVar);
연산자
산술 연산자
- 뎃셈, 뺄셈, 곱셈, 몫, 나머지
+) 부동소수점 데이터 처리시 앱실론(epsilon) 주의
+) 정수형 나눗셈은 소수점 버림
/* 산술 연산자 예시(정수형) */
System.out.println(9 + 5);
System.out.println(9 - 5);
System.out.println(9 * 5);
System.out.println(9 / 5);
System.out.println(9 % 5);
/* 산술 연산자 예시(부동소수점형) */
System.out.println(9.5 + 5.0);
System.out.println(9.5 - 5.0);
System.out.println(9.5 * 5.0);
System.out.println(9.5 / 5.0);
System.out.println(9.5 % 5.0); // 소수점 아래 값 주의
/* 엡실론 처리 */
double epsilon = 1E-5;
double a = 0.1 + 0.2;
double b = 0.3;
if (Math.abs(a - b) < epsilon) {
System.out.println("a is equal b");
} else {
System.out.println("a is not equal b");
}
비교 연산자
- 같다, 같지 않다, 크다, 크거나 같다, 작다, 작거나 같다
+) 부동소수점 데이터 처리시 앱실론(epsilon) 주의. Math.abs()로 처리
/* 비교 연산자 예시 */
System.out.println(5 == 0);
System.out.println(5 != 0);
System.out.println(5 < 0);
System.out.println(5 <= 0);
System.out.println(5 > 0);
System.out.println(5 >= 0);
논리 연산자
- and(&&), or(||), not(!)
/* 논리 연산자 예시 */
System.out.println(true && true);
System.out.println(false || true);
System.out.println(!false);
비트 연산자
- and(&), or(|), xor(^), not(~), left shift(<<), right shift(>>)
/* 비트 연산자 예시 */
System.out.println(8 & 12);
System.out.println(8 | 12);
System.out.println(8 ^ 12);
System.out.println(~12);
System.out.println(8 << 1);
System.out.println(8 >> 1);
배열
- 배열(array): 같은 타입의 데이터들의 모음. 크기가 고정되어 있음
- index를 통한 값에 접근, 수정의 시간 복잡도는 O(1)
- Arrays.toString()으로 배열 요소를 쉽게 출력 가능
/* 배열 선언 */
type[] varName = new type[count];
type[][] varName = new type[rows][columns];
/* 배열 선언 및 초기화 */
type[] varName = {value1, ...};
type[] varName = new type[count]{value1, ...};
/* 배열값 접근 */
varName[index];
/* 배열 정렬 */
import java.util.*;
Arrays.sort(arr, (v1, v2) -> Integer.compare(v1, v2));
/* 배열 예시 */
int array1[] = new int[5];
int array2[] = new int[] {1, 3, 5, 7, 9};
array1[0] = 4;
System.out.println(Arrays.toString(array1));
System.out.println(Arrays.toString(array2));
/* 배열(레퍼런스 타입) */
Integer I = new Integer[5];
for (int i = 0; i < I.length(); ++i) {
I[i] = 0;
}
System.out.println(Arrays.toString(I));
컬렉션 프레임워크
- 컬렉션 프레임워크(Collections Framework): 여러 개의 값을 저장하고 효율적으로 처리해주는 표준화 클래스의 집합
- 컬렉션 프레임워크에는 ArrayList, Stack, Queue, ArrayDeque, HashMap이 있음
- 레퍼런스 타입만 사용 가능
- ArrayList: 가변 크기. 맨 뒤에 데이터 추가시 O(1). 삭제 혹은 중간 삽입시 O(N)
- HashMap: 키와 값의 쌍을 저장하는 해시 테이블로 구성. 키를 사용하여 값을 검색하는 자료구조
/* 컬렉션 선언 및 메서드 사용 */
CollectionName<ReferencType> dataArray = new CollectionName<>();
dataArray.method();
/* ArrayList 예시 */
ArrayList<ReferenceType> list = new ArrayList<>(); // 리스트 객체 생성
list.add(value); // 리스트 맨뒤에 값 추가
list.get(index); // 인덱스로 값 접근
/* HashMap 예시 */
HashMap<ReferenceType, ReferenceType> map = new HashMap<>(); // 해시맵 객체 생성
map.put(key, value); // 해시맵에 값 추가 또는 수정
map.get(key); // key에 해당하는 값 반환
map.containsKey(key); // true, false로 키값 존재 확인
map.remove(key); // key에 해당하는 key, value 제거
String
- String: 문자들을 배열의 형태로 구성한 immutable(값 변경 불가) 객체. 기존 객체 수정이 아닌 새로운 객체 반환
+) System.identityHashCode(변수): 객체를 특정할 수 있는 식별값 반환
- StringBuffer와 String Builder는 mutable(값 변경 가능). 두 클래스의 차이는 멀티스레드 환경에서 Thread-Safe 여부 차이
- StringBuillder는 Thread-Safe가 없어 조금 더 빠름
/* String 변수 */
String str = "value1";
str += "value2"; // 새로운 문자열을 만들고 참조
str.replace(변경할 값, 변경될 값); // 해당 문자를 모두 수정
/* StringBuffer와 StringBuilder */
StringBuilder sb = new StringBuilder();
sb.append(value); // 문자열 추가
sb.insert(index, value); // 해당 인텍스에 문자 추가
sb.deleteCharAt(index); // 해당 인덱스 문자 삭제
Method
- 메서드: 클래스 내부에 정의한 함수
- 람다식(lambda expression): Java1.8에서 추가. 익명함수(anonymous function)이라고 함. 코드에서 한 번만 실행 혹은 함수를 다름 함수의 인자로 전달할 때 사용
/* 메서드 정의 */
public type methondName(type param1, ...) {
실행할 코드;
return value;
}
/* 메서드 호출 */
type varName = methodName(arg1, ...);
/* 람다식 정의*/
(param1, ...) -> 반환값;
(param1, ...) -> {
실행될 코드;
return value;
}
기타 주의 사항
- 조기 반환(early return): 코드 실행 과정이 함수 끝까지 도달하기 전에 반환하는 방법. 예외 처리시 사용
- 보호 구문(guard clauses): 로직을 진행하기 전 예외코드를 추가하는 방법. 초기에 유효성 검사
- 제네릭(generic)은 빌드 레벨에서 타입을 체크하여 타입 안전성을 제공. 타입 체크와 형변환을 생략
- 제네릭으로 타입을 강제하여 실수를 방지
Time Check
long start = System.currentTimeMillis();
// 실행될 코드
long end = System.currentTimeMillis();
System.out.println(((end - start) / 1000.0) + "초");
클래스
스트림
제네릭
'코딩테스트 > 코딩테스트(Java)' 카테고리의 다른 글
[코딩테스트] Java - 자료구조 추천 문제 (2) | 2025.03.17 |
---|---|
[코딩테스트] Java - 자료구조 (2) | 2025.03.17 |
[코딩테스트] LeetCode 입문 (0) | 2025.03.17 |
[코딩테스트] Softeer 입문 (1) | 2025.03.17 |
[코딩테스트] Programmers 입문 (0) | 2025.03.17 |