νμ¬ λλ©μΈμ λ μ§μ μλ‘μ΄ λ μ§λ₯Ό μ
λ ₯νλ κ³Όμ μμ java.time.LoclaDate μμ equals() λ₯Ό μ¬μ©νλλ° isEquals() λ μμ΄μ νμΈν΄ λ΄€λ€. equals λ λ
Όλ¦¬μ μΌλ‘ λλ±νλ©΄ λλ€ -> λ΄μ©μ΄ κ°μκ°? isEqula μ 물리μ μΌλ‘λ λλ±ν΄μΌ νλ€ -> κ°μ λ©λͺ¨λ¦¬ μ£Όμλ₯Ό μ°Έμ‘°νκ³ μλκ°? νμ§λ§ λ΄κ° μνλ건 λλ€ μλμμ λλ©μΈμ μλ λ μ§ μμ²΄κ° null μΌ μ μλ€. equals λ₯Ό μ¬μ©νλ €λ©΄ μ£Όμ²΄κ° λλ object λ nullμ΄λ©΄ μλλ€. μμ ν λΉκ΅λ₯Ό μν΄ java.util.Obejcts μ μλ equalsλ₯Ό μ¬μ©νλ€. κ·Όλ° λλ€ null μ΄λ©΄ true λ₯Ό λ°ννκΈ° λλ¬Έμ nullμ΄ λμ΄μ€λ©΄ return ν΄λ²λ¦¬λ λ‘μ§μ μΆκ°νλ€. public void updat..
π WEB/JAVA
Java μ μΌλ°μ μΈ λ¬Έμ μ€ νλλ λμ λ©λͺ¨λ¦¬ μ¬μ©λμΌλ‘ μΈν΄ μ±λ₯, μΆ©λμ΄ λ°μν μ μλ€κ³ νλ€. μ΅μ ν λ° λ©λͺ¨λ¦¬ μ¬μ©λ κ°μλ₯Ό μν λͺ¨λ² μ¬λ‘λ₯Ό μ΄ν΄λ³΄μ 1. Primitive type(μμνμ
) μ μ¬μ©νμ. μ°Έμ‘°νμ
λ³΄λ€ μμνμ
μ μ¬μ©νλ€. μμνμ
μ μ¬μ©νλ©΄ κ°μ²΄ μμ± μ€λ²ν€λλ₯Ό λ°©μ§νμ¬ λ©λͺ¨λ¦¬λ₯Ό μ μ½ν μ μλ€. + λν μμνμ
μ μ€ν λ©λͺ¨λ¦¬ μμ λ°λ‘ μ½κ³ , μ°Έμ‘°νμ
μ μ€ν λ©λͺ¨λ¦¬μμ ν λ©λͺ¨λ¦¬μ μμΉλ₯Ό ꡬν΄μ¨ λ€μμ λ€μ ν λ©λͺ¨λ¦¬μ κ°μ κ°μ μ½μ΄μμΌ ν΄μ μ±λ₯μ μ 리νλ€. 2. λΆνμν κ°μ²΄ μμ± νμ§λ§μ. String s = "μ μ μ°"+" μ
λλ€"; ν΄λΉ μ½λ νμ€μ "μ μ μ° μ
λλ€" μ λν μ λ¬Έμμ΄ κ°μ²΄λ₯Ό λ§λλλ€. λμ StringBuilder λ₯Ό μ¬μ©νμ¬ λ¬Έμμ΄μ ..
jwt ν ν° μ μΆκ°νλ λμ€ μ΄λ―Έ μ¬μ©μ€μΈ μλΉμ€κ° μ¬μ©νκ³ μλκ±Έ μΆμννλ μμ
μ€μ μ λ€λ¦μ μ¬μ©ν νκΈ°μ΄λ€. μλΉμ€ λ§λ€ λ€λ₯Έ ν ν°μ μ§ μκ°, νμ΄λ‘λλ₯Ό κ°κ³ μλλ° μ€λ²λΌμ΄λ©μ μ¬μ©νμλλ° μ½λ리뷰 λ κ°μ κΈ°λ₯μ νλ©΄μ μ½κ°μ νλμΆκ°λ§ λλκ²μ΄λΌμ μ λ€λ¦μ μ¬μ©ν΄λ³΄λκ² μ΄λ»λλ νΌλλ°±μ λ°μλ€. λ¬Όλ‘ μ²μ μ¨λ³΄λκ±°λΌμ μκ°μ΄ μ€λ κ±Έλ Έλ€. μ¬λ―Έμμκ³ μ μΈκ³μλ€ (μ λλ‘ μ΄κ²λ μλμ§λ§) μλμ κ°μ΄ μ λ€λ¦ ν΄λμ€λ₯Ό μμ±νκ³ issue (ν ν°λ°ν) μ μ€ννμ λ μ λ€λ¦ νμ
μΌλ‘ μμ± νμλ€ @Data @AllArgsConstructor public class TokenPayload { private T tokenPayload; public T getTokenPayload() { return ..
κ°λ¨ν κΈ°λ³Έ λ±λ‘ νμ΄μ§λΌμ λ€λ₯Έμ½λμ λκ°μ΄ νλ€κ° μ½κ° λ³νλ₯Ό μ£Όμλ€. html μμ ajaxλ‘ μλ²μκ² μμ²ν λ success μ¦ ν΅μ μ μ±κ³΅νκ³ java μμ return μΌλ‘ ok (boolean) μ λ΄λ €μ£Όλ©΄ message λ₯Ό λμ΄μ€λ€. const updateDriver = function () { if (confirm("λ±λ‘νμκ² μ΅λκΉ?")) { $.ajax({ type: "POST", url: "/create", data: $("#createForm").serialize(), dataType: 'json', success: function (r) { alert(r.message); if (r.OK) { location.href = '/list'; } }, error: function (xh..
κ°λ° νλ©΄μ λΉμ°ν λΆλΆμ΄μμ§λ§ λμκ² μλ‘κ² λ€κ°μλ μμΈμ²λ¦¬ ... γ
리뷰 ν΄μ£Όμλ 맀λμ λμ΄ λ무 μ μλ €μ£Όμ
μ μ 리 ν΄λ΄
λλ€ ( 격ν κ°μ¬ π₯Ή ) μμ λͺ©μ΄ μ°κ΄λμ΄ μ΄μ΄μ§μ§λ μκ³ μν©λ§λ€ μμΈμ²λ¦¬ νλ λΆλΆμ λ©λͺ¨νμ΅λλ€. μμΈ λ°μ μ μ‘°μΉλ₯Ό λͺ»νλ κ²½μ° & κ΄λ¦¬νμ§ λͺ»νλ κ²½μ° POINT * λ°μν λ§ κ³³ μμ catch ν λ©μμ§λ₯Ό μ λλ€. (μμΈμν©μ μ νν μμ νλ€) * μΈμ²΄ν¬μμΈλ‘ λ³κ²½νλ€. μμΈλ₯Ό μ‘μ§ λͺ»νλ©΄ μλ°μμλ ν΄λΉ μ 보λ₯Ό μλμΌλ‘ μΆλ ₯ν©λλ€. νμ§λ§ μ€ν¨μμΈμ λΆμν λ λ³Ό μ μλ μ 보λ μ€νμ λ³΄μΌ κ²½μ°κ° λ§κΈ° λλ¬Έμ log λ‘ μμΈλ₯Ό κ΄λ¦¬νκ³ μλ€λ©΄ μ€ν¨ μμΈμ κ΄ν μ 보λ₯Ό κ°λ₯ν λ§μ΄ λ΄μ λ°ννμ¬ μΆμ νκΈ° μ½λλ‘ νλκ² μ€μν©λλ€! 1. λ°μν μμΈμ λν λͺ¨λ κ°..
νμ¬ μ½λλ₯Ό λΆμνλ€κ° ν¨μνμΈν°νμ΄μ€λ₯Ό νμ©ν λΆλΆμ΄ μμ΄μ 곡λΆν΄λ³΄μλ€. μ¬μ©ν λͺ©μ μ ν΄λΉ EnumType μ μ¬μ©νλ©΄ κ·Έ Enumμ λ§κ² λ°°μ΄μ μ λ ¬νμ΅λλ€. μ μ ν 좩격μ λ°μμ΅λλ€ ..γ
.. κ·Έλμ μ λ κ°λ¨νκ² κ΅¬νν΄λ³΄κ³ 곡λΆν΄λ΄€μ΅λλ€! package com.example.demo; import java.util.function.Function; import lombok.Getter; import lombok.RequiredArgsConstructor; @Getter @RequiredArgsConstructor public enum ItemType { AA("μμ",CalRatio::getRatio), BB("μλ£",CalRatio::getRatio), CC("κ³Όμ",CalRatio::get..
TDD κ°λ° λ°©μ TDD λ ν
μ€νΈ μ½λλ₯Ό μμ±ν λ€μ μ€μ μ½λλ₯Ό μμ±νλ κ²μ΄λ€. ν
μ€νΈκ° ν΅κ³Όλ μ½λλ§μ μ€μ μ½λλ‘ μμ±νλ€ -> λ²κ·Έκ° μ€κ³ μμ€κ° κ°κ²°ν΄μ§λ©° μ€κ³κ° κ°μ λλ€. - μ€κ³ λ¨κ³μμ νλ‘κ·Έλλ° λͺ©μ μ 미리 μ μνλ€. - 무μμ ν
μ€νΈν΄μΌ ν μ§ λ―Έλ¦¬ μ μνλ€. - ν
μ€νΈ μ½λ μμ± λμ€ λ°μνλ μμΈ μ¬νμ ν
μ€νΈ μΌμ΄μ€μ μΆκ°νλ€. (μ€κ³ κ°μ ) TDD νλ‘μΈμ€ μ€ν¨νλ μμ λ¨μ ν
μ€νΈ μΆκ° -> ν
μ€νΈ ν΅κ³Ό, μ΅μνμ μ½λ© -> ꡬν μ€κ³ κ°μ , μ€λ³΅ μ κ±°, 리ν©ν λ§ , ν
μ€νΈ ν΅κ³Ό μ μ§ μ’μ ν
μ€νΈμ νΉμ§ Fast: ν
μ€νΈλ λΉ λ₯΄κ² λμνμ¬ μμ£Ό λ릴 μ μμ΄μΌ νλ€. Independent: κ°κ°μ ν
μ€νΈλ λ
립μ μ΄λ©° μλ‘ μμ‘΄ν΄μλ μλλ€. Repeatable: μ΄λ νκ²½μμ..
Java 8 μ΄νλ‘ interfaceμ λν μ μκ° λͺκ°μ§ λ³κ²½λμλ€. μν© μ΄λ―Έ λ§λ€μ΄μ Έ μλ Interface μ κΈ°λ₯μ μΆκ° νκ³ μΆλ€. νμ§λ§ μ΄ Interfaceλ₯Ό implemnets λ°κ³ μλ class λͺ¨λκ° μ΄ κΈ°λ₯μ ꡬν체λ₯Ό μμ±ν΄μΌλ§ νλ€. default λ©μλ μΈν°νμ΄μ€κ° default ν€μλλ‘ μ μΈλλ©΄ λ©μλλ₯Ό ꡬνν μ μκ² λλ€. -> ꡬν체λ€μ μ€λ²λΌμ΄λ©μ΄ κ°λ₯νλ€. package com.example.demo; public interface UserService { String getName(Long userId); int getAge(Long userId); /** * @implSpec μ΄ κ΅¬ν체λ μ£Όμλ₯Ό λ°ννλ€. * @param userId * @return */ // ..
πβοΈ κ³μν΄μ μ
λ°μ΄νΈ νκΈ° πβοΈ 1. 곡μλ¬Έμ 2. μ μ¬μ©ν κΉ? 3. λμλ°©μ 4. μμ‘΄μ± 5. Mapper Inteface μμ± 6. Mapper ꡬν체 μ΄ν΄λ³΄κΈ° 곡μλ¬Έμ https://mapstruct.org/documentation/stable/reference/pdf/mapstruct-reference-guide.pdf MapStruct μ μ¬μ©ν κΉ? λ³΄ν΅ DBμμ λ°μ΄ν°λ₯Ό μ‘°ννκ³ μλΉμ€λ¨μμ λ‘μ§μ μ€κ³ νκΈ° μν΄ Entity -> Dto , Dto -> Entity μμ
μ νκ² λλλ° μ΄λ¬ν Mapping μμ
μ ν΄μ£Όλ λΌμ΄λΈλ¬λ¦¬κ° λ§μ΄ μ‘΄μ¬νλ€ κ·Έμ€ μλμ λ§ν¬λ₯Ό νμΈν΄λ³΄λ©΄ MapStruct νΌν¬λ¨Όμ€κ° λΉ λ₯Έ κ²μ νμΈν μ μλ€. https://www.baeldung.com/j..
μ»΄νμΌκ³Όμ μμ μμ±ν΄ μ£Όλ λ°©μμΌλ‘ λμνλ javaλΌμ΄λΈλ¬λ¦¬μ
λλ€. @Value κΈ°λ³Έμ μΌλ‘ λΆλ³κ°μ²΄λ‘ λ§λ€μ΄μ€λ€. classμ μ μΈνλ©΄ μλμ μ΄λ
Έν
μ΄μ
μ΄ κΈ°λ³Έμ μΌλ‘ ν¬ν¨λλ€. @Getter @AllArgsConstructor @ToString @EqualsAndHashCode @FieldDefaults(makeFinal = true, level = AccessLevel.PRIVATE) νμ§λ§ @Setter λ ν¬ν¨λμ§ μλλ€. μλνλ©΄ κΈ°λ³Έμ μΌλ‘ λΆλ³μ±μ 보μ₯νκΈ° λλ¬Έμ setterλ₯Ό μλ΅νλ κ²μ λΉμ°νλ€ @FieldDefaults(makeFinal = true, level = AccessLevel.PRIVATE) λ privateμ΄λ final μ μ¬μ©ν μ μκ² ν΄μ€λ€. μ΅μ’
μ μΌλ‘ @Value ..
μ€λ λνμ μμ
μ²λ¦¬μ μ¬μ©λλ μ€λ λλ₯Ό μ νλ κ°μλ§νΌ μ ν΄ λκ³ μμ
νμ λ€μ΄μ€λ μμ
λ€μ νλμ© μ€λ λκ° λ§‘μ μ²λ¦¬νλ€. λ³λ ¬ μμ
μ²λ¦¬κ° λ§μμ§λ©΄ μ€λ λ κ°μκ° μ¦κ°λλλ° κ·Έμ λ°λ₯Έ μ€λ λ μμ±, μ€μΌμ€λ§μΌλ‘ μΈν΄ CPUκ° λ°λΉ μ Έ λ©λͺ¨λ¦¬ μ¬μ©λμ΄ λμ΄λλ€. λ°λΌμ μ ν리μΌμ΄μ
μ μ±λ₯μ΄ μ ν λλ―λ‘ μ€λ λ νμ μ¬μ©νμ¬ μ€λ λ μ 체 κ°μκ° λμ΄λμ§ μλλ‘ ν΄μΌνλ€. μ€λ λν μμ± public class ExecutorExample { public static void main(String[] args) { // 1κ°μ μ€λ λλ₯Ό μ¬μ©νλ μ€λ λν μμ± ExecutorService singleThread = Executors.newSingleThreadExecutor(); // μ€λ λλ₯Ό μ ν μμ΄ μ¬..
λ°λͺ¬ μ€λ λ μ£Ό μ€λ λμ μμ
μ λλ 보쑰μ μΈ μν μ μννλ μ€λ λμ
λλ€. κ·Έλ κΈ° λλ¬Έμ μ£Ό μ€λ λκ° μ’
λ£λλ©΄ λ°λͺ¬ μ€λ λλ κ°μ μ μΌλ‘ μλ μ’
λ£λ©λλ€. μ μ© μλ‘λ μλ μ μ₯, κ°λΉμ§ 컬λ ν° λ±μ΄ μλλ° μ΄ κΈ°λ₯λ€μ μ£Ό μ€λ λκ° μ’
λ£λλ©΄ κ°μ΄ μ’
λ£λ©λλ€. λ°λͺ¬ μ€λ λ λ΄μ©μ μμ±ν΄μ€ ν public class DaemonThread extends Thread{ public void save(){ // μλ μ μ₯ } public void run(){ save(); } } λ©μΈ μ€λ λμμ setDaemon μ ν΄μ£Όλ©΄ λλ€. public class mainThread(){ public static void main(String[] args){ DaemonThread daemonThread = new Dae..