코드스쿼드 7일차
핵심 강의 내용
- DTO
- VO
- Java Bean
- Equals, hashcode, toString
DTO
DTO 는 Data Transfer Object 의 약어로, 데이터를 전달하기 위한 목적을 가진 객체를 말한다.
DTO를 처음 배웠을 때 나는 몇가지 의문점이 들었는데, 예를들면 자동차 경주게임 예제에서 컨트롤러인 RacingGame 클래스가 자동차 목록을 가지고 있으니까 그냥 get 메서드를 사용해서 resultView 클래스로 전달하면 되는거 아니야? 굳이 이걸 왜쓰지? 라고 생각했었다.
하지만, Car 클래스에 상태값을 바꾸는 코드를 넣어주면
실수로 누군가가 Car 를 호출해서 상태값을 바꾸는 치명적인 오류를 범할 수 있다.
그래서 상태값을 바꾸는 기능 없이 오로지 출력만을 위한 것들을 DTO 클래스로 만들어서 사용하면 위와같은 버그발생을 줄일 수 있다는 장점이 있다.
상태값을 바꾸는 기능이 없기 때문에 DTO 클래스에서는 set 과 get 메서드를 사용해도 괞찮다.
DTO 에 대해서는 Pobi의 Slipp 커뮤니티 에서도 다양한 의견을 찾아볼 수 있다.
JAVA BEAN
자바빈이란 JavaBean 규격서에 따라서 작성된 자바 클래스를 말한다.
자바빈의 대표적인 설계 규약은 다음과 같다.
- 생성자는 기본 생성자를 반드시 포함해서 존재해야 한다
- 멤버변수마다 별도의 get/set 메소드가 존재해야 한다
- get메서드는 매개변수가 존재하지 않아야 한다
- set메서드는 반드시 하나 이상의 매개변수가 존재해야 한다
- 멤버변수의 접근제어자는 private
- 각 set / get 메서드의 접근제어자는 public
- 클래스의 접근제어자는 public
- setName(){} / getNumber(){} - 자바빈 규약의 컨벤션을 따라서 만들어야함
- set, get 메서드는 Dto 메서드임
Equals, hashcode, toString
자바 공부를 하면 반드시 알아야 할 3개의 메서드.
면접에서도 많이 물어봄
자바 객체를 호출하면 내부적으로 toString 메서드를 호출한다.
값은 같으나 인스턴스는 다른 객체의 값만 따져서 비교하고 싶을때 : Equals 메소드 사용
Equals 메소드를 구현해주지 않으면 값이 같은 다른 인스턴스는 false를 반환함
Contains 를 쓸때도 값이 같지만 인스턴스가 다르면 Equals 메서드를 만들어야 함
Hashset(){} 도 마찬가지로 Eqauls를 써야함
VO
Value Object 의 약어. 말 그대로 값을 위해서 쓰는 객체이다.
어떤 책에서는 DTO 와 VO 가 동일하다고 설명하는 책이 있는데 이는 잘못된 정보이다.
VO는 DTO와 유사하나, DTO와 달리 read only 속성을 가진다.
수업이 끝나고 DTO 와 VO 를 실습중인 코드에 적용시켜보려고 했는데 생각보다 잘 되지 않았다.
코드가 작아서 그런지 몰라도 DTO와 VO의 장점이 크게 와닿지 않았다. 오히려 안해도 될 일을 추가로 하는느낌이 들었다..
아직 초짜라 그런지는 몰라도 더 공부해야겠다.
'코딩 교육 기관 > 코드스쿼드 백엔드 레벨2' 카테고리의 다른 글
2018.10.08 (월) (0) | 2018.11.11 |
---|---|
2018.10.04 (목) (4) | 2018.10.25 |
2018.09.24 (월) (1) | 2018.10.22 |
2018.09.20 (목) (0) | 2018.10.22 |
2018.09.17 (월) (5) | 2018.10.17 |
댓글