새소식

인기 검색어

JAVA

Map, VO(Value Object)

  • -
Map
  • key와 Value의 쌍으로 값을 저장하는 컬렉션
  • 대응관계를 쉽게 표현할 수 있게 해주는 자료형
  • 보통 select를 사용하는 경우에 2개 이상의 테이블을 조인하여 조회하는 경우가 많아 VO로는 표현이 복잡하여 Map을 사용하며 Map의 경우는 변수명을 바꿔가면서 계속적으로 put 할 수가있다.
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("StartNum", 1)
map.put("EndNum", 4)

jdbc.queryForObject(쿼리문, map, 클래스(또는 rowMapper));

 

단점
  • Map은 Key 또는 value가 null이면  Map의 해당 필드 자체를 Key로 가져가지 않는다 따라서, 쿼리 수행 시 key 값 자체가 존재하지 않아 오류가 발생한다.
  • 여러 타입을 담아야 하기에 Map은 Value 선언 시 Object로 할 수밖에 없고 이 또한 Object는 최상위 타입이기 때문에 type이 매치되지 않는 경우가 발생해도 실제로 돌려보지 않고는 알 수 가 없다.
  • Object로 선언하여 모든 타입을 담기 때문에 부가적인 casting 작업이 발생 할 수 있다.

 

 

 

 

VO
  • 데이터 그 자체로 의미 있는 것을 담고 있는 객체
  • DTO와 같은 개념이나 차이점은 Read-Only 속성 개체
  • 간단한 독립체(Entity)를 의미하는 작은 객체를 의미한다.
  • 비즈니스 로직상 데이터가 명확해야 하는 경우
  • 특정값의 key 또는 value가 null인 경우 VO클래스 내에 선언된 타입으로 초기화 수행되어 쿼리 수행시 null로 인한 오류가 없음.
  • 멤버 변수에 대한 구체적인 타입을 선언하기 때문에 타입이 매치되지 않는 경우 컴파일 에러가 발생하여 바로 알 수 있다.
  • 반드시 값이 필요한 변수에 대해 생성자 파라미터로 필요한 값을 넣을 수 있어, 이 값이 없는 경우 컴파일 에러가 발생한다.
public class PageVO {
	private Integer StartNum;
 	private Integer EndNum;
}

PageVO vo = new PageVO();
vo.setStartNum(1);
vo.setEndNum(4);

 

단점
  • VO는 지정한 변수에만 set 할 수가있다.
  • Map에 비해 소스가 많아진다.
  • getter, setter 메소드를 일일이 작성해주어야 하는 번거로움이  있다.(현재는 Lombock을 사용하여 어노테이션 형태(@Getter, @Setter)로 조금 더 간편하게 사용할 수 있다.)

 

 

DTO
  • 계층 간 데이터 교환을 위한 객체
  • 일반적인 DTO는 로직을 가지고 있지 않고 순수한 데이터 객체이며 속성과 속성에 접근하기 위한 getter, setter 메서드로만 구성되는 POJO

 

 

※ POJO란?

더보기
Plain Old Java Object
POJO는 말 그대로 해석을 하면 오래된 방식의 간단한 자바 오브젝트라는 말로서 Java EE 등의 중량 프레임워크들을 사용하게 되면서 해당 프레임워크에 종속된 "무거운" 객체를 만들게 된 것에 반발해서 사용되게 된 용어이다.
이 POJO라는 개념이 등장하게 된 계기로는 자바코드가 특정 ‘기술’과 환경에 종속되어 의존하게 된 자바 코드는 가독성이 떨어져 유지보수가 어렵고 확장성이 매우 떨어지는 단점이 있었고 이는 객체지향 언어인 자바가 객체지향의 장점들을 잃어버리게 되는 것이기에 POJO가 등장하게 되었다.

POJO의 간단한 예제로는
public class page {
    private String pageName;
    private int startNum;
    
    public String getPageName() {
    	return startNum;
    }
    public String getStartNum() {
    	return startNum;
    }
    public void setPageName(String pageName) {
    	this.pageName = pageName;
    }
    public void setStartNum(int startNum) {
    	this.startNum = startNum;
    }
}​

 

이처럼 Getter와 Setter로 구성된 가장 순수한 형태의 기본 클래스 또는, 가장 기본적인 형태의 java객체를 POJO라고 한다.

 

 

 

 

 로직이란?

더보기
일반적으로 로직이라는 것은 어떤 프로그램을 만들 때의 논리적인 흐름을 말한다.

예를 들어 프로그램이라는건 크게 입력과 처리, 출력단계로 나눌 수 있을텐데 이 단계가 진행되는 사이에 많은 로직, 즉 논리적인 흐름들이 포함이 된다. 가령 숫자를 입력받아서 1에서 9까지 곱한 결과를 나타내는 프로그램이라 한다면 입력을 받고, 그 입력을 넘겨서 1부터 9까지 곱해주고, 그 값을 출력해주는 일련의 과정들을 로직이라 부를 수 있고 좀 더 구분해서 비즈니스 로직으로 세분화하기도 한다.

 이렇듯 흔히 개발자들이 로직이 충돌한다는 말을 사용하는데 이 로직이 충돌한다는건 이런 논리적 흐름이 깨진다고 볼 수 있을 것이다.

 예를 들어 위에서 1부터 9까지 곱하는 결과를 가져오는 프로그램인데, 추가로 입력값을 더 받는다던지 하면 원래 프로그램의 논리적 흐름과 충돌이 될 것이다.
입력값을 하나만 받고 그 값에 1부터 9까지 곱해서 결과를 출력해주는 것인데, 입력값이 하나 더 늘어났으니 전체 흐름이 바뀔 수 있는 것이다.
 그리고 이런 로직을 보다 명확히 보여주고 코드를 보다 간결하게 해주는 것이 동적타이핑(Dynamic typing) 언어이다.

 

동적타이핑(Dynamic typing)이란?

더보기
동적타이핑은 코드를 작성하는데 있어서 컴퓨터적 구조를 생략한다.
 따라서 변수를 지정할 때 해당 변수의 데이터 타입 등을 명시하지 않아도 컴퓨터가 알아서 해석하도록 냅둔다.
 예를 들어 a = 15 라는 식으로 변수를 지정할 때 a가 숫자라고 명시 하지 않더라도 컴퓨터는 이를 스스로 숫자라 해석한다.
이러한 방식은 코드를 보다 간결하게 해주며 코드의 로직을 보다 명확히 보여줄 수 있지만,
데이터 타입이 뭔지 파악하는 것을 컴퓨터에게 맡기기 때문에 그 만큼 실행속도가 느려진다는 단점이 있지만
처음 프로그래밍을 학습하는 사람에게 적합한 언어이며 속도를 중요시하는 작업에선 사용하기 부적합하지만 작고 단순한 프로젝트를 하기엔 적합하다.

동적 타이핑을 사용하는 언어 - 파이썬, 루비, php 등..

'JAVA' 카테고리의 다른 글

Map  (0) 2022.10.18
JavaBean  (0) 2022.10.17
List로 선언해야하는 이유  (0) 2022.10.14
향상된 for 문  (2) 2022.09.29
[JAVA] 문자열 자르기 (Substring / Split)  (0) 2022.09.27
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.