JVM/Java

[Java] Object 타입에 상관없이 VO 데이터 가져오기

헹창 2020. 1. 17.
반응형

[Java] Object 타입에 상관없이 VO 데이터 가져오기

 

1. 전혀 다른 두 개의 VO

 

- 참고로 @Data는 Lombok 라이브러리를 사용하기 때문에 쓴 것이니, Lombok이 따로 설치되지 않은 경우에는 getter, setter, toString 메서드를 오버라이딩하길 바란다.

 

@Data
public class Grade {
	private String subject;
	private String name;
	private int grade;
}

 

@Data
public class Favorite {
	private String color;
	private String animal;
	private int number;
}

 

 

- 예시) 두 VO의 데이터는 다음과 같다

 

Grade grade = new Grade();
grade.setSubject("수학");
grade.setName("haenny");
grade.setGrade(95);

Favorite fav = new Favorite();
fav.setColor("blue");
fav.setAnimal("lion");
fav.setNumber(3);

 

 

 

2. getVOvalue 메서드의 유동적인 파라메터 ?

 

- 파라메터 타입 Grade 인 경우

public void getVOvalue(Grade vo) {
	System.out.println("subject : " + vo.getSubject());
	System.out.println("name : " + vo.getName());
	System.out.println("grade : " + vo.getGrade());
}

// output
// subject : 수학
// name : haenny
// grade : 95

 

- 파라메터 타입 Favorite 인 경우

public void getVOvalue(Favorite vo) {
	System.out.println("color : " + vo.getColor());
	System.out.println("animal : " + vo.getAnimal());
	System.out.println("number : " + vo.getNumber());
}

// output
// color : blue
// animal : lion
// number : 3

 

getVOvalue는 파라메터로 넘어온 VO 객체의 컬럼명과 값을 출력하는 메서드이다.

 

같은 기능을 하는 메서드인데, 어떤 파라메터가 넘어오냐에 따라 위 처럼 코드를 구현해야하는가?

 

 

 

으음~

 

 

 

 

 

해결. Object 타입에 상관없이 VO 데이터를 가져오자

 

- 어떤 Object를 넘겨도 해당 컬럼명과 컬럼값을 출력해준다.

 

public void getVOvalue(Object vo) {
	for(Field field : vo.getClass().getDeclaredFields()){
		field.setAccessible(true);
		Object value = field.get(vo);
		System.out.println(field.getName()+" : "+value);
	}
}

 

 

728x90
반응형

댓글

추천 글