[Spring] POJO
๐ POJO
1. ์คํ๋ง์ด ์งํฅํ๋ ๋ชฉ์ ์ ์ ? POJO ํ๋ก๊ทธ๋๋ฐ
- ์คํ๋ง์ POJO๊ธฐ๋ฐ์ ๊ตฌ์ฑ, ์๋ฐ์ ๊ฐ์ฒด์งํฅ์ ์ธ ํน์ง์ ์ด๋ ค ๋น์ง๋์ค ๋ก์ง์ ์ถฉ์คํ ๊ฐ๋ฐ์ด ๊ฐ๋ฅํ๋๋ก ํ๋ค
2. POJO ๋ ?
3. ์คํ๋ง์์์ POJO? IOC/DI, AOP, PSA
4. POJO์ Java Bean์ ์ฐจ์ด
1. POJO์ ์ ์
POJO ?
Plain Old Java Object, ๊ฐ๋จํ POJO๋ ๋ง ๊ทธ๋๋ก ํด์์ ํ๋ฉด ์ค๋๋ ๋ฐฉ์์ ๊ฐ๋จํ ์๋ฐ ์ค๋ธ์ ํธ๋ผ๋ ๋ง๋ก์ Java EE ๋ฑ์ ์ค๋ ํ๋ ์์ํฌ๋ค์ ์ฌ์ฉํ๊ฒ ๋๋ฉด์ ํด๋น ํ๋ ์์ํฌ์ ์ข ์๋ "๋ฌด๊ฑฐ์ด" ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ฒ ๋ ๊ฒ์ ๋ฐ๋ฐํด์ ์ฌ์ฉ๋๊ฒ ๋ ์ฉ์ด์ด๋ค. 2000๋ 9์์ ๋งํด ํ์ธ๋ฌ, ๋ ๋ฒ ์นด ํ์จ, ์กฐ์ฌ ๋งฅํจ์ง ๋ฑ์ด ์ฌ์ฉํ๊ธฐ ์์ํ ์ฉ์ด๋ก์ ๋งํด ํ์ธ๋ฌ๋ ๋ค์๊ณผ ๊ฐ์ด ๊ทธ ๊ธฐ์์ ๋ฐํ๊ณ ์๋ค.
- ๊ฐ์ฒด ์งํฅ์ ์ธ ์๋ฆฌ์ ์ถฉ์คํ๋ฉด์ ํ๊ฒฝ๊ณผ ๊ธฐ์ ์ ์ข ์๋์ง ์๊ณ ํ์์ ๋ฐ๋ผ ์ฌํ์ฉ๋ ์ ์๋ ๋ฐฉ์์ผ๋ก ์ค๊ณ๋ ์ค๋ธ์ ํธ๋ฅผ ๋งํ๋ค. ๊ทธ๋ฌํ POJO์ ์ ํ๋ฆฌ์ผ์ด์ ์ ํต์ฌ๋ก์ง๊ณผ ๊ธฐ๋ฅ์ ๋ด์ ์ค๊ณํ๊ณ ๊ฐ๋ฐํ๋ ๋ฐฉ๋ฒ์ POJO ํ๋ก๊ทธ๋๋ฐ์ด๋ผ๊ณ ํ ์ ์๋ค.
public class MyPojo {
private String name;
private int age;
public String getName() {
return name;
}
public String getAge() {
return age;
}
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
}
- EJB๋ฑ์์ ์ฌ์ฉ๋๋ Java Bean์ด ์๋ Getter์ Setter๋ก ๊ตฌ์ฑ๋ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ํํ์ ์๋ฐ ๊ฐ์ฒด
- Spring์ POJO ๋ฐฉ์์ ๊ธฐ๋ฐ์ผ๋ก ํ ์น ํ๋ ์์ํฌ
EJB(Enterprise JavaBeans)๋ ์๋ฐ ๊ฐ๋ฐ์ ์์ด ํธ๋์ญ์ , ๋ณด์ ๋ฑ ๋ก์ฐ๋ ๋ฒจ์ ๋ก์ง์ ์ ๊ฒฝ์ฐ์ง์๊ณ ์ดํ๋ฆฌ์ผ์ด์ ์ ์ฝ๊ฒ ๋ง๋ค์ด ์ค ๊ธฐ์ ์ด๋ค. ํ์ง๋ง, EJB๋ ๊ฐ์ฒด์งํฅ์ฑ์ ๊ฐ์์ํค๋ ๋จ์ ์ด ์์๋ค.
2. POJO์ ์กฐ๊ฑด
1. ํน์ ๊ท์ฝ์ ์ข ์๋์ง ์๋๋ค.
์๋ฐ์ธ์ด์ ๊ผญ ํ์ํ API์ธ์๋ ์ข ์๋์ง ๋ง์์ผํ๋ค. EJB2์ ๊ฐ์ด ํน์ ๊ท์ฝ์ ๋ฐ๋ผ ๋ง๋ค๊ฒ ํ๋ ๊ฒฝ์ฐ๋ ๋๋ถ๋ถ ๊ท์ฝ์์ ์ ์ํ๋ ํน์ ํด๋์ค๋ฅผ ์์ํ๋๋ก ์๊ตฌํ๋ค. ๊ทธ๋ด ๊ฒฝ์ฐ ์๋ฐ์ ๋จ์ผ ์์ ์ ํ ๋๋ฌธ์ ๋์ด์ ํด๋น ํด๋์ค์ ๊ฐ์ฒด์งํฅ์ ์ธ ์ค๊ณ ๊ธฐ๋ฒ์ ์ ์ฉํ๊ธฐ๊ฐ ์ด๋ ค์์ง๋ ๋ฌธ์ ๊ฐ ์๊ธด๋ค.
2. ํน์ ํ๊ฒฝ์ ์ข ์๋์ง ์๋๋ค.
ํน์ ๊ธฐ์ ์ ํ๋ ์์ํฌ๋ ์๋ฒ์์๋ง ๋์๊ฐ๋ฅํ ์ฝ๋๋ผ๋ฉด POJO๋ผ ํ ์ ์๋ค. POJO๋ ํ๊ฒฝ์ ๋ ๋ฆฝ์ ์ด์ฌ์ผํ๋ค. ํนํ ๋น์ง๋์ค ๋ก์ง์ ๋ด๊ณ ์๋ POJO ํด๋์ค๋ ์น์ด๋ผ๋ ํ๊ฒฝ ์ ๋ณด๋ ์น ๊ธฐ์ ์ ๋ด๊ณ ์๋ ํด๋์ค๋ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํด์๋ ์๋๋ค. ์ค๋ น ๋์ค์๋ ์น ์ปจํธ๋กค๋ฌ์ ์ฐ๊ฒฐ๋์ ์ฌ์ฉ๋ ๊ฒ์ด ๋ถ๋ช ํ๋๋ผ๋ ์ง์ ์ ์ผ๋ก ์น์ด๋ผ๋ ํ๊ฒฝ์ผ๋ก ์ ํํด๋ฒ๋ฆฌ๋ ์ค๋ธ์ ํธ๋ API์ ์์กดํด์๋ ์๋๋ค. ๊ทธ๋ ๊ฒ ๋๋ฉด ์น ์ธ์ ํด๋ผ์ด์ธํธ๊ฐ ์ฌ์ฉํ์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ด๋ค.
๊ธฐ์ ์ ์ธ ๋ด์ฉ์ ๋ด์ ์น ์ ๋ณด๊ฐ ๋น์ฆ๋์ค ๋ก์ง๊ณผ ์ฝํ์์ผ๋ ์ดํดํ๊ธฐ๋ ์ด๋ ต๋ค. ๋๋ฌธ์ ๋น์ง๋์ค ๋ก์ง์ ๋ด์ ์ฝ๋์ HTTPServletRequest, HttpSession, ์บ์์ ๊ด๋ จ๋ API๊ฐ ๋ฑ์ฅํ๋ค๋ฉด ์ง์ ํ POJO๋ผ๊ณ ํ ์ ์๋ค.
3. ๊ฐ์ฒด ์งํฅ์ ์๋ฆฌ์ ์ถฉ์คํด์ผํ๋ค.
POJO๋ ๊ฐ์ฒด์งํฅ์ ์ธ ์๋ฐ์ธ์ด์ ๊ธฐ๋ณธ์ ์ถฉ์คํ๊ฒ ๋ง๋ค์ด์ ธ์ผํ๋ค. ์๋ฐ ์ธ์ด ๋ฌธ๋ฒ์ ์ฌ์ฉํ๋ค๊ณ ํด์ ์๋์ ์ผ๋ก ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ๊ณผ ๊ฐ์ฒด์งํฅ ์ค๊ณ๊ฐ ์ ์ฉ๋ฌ๋ค๊ณ ๋ณผ ์๋ ์๋ค. ์ฑ ์๊ณผ ์ญํ ์ด ๊ฐ๊ธฐ ๋ค๋ฅธ ์ฝ๋๋ฅผ ํ ํด๋์ค์ ๋ชฐ์๋ฃ์ด ๋ฉ์น ํฐ ๋ง๋ฅ ํด๋์ค๋ฅผ ๋ง๋ค๊ณ ์์๊ณผ ๋คํ์ฑ์ ์ ์ฉ์ด ์๋ if/switch๋ฌธ์ผ๋ก ๊ฐ๋ ์ค๊ณ๋ ์ค๋ธ์ ํธ๋ผ๋ฉด POJO๋ผ๊ณ ๋ถ๋ฅด๊ธฐ ํ๋ค๋ค.
// ๋ฏธ๋ฆฌ ์ง์ ๋ ํด๋์ค๋ฅผ extends ํ์ง ์๊ธฐ
public class Foo extends javax.servlet.http.HttpServlet { ... }
// ๋ฏธ๋ฆฌ ์ ์๋ ์ธํฐํ์ด์ค๋ฅผ implement ํ์ง ์๊ธฐ
public class Bar implements javax.ejb.EntityBean { ... }
// ๋ฏธ๋ฆฌ ์ ์๋ ์ด๋
ธํ
์ด์
ํฌํจํ์ง ์๊ธฐ
@javax.persistence.Entity public class Baz { ... }
3. POJO์ ์ฅ์
- ๊น๋ํ ์ฝ๋
- ๊ฐํธํ ํ ์คํธ
- ๊ฐ์ฒด์งํฅ์ ์ธ ์ค๊ณ๋ฅผ ์์ ๋กญ๊ฒ ์ ์ฉ
// POJO ์ฌ์ฉํ์ง ์์ ์์
// JMS ๋ผ๋ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ธฐ ์ํด์ MessageListener ์ธํฐํ์ด์ค๋ฅผ ์์๋ฐ์
public class ExampleListener implements MessageListener {
public void onMessage(Message message) {
if (message instanceof TextMessage) {
try {
System.out.println(((TextMessage) message).getText());
}
catch (JMSException ex) {
throw new RuntimeException(ex);
}
}
else {
throw new IllegalArgumentException("Message must be of type TextMessage");
}
}
}
// POJO๊ธฐ๋ฐ์ผ๋ก ์์ฑํ ์์
// ์์๋ฐ์ง ์๊ณ ์ด๋
ธํ
์ด์
์ ํตํด ๊ฐ์ฒด๋ฅผ ์ฃผ์
๋ฐ์
@Component
public class ExampleListener {
@JmsListener(destination = "myDestination")
public void processOrder(String message) {
System.out.println(message);
}
}
4. POJO ํ๋ ์์ํฌ
- POJO ํ๋ก๊ทธ๋๋ฐ์ด ๊ฐ๋ฅํ๋๋ก ๊ธฐ์ ์ ์ธ ๊ธฐ๋ฐ์ ์ ๊ณตํ๋ ํ๋ ์์ํฌ
- ์คํ๋ง ํ๋ ์์ํฌ์ ํ์ด๋ฒ๋ค์ดํธ๋ ๋ํ์ ์ธ POJO ํ๋ ์์ํฌ
- ์คํ๋ง์ ์ด์ฉํ๋ฉด POJO ํ๋ก๊ทธ๋๋ฐ์ ์ฅ์ ์ ๊ทธ๋๋ก ์ด๋ ค์ ์ํฐํ๋ผ์ด์ฆ ์ ํ๋ฆฌ์ผ์ด์ ์ ํต์ฌ๋ก์ง์ ๊ฐ์ฒด์งํฅ์ ์ธ POJO๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊น๋ํ๊ฒ ๊ตฌํํ๊ณ , ๋์์ ์ํฐํ๋ผ์ด์ฆ ํ๊ฒฝ์ ๊ฐ์ข ์๋น์ค์ ๊ธฐ์ ์ ์ธ ํ์๋ฅผ POJO๋ฐฉ์์ผ๋ก ๋ง๋ค์ด์ง ์ฝ๋์ ์ ์ฉํ ์ ์๋ค.
5. POJO : ์คํ๋ง์ ํต์ฌ
- ์คํ๋ง ์ ํ๋ฆฌ์ผ์ด์ ์ POJO๋ฅผ ์ด์ฉํด์ ๋ง๋ ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋์ฌ์ POJO๊ฐ ์ด๋ป๊ฒ ๊ด๊ณ๋ฅผ ๋งบ๊ณ ๋์ํ๋์ง๋ฅผ ์ ์ํด๋์ ์ค๊ณ ์ ๋ณด๋ก ๊ตฌ๋ถ
- ์ผ๋ฐ์ ์ธ J2EE ํ๋ ์์ํฌ์ ๋นํด ํน์ ํ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํ, ์์ ๋ฐ์ ํ์๊ฐ ์์ด ๊ธฐ์กด์ ์กด์ฌํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฑ์ ์ง์ํ๊ธฐ์ ์ฉ์ดํ๊ณ ๊ฐ์ฒด๊ฐ ๊ฐ๋ณ๋ค.
- ์คํ๋ง์ ์ฃผ์๊ธฐ์ ์ธ IoC/DI, AOP, PSA๋ ์ ํ๋ฆฌ์ผ์ด์ ์ POJO ํ๋ก๊ทธ๋๋ฐ์ ์์ฝ๊ฒ ํ ์ ์๋๋ก ์ง์ํ๋ ๊ธฐ์ ์ด๋ค. DI๋ ์ ์ฐํ๊ฒ ํ์ฅ๊ฐ๋ฅํ ์ค๋ธ์ ํธ๋ฅผ ๋ง๋ค์ด๋๊ณ ๊ทธ ๊ด๊ณ๋ ์ธ๋ถ์์ ๋ค์ด๋ด๋ฏนํ๊ฒ ์ค์ ํด์ค๋ค. ์ด๋ฐ DI์ ๊ฐ๋ ์ ์คํ๋ง์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐ์ ๊ฑธ์ณ ์ ์ฉํ๋ค.
6. POJO ๊ธฐ๋ฐ์ ์ฝ๋์ธ์ง ํ์ธํ๋ ๊ธฐ์ค
POJO ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์๋ ์๋์ ๊ธฐ์ค์ ์ค์ํด์ผํ๋ค.
- ๊ฐ์ฒด์งํฅ์ ์ธ ์ค๊ณ์์น์ ์ถฉ์คํ๊ธฐ
- ๋ฐ๋ณต์ ์ธ ํ ํ๋ฆฟ ์ฝ๋์ ํ ์คํธํ๊ธฐ ํ๋ ๊ตฌ์กฐ, ํ์ฅ ๋ฐ ์ฌํ์ฉ์ ์ด๋ ค์์ด ๋จ์์๋ค๋ฉด EJB์ ๋ฌธ์ ์ ์ ์ฌ์ ํ ์๊ณ ์๋ ๊ฒ
2. ํ ์คํธ ์ฝ๋๋ฅผ ์ ์์ฑํ๊ธฐ
- ์ ๋ง๋ค์ด์ง POJO๋ ์๋ํ๋ ํ ์คํธ ์ฝ๋ ์์ฑ์ด ํธ๋ฆฌ
- ์ฝ๋ ์์ฑ์ด ํธ๋ฆฌํ๋ฉด ์ข ๋ ๊ผผ๊ผผํ๊ฒ ๋ง๋ค๊ฒ ๋๊ณ , ์ฝ๋ ๊ฒ์ฆ๊ณผ ํ์ง ํฅ์์ ์ ๋ฆฌํด์ง๋๋ค.
7. POJO์ Java Bean์ ์ฐจ์ด
- Java Bean์ POJO์ด๋ค.
- POJO๋ Java Bean ์ด ์๋๋ค.
- POJO ๋ Java bean ๋ณด๋ค ๋ฒ์ฃผ๊ฐ ๋ ๋์ ๊ฐ๋ ์ด๋ค.
์ญ์ ํ๋ ๋ฐฉ๋ฒ ์๋ ค์ฃผ์ธ์ ..
// Serializable(์ง๋ ฌํ) ์ธํฐํ์ด์ค ์์ ๋ฐ์์ผํ๋ค -> ๋คํธ์ํฌ๋ฅผ ํตํด ์ ์ก๋๊ฑฐ๋ ํ์ผ์ ์ ์ฅ๋๋ ์ผ์ด
์ฆ๊ธฐ ๋๋ฌธ
public class NoPojo implements Serializable {
// ํด๋์ค์ ๋ชจ๋ ์์ฑ์ ๋น๊ณต๊ฐ
private static final serialVersionUID = 1;
private String id;
private String name;
// ์ธ์๊ฐ ์๋ public ์์ฑ์๊ฐ ์์ด์ผํ๋ค.
public NoPojo() {
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
[Spring] POJO(Plain Old Java Object)๋?
์ฐธ๊ณ ํฌ์กฐ(Plain Old Java Object, POJO)๊ฐ ๋ญ๊น? [ ์ํค๋ฐฑ๊ณผ ] Plain Old Java Object, ๊ฐ๋จํ POJO๋ ๋ง ๊ทธ๋๋ก ํด์์ ํ๋ฉด ์ค๋๋ ๋ฐฉ์์ ๊ฐ๋จํ ์๋ฐ ์ค๋ธ์ ํธ๋ผ๋ ๋ง๋ก์ Java EE ๋ฑ์ ์ค๋ ํ๋ ์์..
dev-coco.tistory.com
[Spring] POJO๋?
์คํ๋ง์ ๋ณธ์ง์ ์ํฐํ๋ผ์ด์ฆ ์๋น์ค ๊ธฐ๋ฅ์ POJO์ ์ ๊ณตํ๋ ๊ฒ์ด๋ค - Professional Spring Framework, 2005 ๐ฑ POJO๋? Plain Old Java Object, ๋จ์ํ ์๋ฐ ์ค๋ธ์ ํธ POJO๋, ๊ฐ์ฒด ์งํฅ์ ์ธ ์๋ฆฌ์ ์ถฉ์คํ๋ฉด์..
doing7.tistory.com
Spring์ ๊ธฐ๋ณธ ํน์ง-POJO
์ฌํด 1์๋ฌ๋ถํฐ ์คํ๋ง ํ๋ ์์ํฌ๋ฅผ ์ด์ฉํด ์ผํ๋ชฐ ์น์ฌ์ดํธ๋ฅผ ๊ตฌํํด๋ณด๋ ํ๋ก์ ํธ๋ฅผ ์งํ ์ค์ ์๋ค. ์ค๋์ ์คํ๋ง ํ๋ ์์ํฌ์ ํน์ง์ ๋ํด ๊ฐ๋จํ ์ ๋ฆฌํด๋ณด๊ณ ์ ํ๋ค.์์ง๊น์ง ์๋ฒฝํ
velog.io