RequestBody 자바 객체 매핑
·
Programming/Spring
기본 생성자가 없음에도 @RequestBody를 통해 Java 객체가 올바르게 생성되었다. 기본적으로 리플렉션과 기본 생성자를 사용해 매핑된다고 알고 있었기에 의문이 들었다.@Getter@Builderpublic class SignupRequest { @NotBlank(message = "Email is required") @Email(message = "Invalid email format") private String email; @NotBlank(message = "Password is required") @Size(min = 6, max = 20, message = "Password must be between 6 and 20 characters") private String passw..
Interface와 Abstract Class 차이
·
Programming/Java
인터페이스클래스 간 반드시 따라야 하는 행동 계약을 정의한다.여러 클래스가 공통된 동작을 제공하도록 강제한다.다중 상속을 지원한다.추상 클래스상속을 통해 코드를 재사용하거나 공통된 기능을 제공하기 위한 기본 클래스의 역할상속 계층 구조에서 사용된다. 다중 상속이 필요하지 않은 경우 적합하다.인터페이스는 다중 상속을 지원하고 모든 메서드가 추상 메서드이며, 구현을 강제합니다. 반면에 추상 클래스는 일부 구현을 가질 수 있고, 단일 상속만 지원합니다.
JDK와 JRE
·
Programming/Java
JDKJava Developmnet Kit개발과 실행을 위한 도구대표적으로 컴파일러(javac).java -> .calss 변환하여 JVM은 바이트코드(.class)를 기계어로 변환하여 실행JREJava Runtime Environment실행만을 위한 환경대표적으로 클래스 로더필요한 .class 파일을 메모리에 로드하여 JVM이 실행할 수 있도록 하는 역할
Template Method Pattern
·
Programming/디자인 패턴
템플릿이란?템플릿 == 문자형 틀예를 들어, 색연필로 색칠할 때 색상은 바뀌어도 문자형은 유지되는 것처럼, 상위 클래스의 틀을 통해 기본적인 로직은 동일하게 유지템플릿 메서드 패턴이란?상위 클래스에서 처리의 뼈대를 결정하고 하위 클래스에서 그 구체적인 내용을 결정하는 패턴이다.구성(추상 클래스 + 구현 클래스)추상 클래스추상 클래스는 하위 클래스에서 구현할 것으로 기대하는 추상 메서드와 로직의 뼈대가 되는 템플릿 메서드로 구성된다.템플릿 메서드는 구체적인 로직의 순서를 정의한 일반 메서드로, 추상 메서드의 조합을 통해 알고리즘을 구성한다.템플릿 메서드 == 알고리즘Public abstract class AbstractDisplay {// 추상화 메서드(== 뼈대) public abstract vo..
추상 클래스
·
Programming/Java
목차1. 추상 클래스 특징2. 인터페이스와 차이점3. 추상 클래스의 목적 "추상 클래스는 공통 기능을 제공하면서 하위 클래스가 필수적으로 구현해야 할 규격을 정의하여 일관성과 다형성을 지원하는 클래스 설계 도구이다." 1. 추상 클래스 특징- 일부 메서드를 구현하지 않고 서브 클래스에서 구체화하도록 강제하는 클래스- 인스턴스화 할 수 없다- 세부 구현은 자식 클래스가 맡는다.public abstract class Animal { public String kind; public void breath(){ System.out.println("숨 쉰다."); } //추상메서드 public abstract void sound();//구체적인 구현부는 없음!} 2. 인터페이..
MapStruct & Lombok 적용
·
Programming/Spring
MapStruct - Dto를 Entity로 매핑(반대도 가능)해주는 라이브러리다. - 리플렉션이 아닌 직접 메소드를 호출하는 방식으로 동작하여 속도가 빠르다. Set up ... 11 1.3.1.Final 1.18.12 ... org.mapstruct mapstruct ${org.mapstruct.version} org.projectlombok lombok ${org.projectlombok.version} provided ... org.springframework.boot spring-boot-maven-plugin org.apache.maven.plugins maven-compiler-plugin 3.5.1 11 11 org.mapstruct mapstruct-processor ${org.mapst..
@JsonProperty, @JsonNaming
·
Programming/Spring
REST API 방식으로 서버와 클라이언트가 데이터를 통신할 때 JSON 형식을 주로 사용한다. 서버는 카멜 방식(Camel Case), 클라이언트는 스네이크 방식(Snake Case)을 사용한다. 카멜 방식 - 첫 글자는 소문자, 중간 글자들은 대문자 표기법 ex)phoneNumber 스네이크 방식 - 언더바가 포함된 표현 방식 ex) phone_number 서버와 클라이언트의 JSON 표현의 방식의 차이로 데이터의 key가 달라지는 상황이 발생한다. 이러한 문제를 @JsonProperty, @JsonNaming을 사용하여 해결할 수 있다. 예제 UserRequest package org.juhyun.kotlinspringboot.model data class UserRequest ( var name:..
변경 감지와 병합
·
Programming/JPA
준영속 엔티티란? - 영속성 컨텍스트가 더는 관리하지 않는 엔티티를 말한다. - DB에 한번 저장 되어서 식별자가 존재한다. - 임의로 만들어낸 엔티티도 기존 식별자(id)를 가지고 있으면 준영속 엔티티로 볼 수 있다. 준영속 엔티티를 수정하는 방법 2가지 - 변경 감지(Dirty Checking) 기능 사용 - 병합(merge) 사용 변경 감지 기능 사용 @Transactional void update(Item itemParam) { //itemParam: 파리미터로 넘어온 준영속 상태의 엔티티 Item findItem = em.find(Item.class, itemParam.getId()); //같은 엔티티를 조회한다. findItem.setPrice(itemParam.getPrice()); //데이..
SOLID, 객체 지향 설계 원칙
·
Programming/Java
SOLID객체 지향 설계 다섯 가지 원칙- S: Single Responsibility Principle- O: Open Closed- L: Liskov Substitution Principle- I: Interface Segregation Principle- D: Dependency Inversion PrincipleS: Single Responsibility Principle, 단일 책임 원칙- 하나의 클래스는 하나의 책임(기능)을 가져야 한다.- 책임의 캡슐화public class Car{ private Seat seat; private Heater heater; private Wheel wheel;}O: Open Closed Principle, 개방 폐쇄 원칙- 기능 추가 시, 기존..
업캐스팅, 다운캐스팅
·
Programming/Java
캐스팅이란?- 타입을 변환하는 것. 형변환- 부모와 자식 클래스 간 형변환 가능 Upcasting- 자식 클래스의 객채가 부모 클래스 타입으로 형변환 되는 것- p는 Student 객체를 가리키지만, p는 Person 타입이기 때문에 Person 멤버에만 접근 가능하다.class Person{ String name; Person(String name){ this.name = name; }}class Student extends Person{ String check; Student(String name){ super(name); }}public class Main{ public static void main(String[] args){ Student s = new Student("홍길동"); Per..