๐ง ์๋ฐ๋ก POJO ๊ตฌ์ฑํด๋ณด๊ธฐ (1)
POJOํด๋์ค๋ฅผ ์ค๊ณํ ๋
@Configuration, @Bean์ ๋ถ์ฌ ์๋ฐ ๊ตฌ์ฑ ํด๋์ค๋ฅผ ๋ง๋ค๊ฑฐ๋,
@Component, @Repository, @Service, @Controller๋ฅผ ๋ถ์ฌ ์๋ฐ ์ปดํฌ๋ํธ๋ฅผ ๊ตฌ์ฑํด์ผํฉ๋๋ค.
IoC ์ปจํ ์ด๋๋ ์์ ๊ฐ์ด ์ ๋ํ ์ด์ ์ ๋ถ์ธ ์๋ฐ ํด๋์ค๋ฅผ ์ค์บ๋ํ์ฌ POJO ์ธ์คํด์ค๋ฅผ ๊ตฌ์ฑํด์ค ์ ์์ต๋๋ค.
๊ธฐ๋ณธ์ ์ธ POJO๋ฅผ ์ค๊ณํ ๋์ ์๋ฆฌ๋,
์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด Main Class์์ IoC ์ปจํ ์ด๋๋ฅผ ์์ฑํด์ฃผ๊ณ , ๊ตฌ์ฑ ํด๋์ค์์ ์์ฑ๋ ๋น ์ธ์คํด์ค๋ฅผ ๊ฐ์ ธ์ค๋ ์๋ฆฌ์ ๋๋ค.
POJO๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ๋ค๋ชฉ์ ์ํ์ค ์์ฑ๊ธฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค์ด๋ณด๋ฉด,
- prefix, suffix, initial ์ธ ํ๋กํผํฐ๋ฅผ ์ง๋ SequenceGenerator ํด๋์ค๋ฅผ ๋ง๋ค์ด์ค๋๋ค.
- ์ด๋ getSequence()๊ฐ ํธ์ถ๋ ๋๋ง๋ค ๋ง์ง๋ง ์ํ์ค๋ฅผ ์์ฑํด์ค๋๋ค.
์์ฑ๋ SequenceGenerator ํด๋์ค
public class SequenceGenerator {
private String prefix;
private String suffix;
private int initial;
private final AtomicInteger counter = new AtomicInteger();
public SequenceGenerator() {
}
public void setPrefix(String prefix) {
this.prefix = prefix;
}
public void setSuffix(String suffix) {
this.suffix = suffix;
}
public void setInitial(int initial) {
this.initial = initial;
}
public String getSequence() {
String builder = prefix +
initial +
counter.getAndIncrement() +
suffix;
return builder;
}
}
์๋ฐ POJO๋ฅผ ์์ฑํ๊ธฐ ์ํด ๊ตฌ์ฑํด๋์ค๋ฅผ ๋ง๋ค์ด๋ณด๋ฉด,
'๊ตฌ์ฑํด๋์ค์ ์ด๊น๊ฐ์ ์ง์ ํ๋ฉด IoC ์ปจํ ์ด๋์์ POJO ์ธ์คํด์ค๋ฅผ ์ ์ ํ ์ ์์ต๋๋ค.'
- @Configuration์ ๋ถ์ด๋ฉด ์คํ๋ง์ ์ด ํด๋์ค๊ฐ ๊ตฌ์ฑ ํด๋์ค์์ ์๋ ค์ค๋๋ค.
- ์ด๋ ์คํ๋ง์ ๊ทธ ์์์ ๋น(Bean) ์ธ์คํด์ค๋ฅผ ์ฐพ๊ฒ ๋ฉ๋๋ค.
- ๋ฐ๋ผ์ ๋น ์ธ์คํด์ค๋ฅผ ์ฐพ์ ์ ์๋๋ก @Bean์ ๋ถ์ฌ์ค๋๋ค.
- @Bean์ ๋ถ์ฌ ๋ฉ์๋์ ์ด๋ฆ๊ณผ ๊ฐ์ ๋น ์ธ์คํด์ค๊ฐ ์์ฑ๋ฉ๋๋ค. (name ์์ฑ์ ํตํด ์ด๋ฆ์ ์ง์ ํ ์ ์์ต๋๋ค.)
@Bean(name="test")
//test๋ผ๋ ์ด๋ฆ์ ๊ฐ์ง ๋น ์ธ์คํด์ค
์์ฑ๋ ๊ตฌ์ฑ ํด๋์ค์ธ SequenceGeneratorConfiguration ํด๋์ค
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.example.demo.SequenceGenerator;
@Configuration
public class SequenceGeneratorConfiguration {
@Bean
public SequenceGenerator sequenceGenerator() {
SequenceGenerator seqgen = new SequenceGenerator();
seqgen.setPrefix("30");
seqgen.setSuffix("A");
seqgen.setInitial(100000);
return seqgen;
}
}
์ดํ Main ํด๋์ค์์ ๊ตฌ์ฑํด๋์ค๋ฅผ ์ค์บํ๊ธฐ ์ํด IoC ์ปจํ ์ด๋๋ฅผ ๋ง๋ค์ด์ฃผ๋ฉด,
- ์คํ๋ง์ IoC ์ปจํ ์ด๋๋ก ๊ธฐ๋ณธ ๊ตฌํ์ฒด์ธ ๋น ํฉํ ๋ฆฌ์ ๊ณ ๊ธ ๊ตฌํ์ฒด์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์คํธ๋ฅผ ์ ๊ณตํด์ค๋๋ค.
- ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์คํธ๊ฐ ๊ธฐ๋ณธ ๊ธฐ๋ฅ์ ์ถฉ์คํ๊ณ , ๋น ํฉํ ๋ฆฌ๋ณด๋ค ๋ฐ์ ๋์๊ธฐ ๋๋ฌธ์ ๊ฐ๊ธ์ ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์คํธ๋ฅผ ์ฌ์ฉํ๋๊ฒ ์ข์ต๋๋ค.
์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์คํธ ๊ตฌํ ์ฝ๋
ApplicationContext context =
new AnnotationConfigApplicationContext(SequenceGeneratorConfiguration.class);
- ์ด์ IoC ์ปจํ ์ด๋๋ก POJO ํด๋์ค์ ๋น ์ธ์คํด์ค๋ฅผ ๊ฐ์ ธ์ค๊ฒ ์ต๋๋ค.
- ์ด๋ ๊ตฌ์ฑํด๋์ค์ ๋น ์ธ์คํด์ค๋ฅผ ๊ฐ์ ธ์ค๊ธฐ ์ํด์๋ getBean()์ ์ฌ์ฉ ํ ์ ์์ต๋๋ค.
- getBean()์ Objectํ์ด๊ธฐ ๋๋ฌธ์ ์บ์คํ ํน์ ๋๋ฒ์งธ ์ธ์์ ๋น ํด๋์ค๋ช ์ ์ง์ ํด์ค์ผ ํฉ๋๋ค.
SequenceGenerator generator = (SequenceGenerator)context.getBean('sequenceGenerator');
//์ง์ ์บ์คํ
ํ๋ ๋ฐฉ๋ฒ
SequenceGenerator generator = context.getBean('sequenceGenerator', SequenceGenerator.class);
//๋๋ฒ์งธ ์ธ์์ ๋น ํด๋์ค๋ช
์ ์ง์ ํด์ฃผ๋ ๋ฐฉ๋ฒ
์์ฑ๋ Main ํด๋์ค
public static void main(String[] args) {
ApplicationContext context =
new AnnotationConfigApplicationContext(SequenceGeneratorConfiguration.class);
SequenceGenerator generator = context.getBean(SequenceGenerator.class);
System.out.println(generator.getSequence());
System.out.println(generator.getSequence());
}
์ฐธ๊ณ ๋ฌธ์ :
์คํ๋ง5 ๋ ์ํผ (๋งํด ๋ฐ์ด๋, ๋ค๋์ ๋ฃจ๋น์ค, ์กฐ์ ๋กฑ ์ /์ด์ผ์ ์ญ)
'Back-end > Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring] DAO ๊ธฐ๋ณธ ๊ตฌ์กฐ ๋ง๋ค๊ธฐ (0) | 2020.07.27 |
---|---|
[Spring] @Autowired vs @Resource vs @Inject (0) | 2020.07.14 |
[Spring] @Bean ๊ณผ @Component ์ฐจ์ด (0) | 2020.07.14 |
[Spring] POJO ๋ ๋ฌด์์ธ๊ฐ? (2) | 2020.07.12 |
[Spring] ์คํ๋ง์ ์ฌ์ฅ๋ถ - IoC (์ ์ด์ ์ญ์ ) (1) | 2020.07.12 |