Java 코딩 테스트 필수 문법 정리
1. Primitive Type vs Reference Type
Primitive Type (기본 타입)
값 자체를 저장하는 타입
대표적인 타입
- int
- long
- float
- double
- boolean
- char
특징
- 값 자체를 저장
- 연산 속도가 빠름
- null을 가질 수 없음
// primitive type
int a = 0;
long[] longs = new long[10];
float f = 10.5f;
double d = 10 / 3.0;
Reference Type (참조 타입)
객체의 메모리 주소를 저장하는 타입
대표적인 타입
- Integer
- Long
- Float
- Double
- String
- ArrayList
- HashMap
특징
- 객체의 주소를 참조
- null 가능
- Primitive보다 연산 속도가 느릴 수 있음
ArrayList<Integer> arrayList = new ArrayList<>();
Stack<Long> stack = new Stack<>();
Queue<Float> queue = new ArrayDeque<>();
ArrayDeque<Double> arrayDeque = new ArrayDeque<>();
2. 컬렉션 (Collection Framework)
컬렉션 프레임워크는 여러 개의 데이터를 저장하고 관리하기 위한 클래스들의 집합
코딩 테스트에서 자주 사용하는 컬렉션
- ArrayList
- Stack
- Queue
- ArrayDeque
- HashMap
3. 배열 vs 리스트
배열 (Array)
특징
- 크기 고정
- 특정 인덱스 접근 O(1)
- 삽입 / 삭제 불가능
- 값 변경만 가능
int[] arr = new int[10];
arr[0] = 5;
리스트 (ArrayList)
특징
- 가변 길이
- 삽입 / 삭제 가능
- 내부적으로 배열 기반
- 데이터 삽입 시 평균 O(N)
ArrayList<Integer> list = new ArrayList<>();
list.add(10);
list.add(20);
배열 vs 리스트 비교
| 구분 | 배열 | 리스트 |
| 크기 | 고정 | 가변 |
| 접근 속도 | O(1) | O(1) |
| 삽입/삭제 | 불가능 | 가능 |
4. HashMap
HashMap은 key - value 쌍을 저장하는 자료구조
해시 테이블 기반으로 구현됨
특징
- 키를 통해 빠르게 값 검색
- 평균 시간복잡도 O(1)
- 순서 보장하지 않음
주요 메서드
| put(key,value) | 데이터 저장 |
| get(key) | 값 조회 |
| containsKey(key) | key 존재 여부 확인 |
| remove(key) | 삭제 |
사용 예시
// HashMap 초기화
HashMap<String, Integer> map = new HashMap<>();
// 값 삽입
map.put("a", 1);
map.put("b", 2);
map.put("c", 3);
// key 존재 여부
map.containsKey("a"); // true
// 값 조회
map.get("a"); // 1
// 값 수정
map.put("b", 4);
// 삭제
map.remove("a");
5. 문자열 (String)
String은 Immutable 객체
즉, 한 번 생성된 문자열은 변경할 수 없음 문자열을 변경하면 새로운 객체가 생성됨
문자열 예시
String str = "Hi";
str = "He";
str += "llo";
System.out.println(str); // Hello
문자열 수정
str = str.replace("H", "h");
6. StringBuilder vs StringBuffer
문자열을 mutable(변경 가능) 하게 관리하는 클래스
문자열 수정이 많을 때 String보다 효율적
차이점
| StringBuffer | Thread-Safe (멀티스레드 안전) |
| StringBuilder | Thread-Safe 아님 (더 빠름) |
코딩 테스트에서는 대부분
StringBuilder 사용
사용 예시
StringBuilder sb = new StringBuilder();
sb.append(10); // "10"
sb.append("aaa"); // "10aaa"
System.out.println(sb); // 10aaa
sb.deleteCharAt(3); // "10aa"
sb.insert(1, 2); // "120aa"
System.out.println(sb);
참고
- append(10)은 int지만 메서드 오버로딩 때문에 문자열로 처리됨
7. 람다식 (Lambda Expression)
람다식은 메서드를 하나의 식(Expression) 형태로 표현하는 방식
→ 익명 함수(Anonymous Function)
// 기존 방식
Runnable r1 = new Runnable() {
@Override
public void run() {
System.out.println("Hello");
}
};
// 람다식
Runnable r2 = () -> System.out.println("Hello");
특징
- 함수형 인터페이스에서만 사용 가능
- 코드가 간결해짐
- 함수를 값처럼 전달 가능
자주 사용하는 곳
// 반복
list.forEach(x -> System.out.println(x));
// 정렬
Collections.sort(list, (a,b) -> a-b);
// Stream
list.stream()
.filter(x -> x > 10)
.map(x -> x * 2)
.forEach(System.out::println);
8. 구현 노하우
조기 반환 (Early Return)
조건을 만족하면 즉시 return → 불필요한 중첩 if 제거
public int divide(int a, int b) {
if (b == 0) {
return -1;
}
return a / b;
}
보호 구문 (Guard Clause)
잘못된 입력을 먼저 검사
public void printName(String name) {
if (name == null) {
throw new IllegalArgumentException("name cannot be null");
}
System.out.println(name);
}
9. 제네릭 (Generic)
타입을 미리 지정하지 않고 사용 시 결정
→ 타입 안정성 제공
List<String> list = new ArrayList<>();
list.add("apple");
// list.add(10); // 컴파일 에러
String value = list.get(0);
10. Stream API
컬렉션 데이터를 선언형 방식으로 처리하는 API
특징 > 코드 간결
- 데이터 필터링
- 데이터 변환
- 데이터 정렬
- 데이터 집계
예시
List<Integer> list = Arrays.asList(1,2,3,4,5);
// Stream 사용
List<Integer> result = list.stream()
.filter(n -> n % 2 == 0)
.map(n -> n * 2)
.collect(Collectors.toList());
System.out.println(result); // [4, 8]
자주 사용하는 메서드
메서드설명
| filter() | 조건 필터링 |
| map() | 데이터 변환 |
| sorted() | 정렬 |
| forEach() | 반복 |
| collect() | 결과 수집 |
Stream 기본 구조
데이터 생성 → 가공 → 결과
list.stream()
.mapToInt(Integer::intValue)
.toArray();
정리
코딩 테스트에서 중요한 Java 문법
- Primitive vs Reference
- 배열 vs ArrayList
- HashMap
- String / StringBuilder
- Lambda
- Generic
- Stream
'내코가석자' 카테고리의 다른 글
| 02-3. 모의고사 (프로그래머스, JAVA) (0) | 2026.03.11 |
|---|---|
| 02-2. 두 개 뽑아서 더하기 (프로그래머스, JAVA) (0) | 2026.03.11 |
| 02-1. 배열 몸풀기 문제 (0) | 2026.03.11 |
| 02. 배열 (0) | 2026.03.07 |
| 00. 코딩 테스트 준비 (0) | 2026.03.07 |