44일: design pattern, VO vs DTO, 싱글톤(Singleton) 패턴, final, overload, override, SOLID

Jiwontwopunch·2022년 1월 13일
0

국비기록

목록 보기
44/121
post-thumbnail

2022.01.13.Thur.

✍ 복습

design pattern

어떤 문제에 어떻게 대처해라.

VO vs DTO

  • VO(Value Object) : DTO와 동일한 개념이나 차이점은 read only 속성을 가진다. 간단한 독립체(Entity)를 의미하는 작은 객체. 관계데이터베이스의 레코드에 대응되는 자바클래스이다.
  • DTO(Data Transfer Object) : 전송되는 데이터의 컨테이너이다. VO와 비교를 하여 보면 DTO는 같은 시스템에서 사용되는 것이 아닌 다른 시스템으로 전달하는 작업을 처리하는 객체이다.

서버 측 : Database Column Data -> DTO -> API(JSON or XML) -> Client

클라이언트 측 : Server -> API(JSON or XML) -> DTO -> View or Local Database System

정리하자면,
VO : 사용 되는 값이 객체로 표현 되며, 값 변경이 없는 경우를 말한다.
DTO : 데이터의 전송을 위한 객체이며, 비즈니스 로직까지 담아서 사용하기도 한다.
출처: https://swk3169.tistory.com/292

싱글톤(Singleton) 패턴

객체의 인스턴스가 오직 1개만 생성되는 패턴을 의미한다. 싱글톤 패턴을 구현하는 방법 중에 가장 안전한 것은 객체를 미리 생성해두고 가져오는 방법이다.

  • 장점 : 최초 한번의 new 연산자를 통해서 고정된 메모리 영역을 사용하기 때문에 추후 해당 객체에 접근할 때 메모리 낭비를 방지할 수 있다. 다른 클래스 간에 데이터 공유가 쉽다.
  • 단점 : 싱글톤 패턴을 구현하는 코드 자체가 많이 필요하다. 멀티스레딩 환경에서 발생할 수 있는 동시성 문제 해결을 위해 syncronized 키워드를 사용해야 한다. 테스트하기 어렵다. → 싱글톤 패턴은 유연성이 많이 떨어지는 패턴
  • 보완 : 스프링 컨테이너 같은 프레임워크의 도움을 받으면 싱글톤 패턴의 문제점들을 보완하면서 장점의 혜택을 누릴 수 있다. 실제로 스프링 빈은 컨테이너의 도움을 받아 싱글톤 스콥으로 관리되고 있다.

출처: https://tecoble.techcourse.co.kr/post/2020-11-07-singleton/

package com.icia.example5;

import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;

@AllArgsConstructor
class Saram {
	int height;
}

class SaramService {
	// 1. 자신의 정적 필드를 가진다
	private static SaramService service = new SaramService();
	
	// 2. 생성자는 private - 외부에서 객체 생성을 금지
	private SaramService() {
	}
	
	// 3. 필드를 빌려주는 메소드 추가
	public static SaramService getInstance() {
		return service;
	}
	
	// 적정 체중(키-100)을 계산
	public void printWeight(Saram saram) {
		System.out.println(saram.height-100);
	}
}

public class singletonTest3 {
	public static void main(String[] args) {
		Saram s1 = new Saram(175);
		Saram s2 = new Saram(180);
		SaramService service = SaramService.getInstance();
		service.printWeight(s2);
	}
}

getInstance() : 최초에 할당된 하나의 메모리를 계속 쓰는 방식. 필드를 빌려주는 메소드 추가,,

final

overload, override, SOLID

0개의 댓글