๐ก ์ด ํฌ์คํ ์ ์คํ๋ง ์คํฐ๋์ ๋ง๊ฒ ๊ตฌ์ฑ๋ ๊ฒ์ด๋ฉฐ, ์ถํ ๊ธ์ ๊ตฌ์กฐ์ ๋ค๋ฃจ๋ ๋ฒ์๊ฐ ๋ณ๊ฒฝ๋ ์ ์์ผ๋ ์ฐธ๊ณ ๋ฐ๋๋ค.
POJO(Plain Old Java Object)๋?
JLS(Java Language Specification)์ ์ํด ๊ฐ์ ๋ ๊ฒ ์ด์ธ์ ์ ํ์ ์์กดํ์ง ์๋ ์๋ฐ ์ค๋ธ์ ํธ๋ฅผ ๋ถ๋ฅด๋ ์ฉ์ด์ด๋ค.
์ฌ๊ธฐ์ ๋งํ๋ '์ ํ์ ์์กดํ์ง ์๋' ๊ฒ์ด ๋ฌด์์ธ์ง ์ฝ๋์ ํจ๊ป ์์๋ณด์.
๐ก JLS(Java Language Specification)
์๋ฐ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ฅผ ์ํ ๋ฌธ๋ฒ๊ณผ ์ ์์ ์ธ/๋น์ ์์ ์ธ ๊ท์น, ์ ์์ ์ธ ํ๋ก๊ทธ๋จ์ ์คํํ๊ธฐ ์ํ ํ๋ก๊ทธ๋จ ๋ฐฉ๋ฒ๋ค์ ๋ณด์ฌ์ฃผ๋ ์๋ฐ ํ์ค ๋ฌธ์๋ฅผ ๋งํ๋ค. ์๋ฐ ํ์ค์ ๋ํด ๋ ๊ถ๊ธํ์๋ค๋ฉด ์๋ฐ ํ์ค - JLS(Java Language Specification), JSR(Java Specification Request), JEP(Java Enhancement Proposal) ํฌ์คํ ์ ์ฐธ๊ณ ๋ฐ๋๋ค.
ํน์ ๊ท์ฝ์ ์ข ์๋์ง ์์
// MessageListener ์ธํฐํ์ด์ค๋ฅผ ์ง์ ๊ตฌํํ๋ฏ๋ก POJO๊ฐ ์๋
public class BestStarListener implements MessageListener {
@Override
public void onMessage(Message message) {
if (message instanceof TextMessage) {
try {
System.out.println(((TextMessage) message).getText());
}
catch (JMSException ex) {
throw new RuntimeException(ex);
}
}
}
}
// ์ด๋
ธํ
์ด์
์ผ๋ก MessageListener ์ธํฐํ์ด์ค์์ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ POJO
@Component
public class MyListener {
@JmsListener(destination = "myDestination")
public void processOrder(String data) {
System.out.println(data);
}
}
์ ์์ ์ฒ๋ผ JMS๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด MessageListener๋ฅผ ์์๋ฐ์์๋ ์๋๋ค. ๋ค๋ฅธ ํ๊ฒฝ์์์ ์ฌ์ฉ ์ ํธํ์ ๊ณ ๋ คํด์ผ ํ๋ฏ๋ก ๊ทธ๋งํผ ๊น๋ค๋ก์์ง๊ธฐ ๋๋ฌธ์ด๋ค.
ํน์ ํ๊ฒฝ์ ์ข ์๋์ง ์์
public class Foo extends javax.servlet.http.HttpServlet { ... }
์๋ฅผ ๋ค์ด ์น ํ๊ฒฝ์ ์ข ์๋๋ HttpServletRequest๋ HttpSession์ ๊ด๋ จ๋ API๋ฅผ ์ง์ ์ด์ฉํด์๋ ์๋๋ค.
์ด ์ญ์ ๋ค๋ฅธ ํ๊ฒฝ์์์ ์ฌ์ฉ ์ ํธํ์ ๊ณ ๋ คํด์ผ ํ๋ฏ๋ก ๊ทธ๋งํผ ๊น๋ค๋ก์์ง๊ณ , ์น ํ๊ฒฝ์ ์ข ์๋ผ ๋น์ฆ๋์ค ๋ก์ง๊ณผ ๊ธฐ์ ์ ์ธ ๋ด์ฉ์ ๋ด์ ์ฝ๋๊ฐ ์์ฌ ๊ฒฐํฉ๋๊ฐ ๋์์ง๊ณ , ๋ ๋ฆฝ์ ์ผ๋ก ๋จ์ ํ ์คํธ๋ฅผ ํ๊ธฐ ์ด๋ ค์์ง๋ค.
๋จ์ผ ์ฑ ์ ์์น(SRP)์ ์งํค๋ ํด๋์ค
์ฑ ์๊ณผ ์ญํ ์ด ๋ค๋ฅธ ์ฝ๋๋ฅผ ํ๋์ ํด๋์ค์ ๋ฃ๋ ๊ฒฝ์ฐ ๊ฐ์ฒด์งํฅ ์์น์์ ๊ทธ๋งํผ ๋ฉ์ด์ง๊ธฐ ๋๋ฌธ์ ์ง์ ํ POJO๋ผ ํ ์ ์๋ค.
์ ๋ฆฌํ์๋ฉด ํน์ ํ๊ฒฝ๊ณผ ๊ท์ฝ์ ์ข ์๋์ง ์์ ์ฌ์ฌ์ฉ๋ ์ ์๋ ๋ฐฉ์์ผ๋ก ์ค๊ณ๋ ์ค๋ธ์ ํธ์ด๋ฉฐ
๊ฐ์ฒด์งํฅ์ ์์น์ ์งํฅํ๋ ๊ฒ์ด POJO๋ผ๊ณ ๋งํ ์ ์๋ค.
์ฌ๋ฌ ํฌ์คํ ์์ POJO๋ฅผ 'Getter์ Setter๋ฅผ ๊ฐ์ง ๋จ์ํ(Plain) ์๋ฐ ์ค๋ธ์ ํธ' ์ ๋๋ก๋ง ์ ์ํ๋๋ฐ,
์ด๋ POJO์ ํน์ง ๊ด์ ์์ ๋ดค์ ๋ ์์กด์ฑ์ด ์๊ณ ์ฝ๋ ์์ ๊ณผ ํ ์คํธ์๋ ์ฉ์ดํ๋ฏ๋ก ์กฐ๊ฑด์ด ๋ง์์ POJO๊ฐ ๋ ์ ์์์ ๋ฟ ๋ฐ๋์ Getter์ Setter๋ฅผ ๊ฐ์ ธ์ผ๋ง ํ๋ค๋ ๋ง์ ์๋๋ค.
๐ก Getter/Setter
์ด๋ค ์ค๋ธ์ ํธ๋ ๋ณ์๋ฅผ ๊ฐ์ ธ์ค๋ ์ญํ ์ ๋ฉ์๋๋ฅผ Getter, ์ค์ ํ๋ ์ญํ ์ ๋ฉ์๋๋ฅผ Setter๋ผ๊ณ ํ๋ค.
๐ก ์๋ฐ๋น(JavaBean)
ํน์ ํ ๊ด๋ก๋ฅผ ์งํค๋ ค๋ ์๋ฐ๋น(JavaBean) API ์คํ ํ์ค์ด ์ง์ผ์ง ํด๋์ค๋ฅผ ๋งํ๋ ๊ฒ์ด๋ค.
์๋ฐ๋น ์คํ ๋ฌธ์์ ๊ธฐ๋ณธ๊ฐ๋ ํํธ์ ์ํค๋ฐฑ๊ณผ๋ฅผ ์ฐธ๊ณ ํ ๊ฒฐ๊ณผ ์๋ 4๊ฐ์ง ๊ท์น์ ์งํค๋ ํด๋์ค์ด๋ค.
- ๋ชจ๋ ํ๋๋ private์ด๋ฉฐ, Getter/Setter ๋ฉ์๋๋ฅผ ํตํด์๋ง ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค.
- ๊ธฐ๋ณธ ์์ฑ์๊ฐ ์์ด์ผ ํ๋ค. ์ฆ, ํ๋ผ๋ฏธํฐ๊ฐ ์๋ ์์ฑ์๊ฐ ์กด์ฌํด์ผ ํ๋ค.
- ์ง๋ ฌํ๋ผ์์ด์ผ ํ๋ค. ์ฆ, java.io.Serializable ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํด์ผ ํ๋ค.
- (ํ์ํ ๊ฒฝ์ฐ) ์ด๋ค ํ ์ปดํฌ๋ํธ๊ฐ ๋ฌด์ธ๊ฐ๋ฅผ ํ๋ค๋ ๊ฒ์ ๋ค๋ฅธ ์ปดํฌ๋ํธ์๊ฒ ์๋ฆฌ๋ '์ด๋ฒคํธ(Event) ์ฒ๋ฆฌ ๋ฉ์๋'๋ฅผ ๊ฐ๊ณ ์์ด์ผ ํ๋ค.
์๋ง ์ ์๋ฐ๋น ๊ท์น ์ค Getter/Setter ๋ฉ์๋ ๋ถ๋ถ๋ง ๋ณด๊ณ POJO์์ ๊ด๊ณ๋ฅผ ์๋ชป ์ ๋ฆฌํด๋ธ ๊ฒ ์๋๊ฐ ์ถ๋ค.
์ด๋ฌํ POJO๋ฅผ ์ค์ฌ์ผ๋ก ์คํ๋ง ํ๋ ์์ํฌ๋ฅผ ๋น๋กฏํ ์ฌ๋ฌ ๊ฐ์ฒด์งํฅ ๊ธฐ๋ฐ์ ํ๋ ์์ํฌ๊ฐ ํ์ํ ์ ์์๋ค.
POJO๋ฅผ ์งํฅํด์ผ ํ๋ ์ด์ - ๊ฐ์ฒด์งํฅ ์ค๊ณ์ ์ฅ์ ์ ์ป๊ธฐ ์ํด
์คํ๋ง ํ๋ ์์ํฌ ์ด์ ์๋ ์ํฐํ๋ผ์ด์ฆ ๊ธฐ์ ์ ์ง์ ์์กดํ๋ ๊ฐ์ฒด๋ฅผ ์ค๊ณํ๋ค. ๊ทธ๋์ ๊ฒฐํฉ๋๊ฐ ๋์์ง๊ณ ์์ง์ฑ์ด ๋ฎ์์ ธ ์ ์ง๋ณด์๊ฐ ์ด๋ ค์์ก๋ค. ์ฆ, ๊ฐ์ฒด์งํฅ์ ์ถ๊ตฌํ๋ ์๋ฐ๊ฐ ๊ฐ์ฒด์งํฅ ์ค๊ณ์ ์ฅ์ ๋ค์ ์์ด๋ฒ๋ฆฌ๊ฒ ๋ ๊ฒ์ด๋ค.
๊ทธ๋์ POJO๋ผ๋ ๊ฐ๋ ์ด ๋ฑ์ฅํ๋ค.
๐ก ๊ทธ๋ผ์๋ ํน์ ๊ธฐ์ ์ ์ฌ์ฉํด์ผ ํ๋๋ฐ ์ด๋ด๋ ์ด๋ป๊ฒ ํ๋๊ฐ? - PSA(Portable Service Abstraction)
ํน์ ๊ธฐ์ ์ ์ข ์์ ์ด๋ฉด POJO๊ฐ ์๋๊ธฐ ๋๋ฌธ์ ์คํ๋ง์์๋ ๋ง๋ จํด๋ ํ์ค ์ธํฐํ์ด์ค๊ฐ ์๋ค. ์๋ฅผ ๋ค์ด ์๋ฐ ๊ฐ์ฒด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฐ๊ฒฐ์ง๊ธฐ ์ํด 'JPA'๋ผ๋ ํ์ค ์ธํฐํ์ด์ค๋ฅผ ์ ํด๋์๊ณ , ์ด์ ๊ด๋ จ๋ ์ฌ๋ฌ ํ๋ ์์ํฌ๋ค์ ์ด JPA๋ผ๋ ํ์ค ์ธํฐํ์ด์ค ์๋ ๊ตฌํ๋์ด ์คํ๋๋ ๊ฒ์ด๋ค.
์ด๋ ๊ฒ ์ฌ์ฉํ๊ณ ์ ํ๋ ๊ธฐ์ ๊ณผ ํ๊ฒฝ์ ๋ณํ์ ๊ด๊ณ์์ด ์ผ๊ด๋ ๋ฐฉ์์ ๊ธฐ์ ์ ๊ทผ ํ๊ฒฝ์ ์ ๊ณตํ๋ ์ถ์ํ ๊ตฌ์กฐ๋ฅผ ์คํ๋ง์์๋ PSA๋ผ๊ณ ํ๋ค. PSA์ ๋ํด์๋ ๋ณ๋๋ก ํฌ์คํ ํ ๋งํฌ๋ฅผ ๊ฑธ์ด๋ํ ๋ ์ฐธ๊ณ ๋ฐ๋๋ค.
์ถ์ฒ
POJO(Plain Old Java Object)
en.wikipedia.org/wiki/Plain_old_Java_object
JMS(Java Message Service) ์๋ฌธ
docs.spring.io/spring-framework/docs/4.3.25.RELEASE/spring-framework-reference/html/jms.html
์๋ฐ๋น(JavaBean) ํ์ค
ko.wikipedia.org/wiki/์๋ฐ๋น์ฆ
download.oracle.com/otndocs/jcp/7224-javabeans-1.01-fr-spec-oth-JSpec/
'Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์คํ๋ง์ MVC (0) | 2021.06.15 |
---|---|
@Autowired์ ๋์์๋ฆฌ (1) | 2021.05.12 |
์คํ๋ง ์ปจํ ์ด๋(BeanFactory, ApplicationContext) (1) | 2021.05.06 |
IoC(Inversion of Control, ์ ์ด์ ์ญ์ ) / DI(Dependency Injection, ์์กด๊ด๊ณ ์ฃผ์ ) (0) | 2021.04.28 |