[Spring Boot] Setter vs Constructor vs Builder
·
개발/Spring Boot
Spring boot로 코딩을 하다보면 객체의 값을 변경해줘야 할때가 있다. 방법은 크게 Setter, 생성자, Builder 3가지로 나뉜다. 1. Setter (자바빈즈 패턴) 자바 개발자들은 setter를 지양하라고 한다. 그럼 왜 setter를 지양하고 새로 객체를 생성해야 하는 생성자나 Builder를 사용해야 할까.. (1) 일관성 먼저 setter를 사용하면 언제든 값을 바꿀수 있다는 말이 된다. 다시말해 값을 바꿀수 없는 불변한 객체를 만들지 못한다는 말이 된다. (2) 가독성 만약 객체의 속성이 엄청 많아서 엄청나게 많은 setter가 있다고 가정한다. 그러면 객체만다 일일히 setName, setAge, ~~~ 을 계속 해주다보면 코드가 아주 더러워지고 나중엔 빠진 set 메소드를 찾고..
[Spring Boot] Controller, Service, Repository
·
개발/Spring Boot
Controller와 Service, Repository는 각각 역할이 있다. 흐름은 위와 같다. 컨트롤러는 client와 소통을 하며 데이터를 받거나 넘겨주고 서비스에서는 비즈니스 로직만을 작성한다. 여기서 Dao가 DB와 연결하며 CRUD를 수행하는데 이를 Repository라고 보면 된다. 1. Controller 가장 큰 역할은 Client와의 소통이다. Client로 부터 받은 데이터를 Service로 넘겨주어 Service가 비즈니스 로직을 수행하도록 한다. 그리고 Service로부터 데이터를 받아 Client로 넘겨준다. @RestController public class PostsApiController { private final PostsService postsService; @Post..
[Spring Boot] DTO vs VO vs Entity
·
개발/Spring Boot
1. DTO (Data Transfer Object) DTO란 데이터 전송 객체이다. 말그대로 데이터를 전송하기 위한 객체로 사용된다. class colorDTO{ private int red; private int blue; private int green; public colorEntity(int red, int blue, int green) { this.red = red; this.blue = blue; this.green = green; } public int getRed() { return red; } public int getBlue() { return blue; } public int getGreen() { return green; } public void setRed(int red) { t..
[Spring Boot] DI 와 IoC는 무엇일까?
·
개발/Spring Boot
스프링에서는 IoC와 DI가 전부라는 말을 들었다. 도데체 IoC와 DI가 얼마나 중요하길래 그럴까 라는 생각을 했다. 1. DI (Dependency Injection) DI는 "의존성" 주입이다. 예를 들어 A는 B에 의존한다라는 말은 A는 B의 상황에 따라 바뀔수도 있다라는 말로 될수도 있다. 의존하기 때문에 B가 바뀌면 A에게도 변화가 올 수 있다는 것이다. class A{ public B makeB(){ B b = new B(); return b; } } 코드로 본다면 위와 같은 예시가 있다. A클래스 안에서 b라는 객체를 만들었다. 그런데 갑자기 B라는 클래스에서 생성자를 수정하여 매개변수가 필요하다면 컴파일 오류가 난다. 이와 같이 B의 상황이 바뀌면서 A까지 영향을 미치는 상황이 의존한다 ..
[Spring Boot] mysql 연결 삽질기
·
개발/Spring Boot
spring boot, gradle로 프로젝트 세팅을 하고 mysql을 연동하려고 했다. 그런데 mysql 과 연결하는 의존성을 추가하는 과정에서 계속 실패했다. runtimeOnly 'mysql:mysql-connector-java' 나는 위와 같이 의존성을 추가했고 구글링을 해봐도 다들 위와 같이 한다. 그러다가 jdbc의 버전을 명시해줬더니 정상적으로 연결됐다.. runtimeOnly 'mysql:mysql-connector-java:8.0.32' 근데 다른 사람들은 버전을 명시 안해줘도 잘 되는게 이상했다. 그래서 버전을 명시 안해줘도 되는 걸 찾아보다가 아래와 같은걸 발견했다. runtimeOnly 'com.mysql:mysql-connector-j' 결국 마지막 코드로 의존성을 해결했다..