여러개의 객체가 만들어지면 안될때 사용, 객체는 하나만 생성된다.
User 클래스
public class User{ // static 필드 // 객체 생성 이전에 메모리에 미리 만들어 두는 필드 private static User user = new User(); private User() { // User 객체 생성은 User 내부에서만 가능하다. } // static 메소드 ( 클래스 메소드 ) // 클래스가 생성될 때 함께 생성되는 메소드 // 객체 생성 이전에 만들어지기 때문에 객체로 접근하지 않는다. // 클래스 이름으로 접근한다. // User user = User.getInstance(); public static User getInstance(){ return user; } }
Main 클래스
public class Main { public static void main(String[] args) { // singleton 객체는 하나만 생성된다. User user1 = User.getInstance(); System.out.println(user1); User user2 = User.getInstance(); System.out.println(user2); // User user = new User(); 외부에서는 새로운 객체를 생성할 수 없음 } }
결과
클래스 내부에 클래스 만들기
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 + "]"; } }
Main 클래스
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 클래스
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; }
Main 클래스
public class Main { public static void main(String[] args) User user1 = new User(); user1.setUserNo(1); user1.setId("admin"); user1.setEmail("admin@naver.com"); System.out.println(user1); User user2 = new User(1, "admin", "admin@naver.com"); System.out.println(user2); User user3 = User.builder() .userNo(1) .id("admin") .email("admin@naver.com") .build(); System.out.println(user3); } }