json은 속성 과 값의 쌍, 배열 자료형 또는 기타 모든 시리얼화 가능한 값
으로 이루어진 데이터 오브젝트를 전달하기 위해 인간이 읽을 수 있는 텍스트를 사용하는 개방형 표준 포맷이다
json 형식
{
"key" : "value",
"key" : "value",
"key" : "value"
}
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);
빌더패턴이란? 우리가 객체를 생성하는 방법으로는 생성자를 이용해서 생성하거나 setter를 통한
생성 정도를 배웠다 하지만 빌더 패턴이라는 것을 써야하는 이유로는 예를들어 객체에 변수가 5가지가 있다고하자 하지만 우리가 쓸 변수는 당장에 3개만 쓰고 싶은 것이다. 그럴때 lombok을 적극적으로 활용 못하고
따로 생성자를 만들어주거나 빈값을 받아 바꾸는 식으로 가야할 것이다.
이때 빌더패턴을 이용해서 유연하게 내가 생성을 하고 싶은 변수들을 직접 지정해서 생성을 할 수가 있다.
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은 있지도 않지만
아무 오류 없이 값은 잘 생성되고 들어간다.