í°ì¤í 리 ë·°
íì¬ìì ì¬ í´ íë¡ì í¸ë¡ Java 8ë²ì ìì 21ë¡ ì¬ë¦¬ë íë¡ì í¸ê° ë¬ë¤ê³ íë¤
Java8ì ìì§ë ì°ëê²ë ëë¼ì´ë° ì´ íë¡ì í¸ì ì°¸ì¬í ìë ìë¤ëê² ëë¼ì
Java 8ìì 21ë¡ : íëì ìë°ë¡ì ëëì½
1. Virtual Threads: ëìì± íë¡ê·¸ëë°ì íëª (Java 21)
ê°ì¥ íê¸ë ¥ì´ í° ë³íë¤. 기존 ìë°ì ì¤ë ë(PlatformThread)ë OS ì¤ë ëì 1:1ë¡ ë§¤íëì´ ìì± ë¹ì©ì´ ë¹ì¸ê³ ê°ìë ì íì ì´ìë¤.
- Java 8 : ìì² íë ë¹ ì¤ë ë íë를 í ë¹íë¤ë³´ë, I/O ìì (DB ì¡°í, APIí¸ì¶) ì ì¤ë ëê° ì°¨ë¨ëì´ ììì´ ëë¹ëìì. ì´ë¥¼ í´ê²°íë ¤ë©´ ë³µì¡í ë¹ë기 íë¡ê·¸ëë°(WebFlux ë±)ì´ ê°ì ëìë¤.
- Java 21 : ìë°±ë§ ê°ì Virtual Thread를 ìì±í ì ìë¤. I/O ì°¨ë¨ì´ ë°ìíë©´ JVMì´ í´ë¹ ê°ì ì¤ë ë를 ë기 ìíë¡ ëë¦¬ê³ , ì¤ì OS ì¤ë ëììë ë¤ë¥¸ ê°ì ì¤ë ë를 ì¤ííë¤.
[ì½ë ìì : ê°ì ì¤ë ë ìì±]
// 기존 ë°©ì : íë«í¼ ì¤ë ë ìì± (ì íì )
Thread.ofPlatform().start(() -> System.out.println("Platform Thread"));
// Java 21 ë°©ì : ê°ì ì¤ë ë ìì± (ìë°±ë§ ê° ê°ë¥)
Thread.ofVirtual().start(() -> {
System.out.println("Virtual Thread ìì");
});
// ì¤ë ë í ìì´ë ì²ë¦¬ëì´ íë°ì ì¼ë¡ ì¦ê°í¨
try (var executor = Executors.newVirtualThreadPerTaskExecutor()) {
IntStream.range(0, 10_000).forEach(i -> {
executor.submit(() -> {
Thread.sleep(Duration.ofSeconds(1)); // I/O ì뮬ë ì´ì
return i;
});
});
}
2. Record & Pattern Matching : ê°ê²°íê³ ìì í ì½ë (Java 14~21)
Java8ììë ë°ì´í° ê°ì²´(DTO)를 íë ë§ë¤ë ¤ë©´ ìì ì¤ì Boilerplate ì½ëê° íìíë¤. ì´ì ë 'ì¸ì´ ì°¨ì'ìì ì´ë¥¼ í´ê²°íë¤.
- Record: ë¶ë³ ë°ì´í°ë¥¼ ì ì¥í기 ìí í¹ë³í í´ëì¤.
íë, ìì±ì, getter, equals, hashCode, toStringì ì»´íì¼ë¬ê° ìëì¼ë¡ ìì±í¨. - Pattern Matching: instanceofë¡ íì ì íì¸í ë¤ ê°ì íë³í(Casting)ì íë ë²ê±°ë¡ìì´ ì¬ë¼ì§
[ì½ë ìì: Before vs After]
// Java 8 ë°©ì (Lombok ìì¡´ ëë ì기ìì±)
public class User {
private final String name;
private final int age;
}
// Java 21 ë°©ì (Record + Pattern Maching)
// ë¨ í ì¤ë¡ ë°ì´í° ê°ì²´ ì ì
public record User(String name, int age) {}
public void process(Object obj) {
// 1. Pattern Matching for instanceof: íì
ì²´í¬ì ë³ì ì ì¸ì ëìì
if (obj instanceof User user) {
System.out.println("ì´ë¦: "+user.name()); //userë¡ ë°ë¡ ì ê·¼
}
// 2. Switch Pattern Matching: switch문ìì ë³µì¡í ì¡°ê±´ ì²ë¦¬
String result = switch (obj) {
case User u && u.age() > 18 -> "ì±ì¸ ì ì : "+u.name();
case User u -> "미ì±ë
ì ì ";
case String s -> "문ìì´ ë°ì´í°: "+s;
default -> "ì ì ìë íì
";
};
}
3. Text Blocks: ê°ë ì±ì ë¹ì½ì í¥ì (Java 15)
JSONì´ë SQLì ìë° ì½ëì ìì±í ë ë ì´ì 문ìì´ ëí기(+)ì íì¶ ë¬¸ì(\n, \")ë¡ ê³ íµë°ì§ ììë ë¨
[ì½ë ìì: JSON 쿼리]
// Java 8: ì½ê¸° íë¤ê³ ìì í기 ì´ë ¤ì
String json8 = "{\n" +
" \"name\": \"Gemini\",\n" +
" \"version\": \"21\"\n" +
"}";
// Java 21: ì¤ì ë°ì´í° ëª¨ìµ ê·¸ëë¡ ìì±
String json21 = """
{
"name": "Gemini",
"version": "21"
}
""";
4. ì¤ë¬´ ëì ì ëµ
- Jakarta EE ì í : Spring Boot 3.0(Java 17+)ë¶í°ë javax.* í¨í¤ì§ë¥¼ ë ì´ì ì§ìíì§ ìëë¤.
- javax.persistence.* -> jakarta.persistence.*
- javax.servlet.* -> jakarta.servlet.*
- ë¨ì í ì¤í¸ ì¹íì´ ìë, ì¤ì íì¼ ì´ìê° ìì¼ë¯ë¡ ê²í íì
- G1 GC ìµì í : Java 8ì 기본 GCì¸ Parallel GCë ì²ë¦¬ë ì¤ì¬ì´ë¤. Java 21ì 기본 G1 GCë ìëµ ìê° ì¡°ì ì ìµì í ëì´ìì. ë©ëª¨ë¦¬ ì¤ì (-Xms, -Xmx)ì¸ìë GCìµì ì´ ë§ì´ ë³íì¼ë¯ë¡ ë¶í í ì¤í¸ê° íìë¤
- ìì¡´ì±(Library)ì í¸íì± :
- Lombok: ìµì 1.18.30 ì´ì ê¶ì¥
- QueryDSL: 5.0 ì´ì íì ë° jakarta í¨í¤ì§ ì¤ì íì¸.
- Hibernate: 6.x ë²ì ì¼ë¡ ì ê·¸ë ì´ë ëë©´ì Dialect ì¤ì ë°©ìì´ ë³í¨
- Spring Boot 3.2+ íì : Java 21ì ê°ì ì¤ë ë를 ì¨ì í ì§ìíë ¤ë©´ ìµì Spring Boot 3.2ì´ìì ì¨ì¼í¨
- ì¤ì í ì¤ë¡ ì±ë¥ ìµì í: ê°ì ì¤ë ë를 ì¬ì©í기 ìí´ ë³µì¡í ë¹ ì¤ì ëì , application.ymlì ì¤ì í ì¤ë§ ì¶ê°íë©´ í°ìº£ì´ ê°ì ì¤ë ë 기ë°ì¼ë¡ ëìí¨
spring:
threads:
virtual:
enabled: true
- GraalVM Native Image ì§ì: SpringBoot 3ë¶í°ë JVM ìì´ ì¤í ê°ë¥í ë¤ì´í°ë¸ ì´ë¯¸ì§ë¥¼ ê³µì ì§ìíë¤. ìì ìëê° 0.1ì´ëë¡ ì¤ì´ë¤ì´ Serverless(AWS Lamda ë±) íê²½ìì Java8 ëë¹ ìëì ì¸ ì°ì를 ì íë¤.
- Gradle ë²ì ì
ê·¸ë ì´ë: Java21ì ì§ìíë ¤ë©´ Gradle 8.5 ì´ìì´ íìì (íì¬ 7.6.4)
Java 8ìì ì compile, testCompileê°ì 문ë²ì ì´ë¯¸ ì ê±°ëìì¼ë¯ë¡ implementation, apië¡ ìì í ì íí´ì¼ í¨
5. ì´ ì¸ ê¸°í
- Sequenced Collections (Java 21):
List, Setì ë§ì§ë§ ìì를 ê°ì ¸ì¤ê¸° ìí´ list.get(list.size() - 1) ëì list.getFirst(), list.getLast() ì¬ì© ê°ë¥ - collect(Collectors.toList()) -> .toList()
'Programming > BackEnd' ì¹´í ê³ ë¦¬ì ë¤ë¥¸ ê¸
- ë°ê°ìµëë¤. ê¸ì 구ì±ê³¼ íë¦ì´ ë§¤ì° ìì°ì¤ë¬ì ìµëë¤.â¯
- ë¤ë ë¤ ê°ëë¤~ ì½ë ë´ë´ 몰ì íì´ì. ììì ìë¯¸ë¡ â¯
- ë°ë»í ì´ì¼ê¸° ëë¶ì íë£¨ê° ë ì¦ê±°ìì¡ì´ì. ê°ì¬í©ëâ¯
- ê¸ì´ ì°¸ ê¹ì´ê° ìë¤ì. ê°ì ê³¼ ë ¼ë¦¬ê° ì ì¡°í를 ì´ë¤â¯
- Total
- 1,011
- Today
- 0
- Yesterday
- 5
- IMAGE
- docker-compose
- ì¡°í©
- bruteforce
- docker
- ìì´í 60
- springboot
- DevOps
- ìì íì
- Container
- ìì´í 59
- EffectiveJava
- ìì´í 61
- BFS
- ì´íí°ë¸ìë°
- Retrofit2
- dfs
- ì´ìì²´ì
- ìí
- BOJ
- Java
- OS
- subset
- cicd
- ê·¸ëííì
- í í°ê¸°ë°ì¸ì¦
- dp
- ìê³ ë¦¬ì¦
- ë°±ì¤
- ìì´
