02 자바 빈 오브젝트 (어떤 기능 쓸 수 있게 되는지 예시 추가)
02_자바빈 오브젝트.txt
Java Bean Object
데이터 클래스를 만들 때 자주 사용하는 형태의 객체를 의미한다.
자빈오는 디자이너와 프로그래머의 협력을 돕기도 한대~ (jsp에서 자바빈 클래스의 속성값을 쉽게 갖다 쓸 수 있음)
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=skydiv1&logNo=221935542694
[Spring][개념] 자바빈(JavaBean)이란?
● 자바빈(JavaBean)이란? 일반적인 웹사이트는 디자이너와 프로그래머가 협력하여 개발한다. 그런데 프...
blog.naver.com
자빈오 조건
1. 필드값 접근 제어자 private
2. 필드값에 대한 접근은 getter, setter를 통해서
3. 기본생성자가 반드시 존재해야 함
필드값의 접근 제어자는 private
(강제는 아니지만 자빈오라고 하려면 이정도 조건은 지켜야)
그리고 필드값이 private니까 접근은 getter, setter를 통해서 이뤄짐.
장점.
자바빈 객체 스타일을 지켜서 클래스를 만들어 사용하면
다양한 자바 프레임워크, API, 라이브러리 문제를 일으키지 않고 동작을 한다.
(왜냐하면 그런 기능들이 자바빈 객체 스타일을 지켰다고 상정하고 만들어진 것이기 땜에)
예를 들면
JSP의 EL${apple.size }은 getter로 apple인스턴스의 size를 얻어오고 있는 것
Spring의 Bean도 마찬가지로 자빈오를 상정하고 만들어둔 것
자빈오 규칙에 맞춰 Coffee 데이터 모델을 만들어보자
package com.ezen.springmvc.model;
import org.springframework.stereotype.Component;
public class Coffee {
//자빈오 권장조건 - 필드값의 접근제어자는 private
private String name;
private Integer price;
private boolean hot;
//자빈오 필수조건 - 기본생성자
public Coffee() {
name = "default name";
price = 0;
hot = true;
}
// 이렇게 기본생성자 외에 다른 생성자가 존재할 경우 기본생성자는 수동으로 만들어줘야 겠지~
public Coffee(String name, Integer price, Boolean hot) {
this.name = name;
this.price = price;
this.hot = hot;
}
//자빈오 권장조건 - 필드값의 접근제어자가 private 이기 때문에 getter와 setter로 필드값에 접근
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getPrice() {
return price;
}
public void setPrice(Integer price) {
this.price = price;
}
public boolean isHot() {
return hot;
}
public void setHot(boolean hot) {
this.hot = hot;
}
public String getTable() {
return String.format("<table><tr></tr></table>");
}
@Override
public String toString() {
return String.format("%s/%s/%s", name, price, hot);
}
}
자빈오 형태로 생성한 Coffee 데이터 모델을 HomeController로 받아서 값을 출력해보자
package com.ezen.springmvc.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import com.ezen.springmvc.model.Coffee;
public class HomeController {
Coffee coffee = new Coffee();
@RequestMapping(value = "/", method = RequestMethod.GET)
public String home() {
//서버 켤 때마다 나옴
System.out.println("COFFEE : " + coffee);
System.out.println("coffee name : " + coffee.getName());
System.out.println("coffee price : " + coffee.getPrice());
System.out.println("coffee hot : " + coffee.isHot());
return "home";
}
}
원시적으로 한다면 이렇게 Coffee 생성자를 받아서 인스턴스.get메서드로 값을 받을텐데
자빈오를 그러면 뭐하러 쓰겠어 더 편리한 기능이 있으니까 쓰겠지!
자빈오에 맞춰서 클래스를 만들어놓으면
Spring에서 아래와 같은 기능들을 사용할 수 있음
spring 의존성 주입
https://cinnamonlover.tistory.com/225