TIL. json 과 builder 패턴

hyuko·2023년 1월 22일
0

Java

목록 보기
25/26

Json 이란?


json은 속성 과 값의 쌍, 배열 자료형 또는 기타 모든 시리얼화 가능한 값
으로 이루어진 데이터 오브젝트를 전달하기 위해 인간이 읽을 수 있는 텍스트를 사용하는 개방형 표준 포맷이다

json 형식

	{
    	"key" : "value",
        "key" : "value",
        "key" : "value"
    }
  • json 형식으로는 key 와 value 값으로 표현이 된다.
Json 활용방식
  • 위의 정의에서 말을 하였듯이, 배열 자료형이나 기타 모든 시리얼화 가능한 값은 모두 들어갈 수 있다.

  • java 에서는 데이터를 움직이기 위한 방식으로 map 으로 되어있는 데이터를
    json 으로 변환하거나 json 으로 되어 있는 데이터를 java 로 데리고 오기 위해 json을
    map 으로 변환하는 식으로 쓰인다.
Map<String, Object> map = new HashMap<String, Object>();
	
    map.put("a", "test1");
    map.put("b", 10.5);
    map.put("c", new int[] {10, 20 ,30 ,40, 50});
    
    System.out.println(map);
    
    Gson gson = new GsonBuilder().setPrettyPrinting().create();
    String mapJson = gson.toJson(map);
    
    System.out.println(mapJson);
  • 콘솔 출력 화면

Builder 패턴

Builder 패턴을 쓰는 이유

빌더패턴이란? 우리가 객체를 생성하는 방법으로는 생성자를 이용해서 생성하거나 setter를 통한
생성 정도를 배웠다 하지만 빌더 패턴이라는 것을 써야하는 이유로는 예를들어 객체에 변수가 5가지가 있다고하자 하지만 우리가 쓸 변수는 당장에 3개만 쓰고 싶은 것이다. 그럴때 lombok을 적극적으로 활용 못하고
따로 생성자를 만들어주거나 빈값을 받아 바꾸는 식으로 가야할 것이다.

이때 빌더패턴을 이용해서 유연하게 내가 생성을 하고 싶은 변수들을 직접 지정해서 생성을 할 수가 있다.

  1. 첫째로 위에서 말한 것과 같이 필요한 데이터만 설정할 수 있다.
  2. 그로 인해 유연성이 확보된다.
  3. 코드가 매우 짧아짐에 따라 가독성이 좋아진다.
  4. 변경 가능성을 최소화 할 수 있다.
  • 빌더 패턴을 직접 구현하면서 구조를 알아보도록 하자.

User 라는 객체를 만들고 그 곳에 담긴 정보는 username, password, name, email이다.


@Data
public class User {

	private String username;
    private String password;
    private String name;
    private String email;
    
    
    public static UserBuilder builder() {
    	return new UserBuilder();
    }
    
    // 클래스안에 클래스를 생성한다.
    @Data
    public static class UserBuilder {
    	private String username;
        private String password;
        private String name;
        private String email;
        
        
        public UserBuilder username(String username) {
        	this.username = username;
            return this;
        }
        
        public UserBuilder password(String password) {
        	this.password = password;
            return this;
        }
        
        public UserBuilder name(String name) {
        	this.name = name;
            return this;
        }
        
        public UserBuilder email(String email) {
        	this.email = email;
            return this;
        }
        
        public User build() {
        	return new User(username, password, name, email);
        }
        
    }
}
위의 코드를 해석해보자면, 클래스 안에 클래스를 생성을 한다.
그 클래스는 클래스안에서 클래스를 쓰기위해 Data 어노테이션을 걸어주고
User와 똑같은 변수를 가지고 있는 UserBuilder 클래스를 만들고
변수마다 생성자를 생성해준다. 그후 마지막에 build() 메소드를 만들고
User 객체를 생성해서 return해준다.
  • 메인에 쓰자면 간단히 나타낼 수 있다.
public class UserMain{

	public static void main(String[] args){
    
    	User user = User.builder()
        			.username("test1")
    				.name("john")
                    .password("1234")
                    .build();
    }
}

위의 방식대로 생성되고 값을 집어넣을 수 있고 , 순서에 얽매이지 않으며 email은 있지도 않지만
아무 오류 없이 값은 잘 생성되고 들어간다.

  • lombok을 쓰면 @Builder 만 붙이게 되면 위에 있는 코드들을 다 줄여줄 수 있다.
profile
백엔드 개발자 준비중

0개의 댓글