본문 바로가기

Java

VO (Value Object)

1. read-Only 특징(사용하는 도중에 변경 불가능하며 오직 읽기만 가능)을 가집니다.

2. DTO와 유사하지만 DTO는 setter를 가지고 있어 값이 변할 수 있습니다.

 

 

서로 다른 이름을 갖는 VO 인스턴스라도 모든 속성 값이 같다면 두 인스턴스는 같은 객체인 것이 핵심이다.

 

특정 값 자체를 표현하기 때문에 불변성 보장을 위해 생성자를 사용해야 한다.

 

예시)

//생성자를 이용한 불변 객체
public class CarVO {

    private final String color;

    public CarVO(String color) {
        this.color = color;
    }
    
}

그렇기 때문에 두 객체의 주솟값이 다르다.

이 때문에 값 만 비교하기 위해서 equals()와 hashCode()를 오버 라이딩(재정의) 해주어야 한다. 

 

VO는 값 그 자체를 나타내기 때문에 setter 같은 성격의 변조 가능성이 있는 메서드가 존재하면 안되며,

두 객체의 '필드 값이 같다면' 모두 같은 각체로 만드는 것이 핵심이다.

 

예시2)

package Model;

public class proverb_VO {

	public MinigameQuestion_Model[] es;
	public MinigameQuestion_Model[] nm;
	public MinigameQuestion_Model[] hd;

	public proverb_VO() {//vo : 값을 객체에 저장 읽기만 가능
		this.es = new MinigameQuestion_Model[3];
		this.nm = new MinigameQuestion_Model[3];
		this.hd = new MinigameQuestion_Model[3];

		es[0] = new MinigameQuestion_Model("금강산도 (  ?  )", "식후경");
		es[1] = new MinigameQuestion_Model("열 번 찍어 안 넘어가는 ( ? ) 없다", "나무");
		es[2] = new MinigameQuestion_Model("꿩 대신 (?)", "닭");

		nm[0] = new MinigameQuestion_Model("지렁이도 밝으면 ( ? ) 한다", "꿈틀");
		nm[1] = new MinigameQuestion_Model("닭 잡아먹고 ( ? ) 내민다", "오리발");
		nm[2] = new MinigameQuestion_Model("낫 놓고 ( ? )도 모른다", "기역");

		hd[0] = new MinigameQuestion_Model("개구리 ( ? ) 적 생각 못 한다.", "올챙이");
		hd[1] = new MinigameQuestion_Model("다 된 죽에 ( ? ) 빠트린다", "코");
		hd[2] = new MinigameQuestion_Model("첫술에 ( ? )", "배부를까");
}

 

'Java' 카테고리의 다른 글

jdbc(Java DataBase Connectivity )기본구조  (0) 2023.10.01
전역변수 vs 지역변수  (0) 2023.10.01
DTO (Data Transfer Object)  (0) 2023.09.29
DAO  (0) 2023.09.29
오버로딩과 오버라이딩의 차이  (0) 2023.09.20