JAVA & OOP

Java 17을 μ‚¬μš©ν•˜λŠ” 이유

DAHLIA CHOI 2024. 1. 6. 01:10

β˜•οΈ Java 17을 μ‚¬μš©ν•˜λŠ” 이유

  1. Java 11보닀 지원기간이 κΈΈλ‹€.
  2. Java 8μ΄λ‚˜ Java 11을 μ‚¬μš©ν–ˆμ„ λ•Œ 보닀 μ‹ κ·œ λ²„μ „μœΌλ‘œ λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ν•˜κΈ°μ— λ¦¬μŠ€ν¬κ°€ 적어진닀.
  3. SpringBoot 3.0 λΆ€ν„° Java 17 이상을 μ§€μ›ν•œλ‹€.
  4. ν˜„μž¬ SpringBoot 2.x.xλŠ” 23λ…„ 11월에 지원이 μ’…λ£Œλ˜μ—ˆλ‹€.
  5. Java 17μ—μ„œ 가비지 μ»¬λ ‰μ…˜ μ•Œκ³ λ¦¬μ¦˜(ZGC, Shenandoah GC)이 κ°œμ„ λ˜μ–΄ λ©”λͺ¨λ¦¬ 관리 효율이 ν–₯μƒλ˜μ—ˆμœΌλ©°, 컴파일러 μ΅œμ ν™” 기술이 μ—…κ·Έλ ˆμ΄λ“œλ˜μ–΄ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μ‹€ν–‰ 속도와 응닡 μ‹œκ°„μ΄ κ°œμ„ λ˜μ—ˆλ‹€.
  6. Java 17μ—μ„œ μ•”ν˜Έν™” 및 인증 μ•Œκ³ λ¦¬μ¦˜μ˜ μ΅œμ‹  ν‘œμ€€μ„ μ§€μ›ν•΄μ„œ μ›Ή μ„œλΉ„μŠ€ 및 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ λ³΄μ•ˆμ„ κ°•ν™”ν•œλ‹€.
  7. μƒˆλ‘œμš΄ λ©”μ„œλ“œ μΆ”κ°€

πŸ”Ž Java 17 λ©”μ„œλ“œ

1. recode

recodeλŠ” 데이터 클래슀λ₯Ό μ˜λ―Έν•˜λ©° DTO같은 클래슀λ₯Ό μ‰½κ²Œ μ •μ˜ν•  수 μžˆλ‹€.

  • getterκ°€ μžλ™μ μœΌλ‘œ μƒμ„±λœλ‹€.
  • equals, hashcode, toString이 μžλ™μ μœΌλ‘œ μƒμ„±λœλ‹€.
  • λ©€λ²„λ³€μˆ˜κ°€ private final둜 μ„ μ–Έλœλ‹€.
  • κΈ°λ³Έμƒμ„±μžλŠ” μ§€μ›ν•˜μ§€ μ•ŠμœΌλ―€λ‘œ ν•„μš”ν•œ 경우 직접 생성해야 λœλ‹€.
  • final ν΄λž˜μŠ€μ΄λ―€λ‘œ λ‹€λ₯Έ 클래슀λ₯Ό μƒμ†ν•˜κ±°λ‚˜ μƒμ†μ‹œν‚¬ 수 μ—†λ‹€.
  • private final fields μ΄μ™Έμ˜ μΈμŠ€ν„΄μŠ€ ν•„λ“œλ₯Ό μ„ μ–Έν•  수 μ—†λ‹€.

before

public class Response {
	
	private final String name;
	private final int age;

	public Response(final string name, final int age){
		this.name = name;
		this.age = age;
	}

	public String getName(){
		return name;
	}

	public int getAge(){
		return age;
	}
}

after

public recode Response(
	String name;
	int age;
){}

 

2. Stream.toList()

Collectors.toList()λ₯Ό .toList()둜 ν‘œν˜„ν•  수 μžˆλ‹€.

before

.stream()
.collect(Collector.toList())

after

.stream()
.toList();

 

3. Switch Expression

기쑴의 switch ~ case: break 보닀 κ°„κ²°ν•˜κ²Œ μ‚¬μš©ν•  수 μžˆλ‹€.

  • 싀행문은 -> 을 μ΄μš©ν•΄μ„œ λ‚˜νƒ€λ‚Έλ‹€.
  • 쑰건듀은 , λ₯Ό μ΄μš©ν•΄ λ‚˜μ—΄ν•œλ‹€.
  • breakλ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”λ‹€.

before

switch(a){
	case "aa":
	case "bb":
		break;
}

after

switch(a){
	case "aa", "bb"
		-> System.out.println("~~~");
}

 

4. ν…ŒμŠ€νŠΈ 블둝

기쑴에 λ¬Έμž₯을 ν•©μΉ˜λ €λ©΄ +λ₯Ό μ‚¬μš©ν–ˆμ–΄μ•Ό ν•΄μ„œ 가독성이 μ•ˆμ’‹μ•˜λŠ”λ° Java 17μ—μ„œλŠ” ν…ŒμŠ€νŠΈ 블둝을 μ‚¬μš©ν•΄μ„œ ν‘œν˜„ν•  수 μžˆλ‹€.

before

String jsonString = "{\\n" +
    "  \\"name\\": \\"Jinny\\",\\n" +
    "  \\"age\\": 20\\n" +
    "}";
@Query("select m from Member m"
				+ "where m.id = :id")

after

String jsonString = """
        {
          "name": "Jinny",
          "age": 20
        }
        """;
@Query("""
			select m from Member m
			where m.id = :id
			""")

 

 

 

Reference

https://velog.io/@jinny-l/Java-17

https://aday7.tistory.com/entry/%EA%B8%88%EC%9C%B5%EA%B6%8C-%EC%9E%90%EB%B0%94-%EB%B2%84%EC%A0%84-%EC%97%85%EA%B7%B8%EB%A0%88%EC%9D%B4%EB%93%9C-%ED%95%84%EC%9A%94%EC%84%B1%EA%B3%BC-%EC%B6%94%EC%B2%9C-Java-17-%EB%8F%84%EC%9E%85-%EC%A0%84%EB%9E%B5