자료구조 (Data Structure)
1. List - 선형 자료구조
순서가 있는 데이터를 저장하는 선형 구조
•
배열 (Array): 고정 크기, 인덱스로 접근
•
링크드 리스트 (LinkedList): 동적 크기, 포인터로 연결
•
포인터: 다음 요소의 주소를 가리킴
2. Map - 키-값 쌍 구조
<Key, Value> 형태로 데이터를 저장
•
키(Key)를 통해 값(Value)에 접근
•
키는 중복 불가, 값은 중복 가능
3. Set - 중복 제거 집합
•
중복된 요소를 허용하지 않음
•
get() 함수가 없음 (키가 없기 때문)
•
집합 연산에 특화
연산 처리
자료구조에서 복잡한 연산을 수행하려면 Stream() 사용
인터페이스 (Interface)
특징
•
Abstract 메소드만 포함 (Java 1.8 이후 default, static 메소드 추가)
•
구현체에서 반드시 오버라이드 필요
•
다중 상속 가능
interface Animal {
void makeSound(); // abstract 메소드
default void sleep() { // Java 1.8+
System.out.println("잠을 잡니다.");
}
}
Java
복사
주석 처리
주석 종류
•
// : 한줄 주석 - 간단한 설명
•
/* */ : 여러줄 주석 - 코드 블록 설명
•
/** */ : 문서 주석 - JavaDoc 생성용, 무조건 사용해야 함
/**
* 사용자 정보를 관리하는 클래스
* @author 개발자명
* @version 1.0
*/
public class User {
// 사용자 이름
private String name;
/*
* 여러줄로 된
* 복잡한 설명
*/
}
Java
복사
Optional - Null 안전성
목적
NullPointerException 방지를 위한 null 체크를 간편하게 처리
생성 방법
import java.util.Optional;
// null이 아닌 값으로 생성
Optional<String> opt01 = Optional.of("value01");
// null일 수도 있는 값으로 생성
Optional<String> opt02 = Optional.ofNullable(null);
// 빈 Optional 생성
Optional<String> opt03 = Optional.empty();
Java
복사
주요 메소드
// 값 추출 (null이면 예외 발생)
opt01.get();
// null일 경우 기본값 반환
opt02.orElse("기본값");
// 값이 있을 때만 실행
opt03.ifPresent(value -> System.out.println(value));
// 메소드 참조 사용
Optional<String> str = Optional.of("Hello");
str.ifPresent(System.out::println);
Java
복사
장점
•
if문으로 null 체크하는 번거로움 해결
•
코드 가독성 향상
•
함수형 프로그래밍 스타일 지원
람다 (Lambda Expression)
개념
코드를 줄이는 문법이지만, 나머지 부분을 이해해야 전체 맥락 파악 가능
문법 변화
// 1. 기본 메소드 형태
int max(int a, int b) {
return a > b ? a : b;
}
// 2. 람다 기본형
(int a, int b) -> {
return a > b ? a : b;
}
// 3. 타입 추론 + 중괄호 생략
(a, b) -> a > b ? a : b;
// 4. 매개변수 하나일 때 괄호 생략
a -> a + 1;
Java
복사
핵심 특징
•
함수형 인터페이스에만 사용 가능
•
코드 간결성 vs 가독성 트레이드오프
•
익명 함수 형태로 동작
스트림 (Stream)
정의
다양한 데이터 소스를 표준화된 방법으로 다루기 위한 API
특징
•
데이터 소스를 변경하지 않음 (불변성)
•
일회용 (한 번 사용하면 재사용 불가)
•
내부 반복 처리
기본 구조
데이터소스.stream()
.중간연산()
.중간연산()
.최종연산();
Java
복사
주요 연산
중간 연산 (Intermediate Operations)
•
filter() : 조건 필터링
•
map() : 데이터 변환
•
sorted() : 정렬
최종 연산 (Terminal Operations)
•
collect() : 결과 수집
•
forEach() : 각 요소에 작업 수행
•
reduce() : 요소들을 하나로 결합
사용 예시
List<String> names = Arrays.asList("김철수", "이영희", "박민수");
names.stream()
.filter(name -> name.startsWith("김"))
.map(String::toUpperCase)
.forEach(System.out::println);
Java
복사
핵심 포인트
1.
Optional로 null 안전성 확보
2.
람다로 코드 간결성 추구 (단, 가독성 고려)
3.
Stream으로 데이터 처리 파이프라인 구축
4.
문서 주석 필수 작성으로 코드 품질 향상