[Java] Builder / this / 클래스자료형 / 래퍼클래스

김호정's avatar
Aug 14, 2024
[Java] Builder / this / 클래스자료형 / 래퍼클래스
notion image
 
Person 객체를 new해서 생성하면, heap에 만들어진다.
메인에 Person p1 = new Person(); 으로 생성했는데, 문제는 Person 클래스 안에서
이 객체를 가리키려면 p1이라고 부를 수 없다. 왜냐 p1이라고 부를 수 있는건 main 에서 뿐이라서!
 
Person 클래스 안에서 Person객체의 name같은 걸 가리키고 싶을때는
this를 사용한다. 그 부모의 요소를 가리키고 싶을때는 super를 사용한다.
 

Builder

package ex09; public class Person { // 클래스자료형 (객체가 아닌 데이터 덩어리. 상태와 행위 신경쓰지 말기) // 데이터베이스의 테이블(엔티티)같은거 // VO(Value Object)같은거 // 엔티티를 만들때는 래퍼클래스(wrapper class)를 써라 (int -> Integer) // 이렇게 래퍼클래스로 설정해주면 // 값이 없을때 0 이렇게 뜨지 않고 null 이렇게 뜬다. (값이 없음을 알 수 있음) private Integer id; private String name; private Integer age; private String email; private Person(){} public static Person builder(){ return new Person(); } public Person id(Integer id){ // void 타입이면 return을 안하니 그냥 setter this.id = id; return this; // setter와 비슷하네. this가 heap. heap의 자기자신을 부를때 this로 부른다. } public Person name(String name){ this.name = name; return this; } public Person age(Integer age){ this.age = age; return this; } public Person email(String email){ this.email = email; return this; } public Integer getId() { return id; } public String getName() { return name; } public Integer getAge() { return age; } public String getEmail() { return email; } }
 
💡
heap의 자기자신을 부를때 this를 사용한다.
 
package ex09; public class App { public static void main(String[] args) { // 생성자로 넣으면 실수를 하기 좋다. // 더 좋은건 builder 패턴 // 이제 배울때 잘 이해할 수 있어야 한다 이해이해이해 // 1. 내가 넣고 싶은 것만 넣을 수 있다. (오버로딩 안해도 ok) // 2. 순서가 상관없다 // 3. 실수할 일이 없어진다. Person p1 = Person.builder().id(1).email("hgd@gmail.com"); // builder로 인스턴스 생성 System.out.println(p1.getName()); } }
 
Person에 builder 패턴을 적용해주었다. (롬복 사용안하고 직접 만들어줌)
App에서 builder를 사용하면 필요한 값만 넣을 수 있게 된다.
 
기존에 생성자를 이용해서 매개변수로 값을 넣는방법은 좀 불편하고, 실수할 위험도 있는데
builder를 사용해서 넣어주면 오버로딩도 안해도 되고, 순서도 상관없이 넣으면 되고,
실수 할 일도 없어진다. ( age와 id 가 같은 int 인데 생성자로 넣으면 값을 실수로 바꿔서 넣어도 에러가 안나니까 실수할 수 있다.)
 
 
 
 
 
 
Share article

keepgoing