반응형
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 |
31 |
Tags
- 컴퓨터과학
- 컴퓨터공학
- 네트워크보안
- 딥러닝
- 소프트웨어
- 파이썬
- 프로그래밍
- Yes
- 인공지능
- 디자인패턴
- 버전관리
- 머신러닝
- 웹개발
- 프로그래밍언어
- 데이터구조
- 보안
- 자료구조
- 데이터베이스
- springboot
- 네트워크
- 데이터분석
- 사이버보안
- 컴퓨터비전
- 데이터과학
- 자바스크립트
- 소프트웨어공학
- 빅데이터
- I'm Sorry
- 알고리즘
- 클라우드컴퓨팅
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