μΉμ 6. λ°μ΄ν° μ κ·Ό κΈ°μ - μ€νλ§ λ°μ΄ν° JPA μκ° μλ£!!
μ€νλ§ λ°μ΄ν° JPA μ£Όμ κΈ°λ₯
μ€νλ§ λ°μ΄ν° JPAλ JPAλ₯Ό νΈλ¦¬νκ² μ¬μ©ν μ μλλ‘ λμμ£Όλ λΌμ΄λΈλ¬λ¦¬λ€. κ°μ₯ λνμ μΈ κΈ°λ₯μ λ€μκ³Ό κ°λ€.
JpaRepository
μΈν°νμ΄μ€λ₯Ό ν΅ν΄ κΈ°λ³Έμ μΈ CRUD κΈ°λ₯μ μ 곡νλ€.
곡ν΅ν κ°λ₯ν κΈ°λ₯μ΄ κ±°μ λͺ¨λ ν¬ν¨λμ΄ μλ€.
JpaRepository μ¬μ©λ²
public interface ItemRepository extends
JpaRepository<Member, Long> {}
JpaRepository μΈν°νμ΄μ€λ₯Ό μμ λ°κ³ , μ λ€λ¦μ κ΄λ¦¬ν <μν°ν°, μν°ν°ID>λ₯Ό μ£Όλ©΄ λλ€. κ·Έλ¬λ©΄ JpaRepositoryκ° μ 곡νλ κΈ°λ³Έ CRUD κΈ°λ₯μ λͺ¨λ μ¬μ©ν μ μλ€.
μ€νλ§ λ°μ΄ν° JPAκ° κ΅¬ν ν΄λμ€λ₯Ό λμ μμ±
JpaRepository
μΈν°νμ΄μ€λ§ μμ λ°μΌλ©΄ μ€νλ§ λ°μ΄ν° JPAκ° νλ‘μ κΈ°μ μ μ¬μ©ν΄μ ꡬν ν΄λμ€λ₯Ό λ§λ€μ΄μ€λ€. κ·Έλ¦¬κ³ λ§λ ꡬν ν΄λμ€μ μΈμ€ν΄μ€λ₯Ό λ§λ€μ΄μ μ€νλ§ λΉμΌλ‘ λ±λ‘νλ€.
λ°λΌμ κ°λ°μλ ꡬν ν΄λμ€ μμ΄ μΈν°νμ΄μ€λ§ λ§λ€λ©΄ κΈ°λ³Έ CRUD κΈ°λ₯μ μ¬μ©ν μ μλ€.
μ€νλ§ λ°μ΄ν° JPAλ μΈν°νμ΄μ€μ λ©μλλ§ μ μΌλ©΄, λ©μλ μ΄λ¦μ λΆμν΄μ 쿼리λ₯Ό μλμΌλ‘ λ§λ€κ³ μ€νν΄μ£Όλ κΈ°λ₯μ μ 곡νλ€.
μ€νλ§ λ°μ΄ν° JPA
public interface MemberRepository extends JpaRepository<Member, Long> {
List<Member> findByUsernameAndAgeGreaterThan(String username, int age);
}
μ€νλ§ λ°μ΄ν° JPAλ λ©μλ μ΄λ¦μ λΆμν΄μ νμν JPQLμ λ§λ€κ³ μ€ννλ€. JPAκ° JPQLμ SQLλ‘ λ²μν΄μ μ€ννλ€.
쿼리 λ©μλ κΈ°λ₯ λμ μ μ§μ JPQLμ μ¬μ©νκ³ μΆμ λ λ€μκ³Ό κ°μ΄ @Query
μ ν¨κ» JPQLμ μμ±νλ©΄ λλ€. μ΄ λλ λ©μλ μ΄λ¦μΌλ‘ μ€ννλ κ·μΉμ 무μλλ€.
//쿼리 μ§μ μ€ν
@Query("select i from Item i where i.itemName like :itemName and i.price <= :price")
List<Item> findItems(@Param("itemName") String itemName, @Param("price") Integer price);
λ©μλ μ΄λ¦μΌλ‘ 쿼리λ₯Ό μ€ννλ κΈ°λ₯μ λ€μκ³Ό κ°μ λ¨μ μ΄ μλ€.
λ©μλ μ΄λ¦μΌλ‘ 쿼리λ₯Ό μ€ννλ κΈ°λ₯μ κ°λ¨ν κ²½μ°μ λ§€μ° μ μ©νμ§λ§, 볡μ‘ν΄μ§ κ²½μ° μ§μ JPQL 쿼리λ₯Ό μμ±νλ κ²μ΄ μ’λ€.
μ 리
μ€νλ§ λ°μ΄ν° JPAλ λ¨μν νΈλ¦¬ν¨μ λμ΄μ, λ§μ κ°λ°μλ€μ΄ λκ°μ μ½λλ‘ μ€λ³΅ κ°λ°νλ λΆλΆμ κ°μ μμΌ μ€λ€.
+) 22. 09. 07. 02:18 μΆκ° (짱 κΈΈλ€...;)
JDK 1.0 (1991)
JDK 1.1 (1997)
JDK 1.2 (1998)
JDK 1.3 (2000)
JDK 1.4 (2002)
Java 1.5 (2004)
Generics, annotation, auto boxing, foreach, static imports, Enum λ± λμ
//1.5 μ΄μ , 컬λ μ
μ κΈ°λ³Έ νμ
μ μ½μ
νλ μ½λ
List list = new ArrayList(10);
list.add(new Integer(10)); //AutoBoxing, UnBoxing μ§μ X
//1.5 μ΄ν, 컬λ μ
μ κΈ°λ³Έ νμ
μ μ½μ
νλ μ½λ
List<Integer> list = new ArrayList<>();
list.add(10);
API: java.util.concurrent API, scanner class
Java 6 (2006)
Java 7 (2011)
Generics λ΄ νμ
μΆλ‘
μ΄μ λ²μ
Map<String, Object> user = new HashMap<String, Object>();
7 λ²μ
Map<String, Object> user = new HashMap<>();
Switch λ¬Έμμ λ¬Έμμ΄ νμ©
switch (day) {
case "NEW": System.out.println("Order is in NEW state"); break;
case "CANCELED": System.out.println("Order is Canceled"); break;
default: Systme.out.println("Invalid");
}
7 λ²μ μμλ try with resource κ΅¬λ¬Έμ΄ μΆκ°λμ΄ μλμΌλ‘ μμμ close νλ€. μ΄λ¬ν 맀컀λμ¦μ μ¬μ©νκΈ° μν΄μλ AutoCloseable, Closeable μΈν°νμ΄μ€λ₯Ό ꡬνν΄μΌ νλ€.
Java 7μ Streams, Files, Socket, DB Connection λ±μ ν΄λΉ μΈν°νμ΄μ€λ₯Ό ꡬννκ³ μλ€.
Fork/Join Framework
Fork/Join Frameworkλ λ©ν° νλ‘μΈμμ μ±λ₯μ μ΄μ©ν μ μλ ExecutorServiceμ μΈν°νμ΄μ€ ꡬν체μ΄λ€.
μμ
μ λ°λ³΅μ μΌλ‘ μμ μ‘°κ°μΌλ‘ λλμ΄ μνν μ μκ² μ€κ³λμλ€.
Java 8 (2014)
Java 9 (2017)
Java 10 (2018)
//10 μ΄μ
String name = "jangmi";
//10 μ΄ν
var name = "jangmi";
Java 11 (2018. 09.)
Java 12 (2019. 03.)
switch (day) {
case MONDAY, FRIDAY, SUNDAY -> System.out.println(6);
case TUESDAY -> System.out.println(7);
}
Java 13 (2019. 09.)
Java 14 (2020. 03.)
recordλΌλ λ°μ΄ν° μ€λΈμ νΈ μ μΈ κΈ°λ₯μ΄ μΆκ°λμλ€.
//λ°μ΄ν°, (μ μ¬μ μΌλ‘)getter/setter, equals/hashcode, toStringλ§ ν¬ν¨νλ Java 14 μ΄μ ν΄λμ€
final class Point {
public final int x;
public final int y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
}
//recordλ₯Ό μ¬μ©
record Point(int x, int y) {}
Java 15 (2020. 09.)
Java 16
Java 17 (2021. 09.)
μ°Έκ³ μλ£
μμΈiTμμΉ΄λ°λ―Έ, μλ°(Java) λ²μ λ³ νΉμ§, http://www.seoulit.or.kr/service/cumm_08_view.html?type=faq&category_chk=&num_per_page=15&page=1&code_seq=NjA2Ng==
Techvu, βμλ° λ²μ λ³ μμ¬ λ° νΉμ§β, https://techvu.dev/136
ohne Hast aber ohne Rast, β[JAVA] JDK λ²μ λ³ μ 리β, https://truehong.tistory.com/114
juoh0920.log, βjava λ²μ λ³ μ°¨μ΄ & νΉμ§β, https://velog.io/@ljo_0920/java-%EB%B2%84%EC%A0%84%EB%B3%84-%EC%B0%A8%EC%9D%B4-%ED%8A%B9%EC%A7%95
ν¨κ» 보면 μ’μ μλ£
λ΄ μκ°μ, μ무λλ μλ°κ° ν¬κ² λ°λ λΆλΆμ΄ 8, 11 λ²μ μ΄λ μ μμμ λμ¨ κ²λ€λ§ μ μλ©΄ ν¬κ² λ¬Έμ λ 건 μμ κ² κ°λ€.
ν°μΌλͺ¬
public int solution(int[] nums) {
int answer = 0;
int nums_size = nums.length / 2;
Integer[] numbers1 = Arrays.stream(nums).boxed().toArray(Integer[]::new);
Set<Integer> numbers2 = new HashSet<>(Arrays.asList(numbers1));
answer = (int) numbers2.stream().count();
if (answer > nums_size) {
return nums_size;
}
return answer;
}
λ¬Έμ μ€λͺ
μ λ무 κΈΈμ΄μ μλ΅... μ°Έκ³ λ‘ λ΄ λ΅μ 1μ ^^ λμλ€^^
μμ§? μΆμλ° λ΄κ° λ΄λ μ½λκ° κ΅¬λ¦° κ² κ°κΈ΄ ν¨. μ νμ μ¬λμ μ€νΈλ¦Ό... λλ€... μΌλλ°... λ μμ§ κ±°κΈ°κΉμ§... λ―Έν‘ν΄μ... κ³ μ 1μ λ°μ λͺ» λ°μλ€... κ·Έλλ νμ κ² μ΄λκ° μΆκ³ ? μ¬μ€ λ¬Έμ μ체λ₯Ό μ μ΄ν΄ λͺ» νλ€. μ΄λ €μμ...