반응형
    
    
    
  
														Notice
														
												
											
												
												
													Link
													
											
									| 일 | 월 | 화 | 수 | 목 | 금 | 토 | 
|---|---|---|---|---|---|---|
| 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 | 
													Tags
													
											
												
												- 보안
- 데이터구조
- 네트워크보안
- 파이썬
- 딥러닝
- I'm Sorry
- 소프트웨어
- 인공지능
- 자바스크립트
- 알고리즘
- 데이터분석
- 디자인패턴
- 자료구조
- 사이버보안
- 빅데이터
- 머신러닝
- 프로그래밍언어
- 소프트웨어공학
- 클라우드컴퓨팅
- 컴퓨터비전
- 데이터베이스
- 컴퓨터과학
- 프로그래밍
- 버전관리
- 웹개발
- springboot
- Yes
- 데이터과학
- 네트워크
- 컴퓨터공학
													Archives
													
											
												
												- Today
- Total
스택큐힙리스트
자바 스프링 개발 시작하기 - 3일차 컬렉션과 제네릭으로 학생 명단 관리 본문
반응형
    
    
    
  1. 오늘의 목표
- List·Map·Set·제네릭 핵심 문법 이해
- 학생 명단 관리 미니 프로그램 작성
- for-each / Iterator / Stream 순회 방식 장단점 체험
2. 컬렉션 & 제네릭 한눈에 잡기
자바 컬렉션 프레임워크(List, Map, Set)는 데이터를 담고 다루는 기본 도구입니다.
제네릭을 함께 쓰면 타입 안정성을 유지하면서도 형변환 코드를 없앨 수 있어 코드 가독성이 크게 높아집니다.
3. 미니 프로그램 설계
- 도메인 클래스
 public record Student(String id, String name, int grade) {}
- 저장 구조
- List<Student> : 등록 순서 보존, 전체 명단 출력
- Map<String, Student> : 학번(id) ↔ 학생 검색·수정
- Set<Student> : 중복 방지(예: 전학 온 학생 필터링)
 
- 핵심 로직 예시
class StudentService {
    private final List<Student> roster = new ArrayList<>();
    private final Map<String, Student> rosterById = new HashMap<>();
    private final Set<Student> uniqueCheck = new HashSet<>();
    public void add(Student s) {
        if (uniqueCheck.add(s)) {      // Set으로 중복 검사
            roster.add(s);
            rosterById.put(s.id(), s);
        }
    }
    public Student find(String id) {   // Map으로 O(1) 조회
        return rosterById.get(id);
    }
}4. 순회 방식 3종 비교
방식코드 예시특징
| for-each | for (Student s : roster) { ... } | 가장 간단, 내부적으로 Iterator 사용 | 
| Iterator | Iterator<Student> it = roster.iterator(); while(it.hasNext()){...} | 요소 제거 시 안전, 레거시 컬렉션에도 적용 | 
| Stream | roster.stream().filter(s -> s.grade()>=90).forEach(System.out::println); | 선언적·병렬처리 용이, 람다식으로 가독성 ↑ | 
성능은 요소 수·연산 내용에 따라 달라지지만, 가독성과 필요 기능(병렬/필터링 등) 을 기준으로 선택하는 것이 실무 팁입니다.
5. 프로그램 완성 예시 (메인)
public class RosterApp {
    public static void main(String[] args) {
        StudentService service = new StudentService();
        service.add(new Student("S001", "김하늘", 95));
        service.add(new Student("S002", "이바다", 88));
        // 1) for-each
        for (Student s : service.getAll()) {
            System.out.println(s);
        }
        // 2) Iterator
        Iterator<Student> it = service.getAll().iterator();
        while (it.hasNext()) {
            Student s = it.next();
            if (s.grade() < 90) it.remove();
        }
        // 3) Stream
        service.getAll().stream()
                .sorted(Comparator.comparingInt(Student::grade).reversed())
                .forEach(System.out::println);
    }
}6. 정리 & 실전 팁
- List → Map → Set 순으로 기능을 분리하면 관리·검색·중복처리를 깔끔하게 해결.
- 개발 초기엔 for-each로 빠르게 시작하고, 성능·가독성을 위해 Stream으로 단계적 리팩터링.
- 실무에선 불변 컬렉션(Java 9 List.of(), Map.of() 등)과 병렬 Stream도 적극 활용해보세요.
반응형
    
    
    
  '개발' 카테고리의 다른 글
| [주니어 백엔드 개발자가 반드시 알아야 할 실무 지식] 2장. 느려진 서비스, 어디부터 봐야 할까 (0) | 2025.07.09 | 
|---|---|
| [JAVA] 람다식과 메서드 레퍼런스 (1) | 2025.07.09 | 
| JUnit5로 BankAccount 단위 테스트 작성법 (1) | 2025.07.08 | 
| 자바 스프링 개발 시작하기 - 2일차 조건문·반복문과 객체 설계 (0) | 2025.07.08 | 
| 자바 var 키워드 활용법과 주의점 (1) | 2025.07.07 | 
			  Comments