- 값을 가지고 있는 객체 (BEAN, VO, DTO와 같은 말)
private
하기 때문에 외부에서 직접 접근하는 것이 불가능set + 필드명
의 메소드명을 가짐this
가 사용package ex01_setter;
public class User {
private int userNo;
private String id;
private String email;
public int getUserNo() {
return userNo;
}
public void setUserNo(int userNo) {
this.userNo = userNo;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@Override
public String toString() {
return "User [userNo=" + userNo + ", id=" + id + ", email=" + email + "]";
}
}
package ex01_setter;
public class Main {
public static void main(String[] args) {
// Bean - 값을 가지고 있는 객체 (BEAN, VO, DTO와 같은 말)
User user = new User();
user.setUserNo(1);
user.setId("admin");
user.setEmail("admin@naver.com");
System.out.println(user);
}
}
반환값
User [userNo=1, id=admin, email=admin@naver.com]
package ex02_constructor;
public class User {
private int userNo;
private String id;
private String email;
public User(int userNo, String id, String email) {
super();
this.userNo = userNo;
this.id = id;
this.email = email;
}
@Override
public String toString() {
return "User [userNo=" + userNo + ", id=" + id + ", email=" + email + "]";
}
}
package ex02_constructor;
public class Main {
public static void main(String[] args) {
User user = new User(1, "admin", "admin@naver.com");
System.out.println(user);
}
}
반환값
User [userNo=1, id=admin, email=admin@naver.com]
package ex03_singleton;
public class User {
// static 필드
// 객체 생성 이전에 메모리에 미리 만들어 두는 필드
private static User user = new User();
private User() { // User 객체 생성은 User 내부에서만 가능하다.
}
// static 메소드 (클래스 메소드)
// 클래스가 생성될 때 함께 생성되는 메소드
// 객체 생성 이전에 만들어지기 때문에 객체로 접근하지 않는다.
// 클래스 이름으로 접근한다.
// User user = User.getInstance(); 오직 이 방법으로만 가져다 사용할 수 있다.
// 외부에서 new User 만들지 못한다.
public static User getInstance() { // User 타입의 user를 받겠다.
return user;
}
}
package ex03_singleton;
public class Main {
public static void main(String[] args) {
// singleton 객체는 하나만 생성된다.
// new User를 막는 방법
// 아래 둘은 같은 객체이다.
User user1 = User.getInstance();
System.out.println(user1);
User user2 = User.getInstance();
System.out.println(user2);
// User user = new User(); 외부에서는 새로운 객체를 생성할 수 없다.
}
}
반환값
ex03_singleton.User@26f0a63f
ex03_singleton.User@26f0a63f
장점
- 필요한 데이터만 설정 가능
- 유연성 확보
- 가독성
- 변경 가능성 최소화
package ex04_builder;
public class User {
// 필드 (Builder 객체가 가진 값을 받아 옴)
private int userNo;
private String id;
private String email;
// Builder 클래스의 build() 메소드가 호출하는 생성자
public User(Builder builder) {
this.userNo = builder.userNo;
this.id = builder.id;
this.email = builder.email;
}
// Builder 반환 메소드
public static Builder builder() {
return new Builder();
}
// User 클래스 내부에 Builder 클래스 생성
// User 클래스를 이용해서 호출하기 위해 static 처리
public static class Builder{
// 내부 필드 (여기에 값을 전달 받아서 User의 필드로 보내는 원리)
private int userNo;
private String id;
private String email;
// userNo() 메소드
public Builder userNo(int userNo) {
this.userNo = userNo;
return this;
}
// id() 메소드
public Builder id(String id) {
this.id = id;
return this;
}
// email() 메소드
public Builder email(String email) {
this.email = email;
return this;
}
// build() 메소드
public User build() {
return new User(this); // this는 Builder 객체(userNo, id, email을 가지고 있는 객체)를 의미
}
} // class Builder
@Override
public String toString() {
return "User [userNo=" + userNo + ", id=" + id + ", email=" + email + "]";
} // 정보 확인용
}
package ex04_builder;
public class Main {
public static void main(String[] args) {
User user = User.builder()
.userNo(1)
.id("admin")
.email("admin@naver.com")
.build();
System.out.println(user);
}
}
반환값
User [userNo=1, id=admin, email=admin@naver.com]
편집기와 빌드 도구에 자동으로 연결되어 자바를 향상시켜주는 자바 라이브러리
주요 Annotation
사용 방법
package ex05_lombok;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
@ToString
public class User {
private int userNo;
private String id;
private String email;
}
package ex05_lombok;
public class Main {
public static void main(String[] args) {
// 방법 1
User user1 = new User();
user1.setUserNo(1);
user1.setId("admin");
user1.setEmail("admin@naver.com");
System.out.println(user1);
// 방법 2
User user2 = new User(1, "admin", "admin@naver.com");
System.out.println(user2);
// 방법 3
User user3 = User.builder()
.userNo(1)
.id("admin")
.email("admin@naver.com")
.build();
System.out.println(user3);
}
}
반환값
User(userNo=1, id=admin, email=admin@naver.com)
User(userNo=1, id=admin, email=admin@naver.com)
User(userNo=1, id=admin, email=admin@naver.com)