멋사 Backend 40일차 🦁

신재원·2023년 6월 16일

🤓 Java

💬 String

  • 자바에서 문자열에서 int타입, int타입에서 문자열로 변경하는 방법 입니다.
  • 아스키 코드를 사용하여 타입을 변환할수 있습니다.
char num = 'A';
System.out.println((int) num); // 65
int num = 65;
System.out.println((char) num); // A
  • % 모듈 연산으로도 변환할수 있습니다.
int num = 1234;
StringBuilder output = new StringBuilder();
for (int i = 0; i < 4; i++) {
	output.append((char) (num % 10 + '0'));
	num /= 10;
}

System.out.println(output.reverse()); // 1234
  • 알고리즘 TIP
    알파벳 갯수를 셀경우 아래와 같은 배열 크기를 많이 사용합니다.
    ( a ~ z 가 26개 임으로 )
int[] arr = new int[26];

📢 Optional

  • NPE (NullPointException) 예외를 피하기 위해 Null 의 여부를 검사해야되는데, Optional 객체는 값을 감싸서 NPE 를 방지 할수록 도와줍니다.
    ( 각종 메소드를 지원 )
  • 다양한 메소드를 지원하는것을 확인할수 있으며, 서칭을 통해 사용하면 될것같습니다.
  • 대표적인 isPresent 활용
    논리값 true , false 를 반환합니다.

( 조건문을 통해 Null 값을 핸들링 할수 있습니다. )
( JPA 에서 많이 사용 한다고 합니다. )

Optional<String> optional = Optional.of("shin");
System.out.println(optional.isPresent()); // true

📗 Spring

@Entity 란?

  • 간단하게 말하여 데이터베이스 테이블을 만들어주는 어노테이션입니다.
@Getter @Setter
@Entity
@Table(name = "students")
public class StudentEntity {
    @Id // 식별자 지정
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    private Integer age;
    private String phone;
    private String email;
}
  • @Table(" ") : 데이터베이스 테이블 명을 지정 합니다.
  • @Id : 명시적으로 PK값을 지정 합니다.
  • @GeneratedValue() : DBMS따라 전략을 지정 합니다, 위의 전략은 MYSQL 전략 입니다.

엔티티 클래스에는 Setter를 지양하는 것이 좋습니다

( 추후 뒤에서 다룰 예정 )

❗❗ 엔티티 클래스를 사용자에게 노출되는 정보를 "조절" 할수 있게 DTO 클래스를 만들어 핸들링 합니다.

( DTO = Data Transefer Object )
( age 같은 민감한 정보를 제외 시킬수 있습니다)

@Setter @Getter
public class StudentDto {
    private Long id;      // entity.id
    private String name;  // entity.name
    private String phone; // entity.phone
    private String email; // entity.email

    // 정적 메소드 활용하여 DTO 클래스로 변환
    public static StudentDto fromEntity(StudentEntity studentEntity){
        StudentDto studentDto = new StudentDto();

        studentDto.setId(studentDto.getId());
        studentDto.setName(studentDto.getName());
        studentDto.setPhone(studentEntity.getPhone());
        studentDto.setEmail(studentDto.getEmail());

        return studentDto;
    }
}

정적 메소드 패턴

엔티티 클래스를 DTO 클래스로 변환하는 방법이 여러가지가 있습니다,
위 코드와 같이 static (정적) 메소드를 활용하여 변환하는 패턴을
"정적 메소드 패턴 " 이라고 합니다.

  • 엔티티 ➡ DTO 클래스 변환
    ( 반복 되는 로직을 계속 작성 해야함 )

    👀 사용 이유 ?

변환이 필요하는 작업마다 위 로직을 계속 작성할수 있지만,
정적 메소드 패턴을 사용함으로써, 성능상의 차이는 없지만,
유지보수 측면에서 월등히 좋습니다.

Spring Data Jpa를 사용하려면, DTO 클래스를 다시 엔티티로 변환해야 되는 경우도 있습니다.

Spring Data Jpa가 제공하는 대표적인 CRUD 메소드는 엔티티를 파라미터로 사용합니다.
repository.save(Entity);
repository.delete(Entity);

자원 회수

repository.findById(Id);
// update 로직 TODO

자원을 회수 할때는 PK를 조회하여 회수합니다.
파라미터로 넘어온 pk가 아니라 회수 (찾은)후 update 한다.
( PK 값을 통해 제대로된 Update를 할수 있습니다 )

Reference

0개의 댓글