자바 프로그래밍 1주차 보고서

자료구조 (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.
문서 주석 필수 작성으로 코드 품질 향상