일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- tableperclass
- 파이썬
- dbnamingrule
- db네이밍규칙
- 스파르타코딩
- 데이터베이스네이밍규칙
- 코딩
- 스파코
- 리콰이어먼츠 설정
- jpa플러시
- JPA
- db설계과정
- jakartapersistenceapi
- 릴레이션십데이터베이스
- 준태튜터님
- 내일배움캠프
- 자기계발회고
- 장고
- db설계방법
- db설계핵심요약
- 스파르타코딩클럽
- 팀스파르타
- 패스트캠퍼스
- spring필수문법
- Python
- 데이터베이스설계요약
- django
- 프라이머리키
- 장고기초지식
- 포링키
- Today
- Total
당우 일기장
자바 중급 문법 본문
---
자바 중급~고급 문법: 컬렉션, 제네릭, 람다
자바에서 데이터 관리와 함수형 프로그래밍을 다룰 때 꼭 알아야 할 문법들! 이번 문서에서는 **컬렉션 프레임워크**, **제네릭**, **람다 표현식**을 "문법 - 설명" 형식으로 정리했어요. 중급에서 고급으로 넘어가는 발판이 될 핵심 개념들이니, 하나씩 익혀보세요!
---
컬렉션 프레임워크 (Collections Framework)
- **List 선언 - `List<타입> 변수명 = new ArrayList<>();`**:
순서가 있는 데이터 목록을 관리. `ArrayList`는 동적 배열 구현체. 예: `List
- **Set 선언 - `Set<타입> 변수명 = new HashSet<>();`**:
중복 없는 데이터 집합. `HashSet`은 순서 없이 저장. 예: `Set
- **Map 선언 - `Map<키타입, 값타입> 변수명 = new HashMap<>();`**:
키-값 쌍으로 데이터 관리. `HashMap`은 해시 테이블 기반. 예: `Map<String, Integer> scores = new HashMap<>();`
- **요소 추가 - `add(값)`, `put(키, 값)`**:
`List`와 `Set`은 `add()`, `Map`은 `put()`으로 데이터 삽입. 예: `names.add("Alice"); scores.put("Math", 90);`
- **요소 접근 - `get(인덱스)`, `get(키)`**:
`List`는 인덱스로, `Map`은 키로 값 가져옴. 예: `String name = names.get(0); int score = scores.get("Math");`
- **반복 처리 - `for-each` 또는 `iterator()`**:
컬렉션 요소를 순회. 예:
```java
for (String name : names) { System.out.println(name); }
Iterator
while (it.hasNext()) { System.out.println(it.next()); }
```
---
제네릭 (Generics)
- **제네릭 클래스 - `class 클래스명
타입을 파라미터로 받아 재사용성 높은 클래스 정의. 예:
```java
class Box
private T item;
public void setItem(T item) { this.item = item; }
public T getItem() { return item; }
}
```
- **제네릭 메서드 - `
메서드 내에서 타입 파라미터 사용. 예:
```java
public
```
- **와일드카드 - `<? extends 타입>`, `<? super 타입>`**:
제네릭 타입의 범위를 제한. `extends`는 상위 바운드, `super`는 하위 바운드. 예:
```java
List<? extends Number> numbers; // Number 또는 그 하위 타입
List<? super Integer> integers; // Integer 또는 그 상위 타입
```
- **타입 지우기 방지 - `
컴파일 시 타입 안전성을 보장. 예: `Box
---
람다 표현식 (Lambda Expressions)
- **람다 기본 문법 - `(매개변수) -> { 실행문; }`**:
인터페이스의 단일 추상 메서드를 간결히 구현 (Java 8 이상). 예: `(x) -> System.out.println(x);`
- **함수형 인터페이스 사용 - `@FunctionalInterface`**:
람다를 적용할 인터페이스 정의. 단일 추상 메서드만 포함. 예:
```java
@FunctionalInterface
interface Calculator {
int calc(int a, int b);
}
Calculator add = (a, b) -> a + b;
```
- **메서드 참조 - `클래스::메서드명`**:
기존 메서드를 람다 대신 참조. 예: `System.out::println` (출력 메서드 참조)
- **컬렉션과 함께 사용 - `forEach()`, `stream()`**:
람다로 컬렉션 처리 간소화. 예:
```java
List
names.forEach(name -> System.out.println(name));
names.stream().filter(name -> name.startsWith("A")).forEach(System.out::println);
```
---
스트림 (Stream) - 보너스!
- **스트림 생성 - `컬렉션.stream()`**:
데이터 흐름을 만들어 연산 수행. 예: `names.stream();`
- **중간 연산 - `filter()`, `map()`**:
조건 필터링이나 데이터 변환. 예: `stream.filter(x -> x > 0).map(x -> x * 2);`
- **최종 연산 - `collect()`, `forEach()`**:
결과를 모으거나 실행. 예: `List
---
마무리
컬렉션, 제네릭, 람다를 통해 자바의 강력함을 더 깊이 느낄 수 있었죠? **컬렉션**으로 데이터를 효율적으로 관리하고, **제네릭**으로 타입 안전성을 높이고, **람다**로 코드를 간결하게 만들어보세요. 스트림은 보너스로 살짝 맛보기로 넣어봤어요! 다음엔 멀티스레드나 파일 I/O 같은 고급 주제로 가볼까요? 궁금한 점 있으면 언제든 물어봐주세요! 😊
---
'JAVA' 카테고리의 다른 글
스프링 입문 전 필수 자바 문법 리스트 (1) | 2025.04.08 |
---|---|
자바 기초문법 2 (0) | 2025.04.08 |
자바 기초 문법 (0) | 2025.04.08 |