[오늘의 배움] 메서드안에서도 코드를 잘 짜야하는 이유 --^

코린이서현이·2024년 6월 18일
0

오류해결👍

목록 보기
11/12
post-thumbnail

06-18

왜 코드를 잘 짜라고 하는지 알았다.


내 코드

@Service
public class JoinService {

    private final UserRepository userRepository;
    private final BCryptPasswordEncoder bCryptPasswordEncoder;

    public JoinService(UserRepository userRepository, BCryptPasswordEncoder bCryptPasswordEncoder) {
        this.userRepository = userRepository;
        this.bCryptPasswordEncoder = bCryptPasswordEncoder;
    }

    public void joinProcess(JoinDto joinDto) {
        String username = joinDto.getUsername();

        if (userRepository.existsAllByUsername(username)) {
            //존재하는 경우
            return;
        }
        UserEntity user = new UserEntity();
        String password = user.getPassword();
        user.setUsername(username);
        user.setPassword(bCryptPasswordEncoder.encode(password));
        user.setRole("ROLE_ADMIN");

        System.out.println("user = " + user);
        userRepository.save(user);

위는 내가 짠 코드다.

내 문제점

내 눈에는 크게 문제가 있어보이지도 않고
user set부분이 길다는 거 빼고는 괜찮다고 생각했다.
그러나 위의 코드는 두가지의 문제를 가진다.

1. 명확하지 않은 이름

그러나 명확하지 않은 이름 때문에 password를 가져오는 부분에서 오류가 났다.
파라미터로 받은 joinDto에서 passWord를 가져왔기 때문이다.

2. 적절하지 못한 위치

또한 joinDto에서 값을 가져오는 지점이 UserEntity 선언부와 값 설정 부분에 위치해 불명확하다.
if문 뒤에 선언한 이유는 Password 변수 사용이 확실한 시점에 선언해, 메모리를 절약하고 싶었다.

그러나 이런 전형적이지않은..위치의 코드로 오는 예상치 못한 오류, 낮은 코드의 가독성을 생각하면 메모리를 더 쓰는게 훨씬 났다는 결론을 냈다. (또한 이정도의 메모리는 무시해도 될 정도...?)

내 결론

또한 이런 코드의 가장 큰 문제점은 시간이 지나서 보거나, 타인이 코드를 읽을 때 당연히 값을 설정하는 내용일거라고 짐작하게 될 것이라는거다...ㅜㅜ

코드는 나만 쓰는 것이 아니라, 미래의 나와 타인이 함께 쓰는 것이므로 이해하기 좋은 코드를 항상 생각하자는 결론을 냈다.

결국 내 문제점은 명확하지 않은 변수명과, joinDto에서 값을 꺼내오는 지점이 적절하지 않다는 것이다.

고친 코드

package com.jwt.jwtstudy_youtube.service;

import com.jwt.jwtstudy_youtube.dto.JoinDto;
import com.jwt.jwtstudy_youtube.entity.UserEntity;
import com.jwt.jwtstudy_youtube.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
public class JoinService {

    private final UserRepository userRepository;
    private final BCryptPasswordEncoder bCryptPasswordEncoder;

    public JoinService(UserRepository userRepository, BCryptPasswordEncoder bCryptPasswordEncoder) {
        this.userRepository = userRepository;
        this.bCryptPasswordEncoder = bCryptPasswordEncoder;
    }

    @Transactional
    public void joinProcess(JoinDto joinDto) {
        String username = joinDto.getUsername();
        String rowPassword = joinDto.getPassword();

        if (userRepository.existsByUsername(username)) {
            //존재하는 경우
            return;
        }

        UserEntity user = new UserEntity();

        user.setUsername(username);
        user.setPassword(bCryptPasswordEncoder.encode(rowPassword));
        user.setRole("ROLE_ADMIN");

        userRepository.save(user);

    }
}
profile
24년도까지 프로젝트 두개를 마치고 25년에는 개발 팀장을 할 수 있는 실력이 되자!

0개의 댓글