Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- ESG
- 쿠버네티스
- 공헌감
- 도파민형 인간
- HTML
- try width resources
- colllection
- try-with-resources
- 월칙
- 뉴 컨피던스
- 수부타이
- 이펙티브 자바
- docker
- Container
- node
- kubernetes
- 칭기즈칸의 위대한 장군 수부타이
- 히든 스토리
- apache kafka
- sentry
- 모두가 기다리는 사람
- Infresh
- 비메모리 자원
- java
- 참조 계수
- 부자의그릇
- 아웃풋법칙
- 레퍼런스 복사
- 과제의 분리
- CSS
Archives
- Today
- Total
Hi
정적 팩토리 메소드, 빌더 패턴 본문
package io.thethelab;
// 상속
// 다형성
// 오버라이딩
// 인터페이스
class Color {
private int red;
private int green;
private int blue;
// RED, GREEN, BLUE, BLACK, CYAN
private Color(int red, int green, int blue) {
this.red = red;
this.green = green;
this.blue = blue;
}
static Color rgb(int red, int green, int blue) {
return new Color(red, green, blue);
}
static Color hsb(int hue, int saturation, int brightness) {
int red = 0;
int green = 0;
int blue = 0;
return new Color(red, green, blue);
}
/*
Color(int red) {}
Color(int green) {}
*/
// instance method: 객체를 생성해서 사용하는 것
// static(class) method: 객체를 생성하지 않고 사용하는 것
private static final Color RED = new Color(255, 0, 0);
static Color red() {
return RED;
}
}
// 정적 팩토리 메소드(static factory method)
// Factory: 객체를 생성하는 역활
// => 생성자의 한계를 처리하기 위해 사용하는 설계 방법
// 1. 생성자의 이름은 변경이 불가능하다.
// 2. 생성자를 직접 이용할 경우, 캐시 같은 객체 생성에 관련된
// 최적화를 수행할 수 없다.
// 3. 생성자의 오버로딩은 한계가 있다.
public class Program_0226 {
public static void main(String[] args) {
// Color c1 = new Color(255, 0, 0);
Color c1 = Color.rgb(255, 0, 0);
Color c3 = Color.hsb(255, 0, 0);
Color c2 = Color.red();
}
}
/*
// Builder -> Design Pattern
// => 생성자의 인자가 많을 경우, 빌더를 고려해라.
class User {
private String name;
private int age;
private int height;
private int weight;
static class Builder {
private String name;
private int age;
private int height;
private int weight;
Builder name(String name) {
this.name = name;
return this;
}
Builder age(int age) {
this.age = age;
return this;
}
Builder height(int height) {
this.height = height;
return this;
}
Builder weight(int weight) {
this.weight = weight;
return this;
}
User build() {
return new User(this);
}
}
private User(Builder b) {
this.name = b.name;
this.age = b.age;
this.height = b.height;
this.weight = b.weight;
}
public String toString() {
return name + "(" + age + ")";
}
}
public class Program_0226 {
public static void main(String[] args) {
User user = new User.Builder()
.name("Tom")
.age(42)
.height(180)
.weight(80).build();
// User user4 = new User("Tom", 42, 100, 120);
// System.out.println(user1);
}
}
*/
/*
class User {
private String name;
private int age;
private int height;
private int weight;
User() {
this("Unnamed", 0, 0, 0);
}
User(String name) {
this(name, 0, 0, 0);
}
User(String name, int age) {
this(name, age, 0, 0);
}
User(String name, int age, int height) {
this(name, age, height, 0);
}
User(String name, int age, int height, int weight) {
this.name = name;
this.age = age;
this.height = height;
this.weight = weight;
}
public String toString() {
return name + "(" + age + ")";
}
}
public class Program_0226 {
public static void main(String[] args) {
User user1 = new User();
User user2 = new User("Tom");
User user3 = new User("Tom", 42);
User user4 = new User("Tom", 42, 100, 120);
System.out.println(user1);
}
}
*/
'Programming > Java' 카테고리의 다른 글
생성자 (0) | 2018.04.09 |
---|---|
private (0) | 2018.04.09 |
Library, Engine, Framework (0) | 2018.04.09 |
Clone() 과 공변의 룰 (0) | 2018.04.09 |
enum (0) | 2018.04.09 |