Back-end/Spring

[Spring] POJO ๊ตฌ์„ฑํ•ด๋ณด๊ธฐ

 

๐Ÿง ์ž๋ฐ”๋กœ 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 ๋ ˆ์‹œํ”ผ (๋งˆํ‹ด ๋ฐ์ด๋„˜, ๋‹ค๋‹ˆ์—˜ ๋ฃจ๋น„์˜ค, ์กฐ์‹œ ๋กฑ ์ €/์ด์ผ์›… ์—ญ)

 

๋ฐ˜์‘ํ˜•