728x90
반응형

백엔드 개발자라면 한 번쯤 고민해본 그 질문
"지금 프로젝트, 자바 몇으로 시작해야 안 망할까?"

2026년 4월 기준, 자바 생태계는 또 한 번 큰 변화를 맞았습니다. 작년 9월에 Java 25 LTS가 나왔고, 한 달 전인 3월엔 Java 26까지 출시됐죠. 그런데 현실은? 아직도 많은 기업이 Java 8, 11을 쓰고 있습니다.

이 글에서는 2026년 현재 자바 버전별 점유율, 특징, 그리고 상황별 추천 버전까지 한 방에 정리해드립니다.


✅ 한눈에 보는 자바 버전 요약 (2026년 기준)

순위 버전 출시 상태 한줄평
🥇 Java 21 LTS 2023.09 현역 메인 신규 프로젝트의 안전한 기본값
🥈 Java 17 LTS 2021.09 엔터프라이즈 표준 Spring Boot 3.x의 최소 사양
🥉 Java 11 LTS 2018.09 레거시 강자 아직도 많은 기업이 운영 중
4위 Java 8 LTS 2014.03 고인물 공공/금융권에 여전히 잔존
🆕 Java 25 LTS 2025.09 최신 LTS 그린필드 프로젝트라면 도전해볼 만
🧪 Java 26 2026.03 비-LTS 6개월 후 지원 종료, 실험용

💡 TIP: LTS(Long-Term Support)는 오라클이 8년간 지원하는 안정 버전이에요. 비-LTS는 6개월짜리 단명 버전이라 실서비스엔 부적합합니다.


📊 진짜 현실: 2025~2026년 자바 점유율 데이터

귀를 의심하실 수도 있는데, 현실은 생각보다 보수적입니다.

  • New Relic 2024년 자바 생태계 리포트: 응답자의 약 2/3가 Java 11 이하 사용 중
  • Azul 2025년 State of Java Survey: 19%가 아직도 Java 6 또는 7을 운영 중
  • JRebel 2024년 리포트: 업그레이드 사유 1위는 신기능(19%)이 아닌 LTS 지원(25%)과 보안(24%)

즉, 대부분의 기업은 "신기능이 좋아서"가 아니라 "지원이 끝나서 어쩔 수 없이" 업그레이드합니다. 트렌드와 현실의 격차가 꽤 크다는 점, 꼭 기억해두세요.


🥇 Java 21 LTS — 2026년 현재의 진짜 메인스트림

출시: 2023년 9월
프리미어 지원: 2028년 9월까지
한 마디로: "지금 신규 프로젝트의 가장 안전한 선택"

왜 Java 21이 메인인가?

  • Virtual Threads (가상 스레드) 정식 도입 → 동시성 처리 패러다임이 바뀜
  • Pattern Matching, Record Patterns, Sealed Classes 등 모던 문법 완성
  • Spring Boot 3.2+, Quarkus, Micronaut 등 주요 프레임워크 완벽 지원
  • 출시 2년 차로 안정성 검증 완료

Virtual Threads가 왜 게임 체인저인가?

기존엔 동시 요청 1만 개 처리하려면 WebFlux 같은 리액티브 프로그래밍을 써야 했습니다. 코드 스타일 자체가 완전히 달라져서 학습 곡선이 가팔랐죠.

가상 스레드는 평소처럼 동기 코드로 작성하면서도 수만 개 동시 요청을 처리할 수 있게 해줍니다. 즉, "리액티브 세금"을 안 내도 되는 거죠.

// Java 21 가상 스레드 예시
try (var executor = Executors.newVirtualThreadPerTaskExecutor()) {
    IntStream.range(0, 10_000).forEach(i -> {
        executor.submit(() -> {
            // 각 작업이 가상 스레드에서 실행됨
            return fetchUserData(i);
        });
    });
}

🥈 Java 17 LTS — 엔터프라이즈의 든든한 허리

출시: 2021년 9월
프리미어 지원: 2026년 9월까지 (⚠️ 올해 종료!)
한 마디로: "지금 운영하는 시스템의 표준, 하지만 곧 업그레이드 시점"

Java 17의 역사적 의미

Spring Boot 3.0부터 최소 요구사항이 Java 17로 올라갔습니다. 이게 결정적이었어요. 수많은 기업이 Java 8/11에서 17로 점프한 이유가 바로 여기 있습니다.

주요 특징

  • Sealed Classes — 상속 계층 봉인
  • Pattern Matching for instanceof — 타입 체크 + 캐스팅 통합
  • Records — 데이터 클래스 보일러플레이트 제거
  • Text Blocks — 멀티라인 문자열 깔끔하게
// Records 예시
public record User(Long id, String name, String email) {}

// Pattern Matching 예시
if (obj instanceof User user && user.id() > 0) {
    System.out.println(user.name());
}

⚠️ 주의사항

오라클 프리미어 지원이 2026년 9월에 종료됩니다. 운영 중인 시스템이라면 슬슬 Java 21 또는 25로 마이그레이션 계획을 세워야 할 시점이에요.


🥉 Java 11 LTS — 아직 살아있는 국민템

출시: 2018년 9월
프리미어 지원: 2026년 9월까지
한 마디로: "현실의 표준, 하지만 슬슬 빠질 시간"

대기업, SI, 공공기관에서 가장 많이 쓰는 버전이 여전히 Java 11입니다. 모듈 시스템, var 키워드, HTTP Client API 등 8 대비 충분히 모던하면서도 안정성이 검증돼 있죠.

하지만 2026년 9월 이후엔 OTN 라이선스로 전환되어 상용 환경에서 무료 사용이 어려워집니다. 마이그레이션 시점이 다가오고 있다는 거예요.


🗿 Java 8 LTS — 사라지지 않는 그분

출시: 2014년 3월
한 마디로: "공공/금융권의 영원한 표준?"

람다, 스트림, Optional을 도입해 자바를 한 단계 끌어올린 역사적 버전이지만, 출시 12년이 지난 지금도 현역입니다. 특히 다음 환경에서 여전히 강세:

  • 공공기관 SI 프로젝트 (제안서에 "Java 8 기준"이 박혀 있는 경우)
  • 금융권 코어뱅킹 시스템
  • 오래된 레거시 운영 환경

다만 새로 시작하는 프로젝트에 Java 8을 선택하는 건 기술 부채를 미리 쌓는 행위입니다. 피할 수 있다면 무조건 피하세요.


🆕 Java 25 LTS — 최신 LTS, 도전해볼 가치 있나?

출시: 2025년 9월
프리미어 지원: 2030년 9월까지
한 마디로: "그린필드 프로젝트라면 적극 고려"

Java 25의 핵심 기능

  • 간소화된 main 메서드public static void main(String[] args) 보일러플레이트 제거
  • Structured Concurrency 정식화 — 동시 작업의 생명주기 관리
  • Scoped Values — ThreadLocal의 현대적 대체재
  • Module Import Declarationsimport module java.base 한 줄로 끝
  • Compact Source Files — 스크립트성 자바 코드 작성이 진짜 쉬워짐
// Java 25 — 이것도 유효한 자바 코드입니다
void main() {
    System.out.println("Hello, Java 25!");
}

도입 권장 시점

  • 2026년 신규 프로젝트로 시작하는 경우
  • 팀 내 자바 숙련도가 높고 빠른 도입 의지가 있는 경우
  • 프레임워크(Spring Boot 3.4+, Quarkus 3.15+ 등) 호환성 확인 후

🧪 Java 26 (2026.03) — 써도 될까?

출시: 2026년 3월 17일
상태: 비-LTS (6개월 후 지원 종료)

Java 26은 HTTP/3 지원, AOT 캐시 개선(ZGC와 호환), G1 처리량 향상 등 의미 있는 개선이 있지만, 실서비스 도입은 비추천입니다. 6개월 후 Java 27이 나오면 지원이 끊기기 때문이죠.

미리 신기능을 테스트해보고 싶은 개발자나 오픈소스 프로젝트에서만 사용하세요.


💼 라이선스 이슈 — 절대 놓치면 안 되는 부분

2023년 오라클이 자바 라이선스를 CPU 단위에서 직원 수 단위(Employee 기반)로 바꾸면서 비용이 폭등했습니다. 그 결과:

  • 오라클 JDK 시장 점유율: 2020년 75% → 2024년 21%로 급락
  • 70% 이상의 기업이 비-오라클 JDK 대안을 검토 중

추천 무료 JDK 배포판

배포판 특징 추천 대상
Eclipse Temurin (구 AdoptOpenJDK) 가장 대중적, 벤더 중립 일반적인 모든 환경
Amazon Corretto AWS 환경 최적화, 무료 LTS AWS 기반 서비스
Azul Zulu 다양한 플랫폼 지원 멀티 플랫폼 운영
BellSoft Liberica 임베디드/JavaFX 포함 데스크톱/IoT
SAP Machine SAP 환경 최적화 SAP 통합 시스템

💡 오라클 JDK 라이선스 비용이 부담된다면 Eclipse Temurin이 가장 무난한 선택입니다.


🎯 상황별 자바 버전 추천 가이드

✅ 신규 프로젝트를 시작한다면

  • 첫 번째 선택: Java 21 LTS (안정성 + 가상 스레드)
  • 공격적 선택: Java 25 LTS (최신 LTS, 5년 더 긴 지원)

✅ Spring Boot 사용 시

  • Spring Boot 3.x → Java 17 이상 필수 (21 권장)
  • Spring Boot 4.0+ (예정) → Java 21 이상 필수

✅ 레거시 시스템 유지보수

  • 기존 Java 8 → 현행 유지하되, 점진적으로 11/17 마이그레이션 계획
  • 기존 Java 11 → 2026년 9월 지원 종료 대비 17 또는 21로 업그레이드 시작

✅ 공공/금융 SI 프로젝트

  • 발주처 요구사항 확인이 최우선
  • 일반적으로 Java 8 또는 11이 기준
  • 자체 판단 가능하다면 17 제안 시도

✅ 마이크로서비스 / 클라우드 네이티브

  • Java 21 + Virtual Threads 조합 강력 추천
  • 컨테이너 환경 → AOT 컴파일 고려 시 GraalVM Native Image도 검토

✍️ 결론 — 그래서 뭘 쓰라고?

복잡하게 생각할 것 없이 이렇게 정리됩니다.

🎯 2026년 현재의 정답

  • 신규 프로젝트 → Java 21 LTS (가장 안전한 메인스트림)
  • 보수적 환경 → Java 17 LTS (단, 2026년 9월 지원 종료 주의)
  • 그린필드 + 도전 → Java 25 LTS
  • 레거시 운영 → 현재 버전 유지 + 마이그레이션 계획 수립

자바는 더 이상 "느리고 무거운 언어"가 아닙니다. Virtual Threads로 동시성 문제를 해결했고, Project Amber로 보일러플레이트를 줄였고, Project Leyden으로 시작 시간까지 개선되고 있어요. 2026년의 자바는 그 어느 때보다 모던합니다.


📌 핵심 요약 (TL;DR)

  • 🎖 현재의 표준: Java 21 LTS (2023년 출시, 2028년까지 지원)
  • 🆕 최신 LTS: Java 25 (2025년 출시, 2030년까지 지원)
  • ⚠️ 곧 EOL: Java 11, 17 — 2026년 9월 프리미어 지원 종료
  • 💰 라이선스: 오라클 JDK 대신 Temurin, Corretto 등 무료 대안 추천
  • 🚀 Virtual Threads: 자바 동시성의 게임 체인저, Java 21부터 사용 가능

👉 이 글이 도움 되셨다면 공감과 댓글 부탁드려요 😊

다음 글에서는 Virtual Threads 실전 활용법을 자세히 다뤄볼게요!


태그: #Java #Java21 #Java25 #자바버전 #JavaLTS #SpringBoot #백엔드개발 #VirtualThreads #자바개발자 #JDK #Temurin #Corretto #2026개발트렌드

728x90
반응형
728x90
반응형

📚 목차

  1. 이게 왜 중요한데?
  2. 표 하나로 비교 끝!
  3. 언제 뭘 써야 하나요?
  4. 마무리 요약 (진짜 1분 컷)

1. 이게 왜 중요한데?

자바 개발하면서 List, Set, Map 구분 못 하면...
👉 NullPointerException, IndexOutOfBoundsException, 동기화 오류
줄줄이 터집니다.
그럼 PM이 와서 말하죠:

“그거... 그냥 ArrayList 말고 HashSet 쓰면 안 되나?”


2. 표 하나로 비교 끝! ✅

구분ListSetMap
중복 허용 ✅ O ❌ X ✅ Value만 O
순서 유지 ✅ O ❌ X (HashSet), ✅ TreeSet은 정렬됨 ❌ X (정렬 불가)
인덱스로 접근 ✅ O (get(index)) ❌ X ❌ X
Key-Value 구조 ❌ X ❌ X ✅ O
대표 클래스 ArrayList, LinkedList HashSet, TreeSet HashMap, TreeMap
 

3. 언제 뭘 써야 하나요?

상황추천 컬렉션
데이터 순서 유지 + 중복 허용 ArrayList
중복 없이 빠르게 저장 HashSet
정렬된 데이터 필요 TreeSet, TreeMap
Key로 조회 필요 HashMap
삽입/삭제가 많음 LinkedList
 

4. 마무리 요약 (1분 컷 핵심)

List<String> list = new ArrayList<>(); // 순서 O, 중복 O
Set<String> set = new HashSet<>();     // 순서 X, 중복 X
Map<String, String> map = new HashMap<>(); // Key-Value

📌 기억법:

  • List: 줄세우기 좋아함
  • Set: 중복 싫어함
  • Map: Key로 놀고 Value로 살고
728x90
반응형
728x90
반응형

✅ 한눈에 보는 차이표

구성 요소설명포함 관계주요 역할
JDK (Java Development Kit) 자바 개발 도구 전체 세트 JDK ⊃ JRE ⊃ JVM 개발 + 실행
JRE (Java Runtime Environment) 자바 실행 환경 JRE ⊃ JVM 실행만 가능
JVM (Java Virtual Machine) 자바 가상 머신 (실행 엔진) JRE ⊃ JVM 바이트코드 실행
 

🔍 1. JVM (Java Virtual Machine)

“Write once, run anywhere”를 실현시키는 핵심”

  • 역할: .class 파일(바이트코드)을 실행
  • 동작:
    1. Class Loader: 클래스를 메모리에 로딩
    2. Bytecode Verifier: 코드 검증
    3. Execution Engine: 코드 실행 (JIT 컴파일 포함)
  • OS/환경별로 다름: 각 OS에 맞는 JVM이 존재

🔸 JVM만으로는 자바 코드 작성 불가


🔍 2. JRE (Java Runtime Environment)

“자바 프로그램을 실행할 수 있는 환경”

  • 구성:
    • JVM
    • 자바 클래스 라이브러리(rt.jar)
    • 필요한 기타 실행파일 (예: java 명령어)
  • 목적: 자바 프로그램 실행만 가능 (컴파일 ×)
  • 대상: 자바 개발이 아닌 실행만 필요한 사용자 (예: 서버 운영자)

🔸 개발 도구 없음 (javac X)


🔍 3. JDK (Java Development Kit)

“자바를 개발하기 위한 모든 도구 포함”

  • 구성:
    • JRE
    • 개발 툴 (javac, javadoc, jar 등)
  • 역할: 자바 소스 코드를 작성, 컴파일, 디버깅 가능
  • 대상: 자바 개발자

🔸 JDK 설치하면 JRE, JVM 포함

[JDK]
 └── [JRE]
       └── [JVM]

🧠 쉽게 외우는 포인트

외우는 방법
JVM은 바이트코드를 실행하는 엔진
JRE는 JVM + 실행 라이브러리 = 실행 환경
JDK는 JRE + 개발 도구 = 개발 키트
 

🎯 개발자 입장에서 요약

  • 자바 코드 작성 ➡️ JDK 필수
  • 자바 앱 실행만 ➡️ JRE만 설치해도 가능
  • 바이트코드 실행 책임자 ➡️ JVM

 

728x90
반응형
728x90
반응형

자바 개발자라면 꼭 알고 있어야 하는 GC(Garbage Collector)!
객체는 언제 메모리에서 사라지고, 애플리케이션이 왜 가끔씩 멈추는지 궁금하셨나요?
아래 이미지와 함께 GC의 작동 구조를 쉽게 설명해드립니다.


🔍 GC 개념 요약

**Garbage Collector(GC)**는 사용하지 않는 객체를 힙 메모리에서 자동으로 제거하는 JVM의 기능입니다.
메모리 누수를 방지하고 개발자가 직접 메모리를 관리하지 않아도 되게 해주는 아주 고마운 기능이죠.


🧠 Java 힙 메모리 구조

아래 이미지는 자바 힙(Heap) 메모리의 구성과 객체 이동 과정을 시각적으로 표현한 구조입니다.

✅ 설명:

  • 객체는 먼저 Eden 영역에 생성됩니다.
  • GC(Minor GC)가 발생하면 Eden → Survivor1 → Survivor2를 오가며 살아남습니다.
  • 여러 번 살아남으면 Old 영역으로 이동합니다.
  • Old가 꽉 차면 **Major GC (또는 Full GC)**가 발생합니다.
  • Permanent(또는 Java 8 이후 MetaSpace)는 클래스 정보 등 JVM 메타데이터를 저장하는 공간입니다.

💥 GC의 종류

GC 종류대상 영역특징
🧹 Minor GC Young Generation (Eden + Survivor) 빠르고 자주 발생함
🧹 Major GC Old Generation 느리고 멈춤(STW)이 발생함
🧹 Full GC 전체 힙 영역 Major GC 포함 + 기타 리소스 정리
 

🛑 STW(Stop The World)란?

GC를 수행하는 동안 JVM의 모든 스레드가 멈추는 현상입니다.
특히 Major GC나 Full GC 시 STW가 발생하며 사용자 체감 지연이 생길 수 있습니다.

📌 GC 튜닝의 핵심: STW 시간을 최소화하는 것!


⚙ 대표적인 GC 알고리즘

GC 종류특징적합 환경
Serial GC 단일 스레드, 기본 구조 저사양/테스트용
Parallel GC 멀티스레드 병렬 처리 일반 서버, 병렬 CPU
Parallel Old GC Old까지 병렬 처리 고사양 서버
G1 GC Region 단위 처리, STW 최소화 Java 9 이상 대규모 앱
ZGC/Shenandoah 실시간 GC, STW 거의 없음 실시간 처리 시스템
 

🧰 개발 팁 요약

  • 객체는 가능한 빨리 Eden에서 제거되도록 설계하자
  • Old로 가는 객체는 재사용하거나 Pool 처리가 바람직
  • GC 튜닝 시에는 G1 GC, ZGC 등 최신 GC 전략 고려

✅ 마무리

GC는 Java의 강력한 장점 중 하나지만,
그 내부 동작을 모르면 애플리케이션 지연이나 STW 문제를 겪기 쉽습니다.
이제 GC 동작 구조를 알았으니, 메모리 튜닝과 성능 최적화에 자신감이 붙으실 겁니다!

728x90
반응형
728x90
반응형

🗃️ 1. DAO란?

DAO (Data Access Object)
→ 데이터베이스에 접근하는 역할

  • DB와 직접 통신하는 클래스
  • SQL, JPA, Mapper 등을 통해 DB 데이터를 가져오거나 넣는 책임을 가짐
  • 비즈니스 로직과 분리되어 코드의 책임이 명확해짐
public class UserDao {
    public void save(User user) {
        // DB insert 로직
    }

    public User findById(Long id) {
        // DB select 로직
    }
}

📦 2. DTO란?

DTO (Data Transfer Object)
→ 계층 간 데이터 전달용 객체

  • 컨트롤러 ↔ 서비스 ↔ DAO 사이에서 데이터를 전달함
  • 순수 데이터만 포함 (로직 없음)
  • Getter/Setter만 있는 클래스
public class UserDto {
    private String name;
    private String email;
    // getter / setter
}

🧾 실무 예시:

  1. 사용자가 입력한 데이터를 UserDto에 담아 서버로 전송
  2. 서버는 DTO를 받아 DAO를 통해 DB에 저장

🔐 3. VO란?

VO (Value Object)
불변의 값을 나타내는 객체

  • DTO와 비슷하지만 값이 한 번 생성되면 변경 불가
  • setter()가 없고, 생성자로만 값 설정
  • 주로 equals(), hashCode()가 중요
public class Money {
    private final int amount;

    public Money(int amount) {
        this.amount = amount;
    }

    public int getAmount() {
        return amount;
    }
}

🔍 DAO / DTO / VO 차이 비교표

항목DAODTOVO
역할 DB 접근 담당 계층 간 데이터 전달 불변 값 표현
포함 내용 DB 로직 순수 데이터 불변 데이터
메서드 쿼리/비즈니스 연동 getter/setter getter only
변경 가능성 O O
 

✅ 마무리 요약

  • DAO: DB와 대화하는 친구
  • DTO: 데이터를 옮겨주는 메신저
  • VO: 한 번 정해지면 변하지 않는 값 객체
728x90
반응형
728x90
반응형

🧭 목차

  1. 객체지향 언어란?
  2. 클래스, 객체, 인스턴스의 차이
  3. 객체지향의 3대 특징
  4. 객체지향의 장단점
  5. 대표적인 객체지향 언어

1. 객체지향 언어란?

**객체지향 언어(Object-Oriented Language)**는
현실 세계의 **모든 객체(자동차, 사람, 문 등)**가
자신만의 속성과 기능을 가지고 상호작용한다는 개념을
프로그래밍에 적용한 언어입니다.

  • 객체 간의 관계와 역할에 중점을 둠
  • 각 객체는 고유한 속성과 기능을 가지고 있음
  • 이 객체들이 협력하며 동작하는 구조로 소프트웨어를 구성

2. 클래스(Class), 객체(Object), 인스턴스(Instance)

구분설명
객체 프로그램에서 구현하고자 하는 대상 (예: 자동차, 회원, 게시물 등)
클래스 객체의 속성과 기능을 정의한 설계도
인스턴스 클래스를 기반으로 실제 메모리에 생성된 객체 (현실 세계의 실체)
 
 
class Car {
    String color;
    void drive() {
        System.out.println("주행 중");
    }
}

Car myCar = new Car();  // ← 이게 바로 인스턴스!

3. 객체지향 언어의 3대 특징

🔒 캡슐화 (Encapsulation)

  • 객체의 내부 구조를 외부에 은닉
  • 필요한 정보만 외부에 public으로 노출
  • 자바에서는 private, protected, public 등 접근 제어자로 구현

➡ 예:

private int age;  
public void setAge(int a) { age = a; }

👪 상속 (Inheritance)

  • 자식 클래스가 부모 클래스의 속성과 기능을 물려받는 것
  • 코드의 재사용성 높이고, 유지보수 편리
class Animal { void eat() { } }
class Dog extends Animal { void bark() { } }
  • 부모 클래스 → 슈퍼 클래스(Super Class)
  • 자식 클래스 → 서브 클래스(Sub Class)

🔄 다형성 (Polymorphism)

  • 하나의 메소드나 객체가 다양한 방식으로 동작

▪ 오버라이딩 (Overriding)

  • 부모 메소드를 자식 클래스에서 재정의
  • 메소드명, 매개변수, 반환형 동일
@Override
public void run() {
    System.out.println("자식 클래스에서 실행");
}

▪ 오버로딩 (Overloading)

  • 같은 이름의 메소드지만 매개변수 다름
@Override
public void run() {
    System.out.println("자식 클래스에서 실행");
}

4. 객체지향 프로그래밍의 장점과 단점

✅ 장점

  • 재사용성: 상속으로 기존 코드 활용
  • 생산성 향상: 독립적인 객체 개발
  • 자연스러운 모델링: 현실 세계와 유사
  • 유지보수 우수: 캡슐화로 영향 최소화

❌ 단점

  • 설계 복잡: 개념 파악 및 초기 설계 시간 소요
  • 실행 속도 저하: 절차형 언어보다 느릴 수 있음
  • 코딩 난이도: 복잡한 구조로 인한 학습 장벽

5. 대표적인 객체지향 언어

언어특징
Java 가장 널리 쓰이는 객체지향 언어, 플랫폼 독립적
C++ C 언어의 확장, 다중 상속 지원
C# 닷넷(.NET) 기반 객체지향 언어
Python 인터프리터 기반, 동적 타이핑, 강력한 객체지향 지원
 

 

728x90
반응형
728x90
반응형

“ArrayList? Set? Hash 뭐시기? 그냥 배열에 때려 넣으면 안 돼요?”


1. Java Collections Framework(JCF)란?

JCF는 자바에서 데이터를 그룹으로 관리하기 위한 자료구조 라이브러리 집합입니다.
배열을 대체하고, 더 강력하게 데이터를 처리할 수 있게 해줍니다.


2. 컬렉션 상속 구조도

         ┌──────────┐
         │Collection│
         └────┬─────┘
      ┌────────┼────────┐
     List      Set     Queue
      │         │        │
┌─────┴─────┐  ┌┴┐     ┌─┴─┐
ArrayList  ... HashSet ...

※ Map은 Collection을 상속하진 않지만, 함께 묶어서 취급합니다.


3. 주요 인터페이스와 특징

✅ Set (중복 ❌, 순서 ❌)

구현체특징
HashSet 가장 빠른 접근 속도, 순서 없음
TreeSet 자동 정렬 가능 (오름차순/내림차순 설정 가능)
 

✅ List (중복 ⭕, 순서 ⭕)

구현체특징
ArrayList 인덱스 기반, 조회 성능 우수
LinkedList 삽입/삭제에 유리
Vector 동기화 지원. 구식이라 거의 안 씀
 

✅ Queue (선입선출 구조)

구현체특징
LinkedList 양방향 연결 구조
PriorityQueue 우선순위 기반 처리 가능
 

✅ Map (Key 중복 ❌, Value 중복 ⭕

구현체특징
HashMap 가장 자주 쓰이며, null 허용
TreeMap 자동 정렬
Hashtable 동기화 지원. null 금지, 구식
 

4. 언제 어떤 컬렉션을 써야 할까?

상황추천 컬렉션
중복 없이 저장 HashSet
인덱스 접근, 조회 위주 ArrayList
삽입/삭제 잦음 LinkedList
Key-Value 저장 HashMap
정렬된 데이터 필요 TreeSet, TreeMap
스레드 동기화 필요 Vector, Hashtable (하지만 잘 안 씀)
 

5. 한줄 요약

"Java 컬렉션은 목적에 맞게 잘 골라 써야 성능이 살아납니다!"

 

728x90
반응형
728x90
반응형

OpenJDK11 설치 방법

우분투 Repository  업데이트 및 업그레이드 전부 yes

$ sudo apt-get update && sudo apt-get upgrade -y

 

OPNE JDK 11 설치  모두 yes

$ sudo apt-get install openjdk-11-jdk -y

 

자바 버전확인

$ java -version

 

MYSQL8 설치

$ sudo apt install mysql-server -y

$ mysql --version

728x90
반응형

'ETC > AWS' 카테고리의 다른 글

우분투 ubuntu Ruby 완전 삭제  (0) 2022.08.03
travis ./gradlew: Permission denied  (0) 2022.07.29
Amazon linux mysql8 설치  (0) 2022.07.28
ubuntu 22.04 Lts mirror  (0) 2022.07.27
EC2 인스턴스 프리티어 생성후 반드시 해야 할 것  (0) 2022.07.15

+ Recent posts