๐ฑJAVA SPRING_์๋ฐ ์คํ๋ง์ ๊ธฐ์ด ๊ฐ๋
[์คํ๋ง์ ๊ฐ๋
]
โ๏ธJAVA Spring์ด๋?
: JAVA Spring์ด๋ ์๋ฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ง๋ค์ด์ง ์ ํ๋ฆฌ์ผ์ด์
ํ๋ ์์ํฌ๋ฅผ ์๋ฏธํฉ๋๋ค. ํ๋ ์์ํฌ๋ ๋ผ๋๋ ๊ทผ๊ฐ์ ์ด๋ฃจ๋ ์ฝ๋๋ค์ ๋ฌถ์์ ์๋ฏธํ๋ฉฐ ์ด๋ ์ ํ๋ฆฌ์ผ์ด์
ํ๋ ์์ํฌ๋ ์ ํ๋ฆฌ์ผ์ด์
๊ฐ๋ฐ์ ๋น ๋ฅด๊ณ ํจ์จ์ ์ด๊ฒ ํ๊ธฐ ์ํ ํ์ด๋ผ๊ณ ๋ ๋ณผ ์ ์์ต๋๋ค.
๊ฐ ํ๋ก์ ํธ์์ ๊ฐ๋ฐ์๋ ํ๋ ์์ํฌ๋ฅผ ์ด์ฉํ์ฌ ํ๋ก๊ทธ๋จ์ ๊ธฐ๋ณธํ๋ฆ์ด๋ ๊ตฌ์กฐ๋ฅผ ์ ํ๊ณ , ํ์๋ค์ ์ด ์์ ์์ ์ ์ฝ๋๋ฅผ ์ถ๊ฐํ๋ ๋ฐฉ์์ผ๋ก ๊ฐ๋ฐํฉ๋๋ค. ๊ฐ๋ฐ์ ํ์ํ ๊ตฌ์กฐ๋ฅผ ์ด๋ฏธ ์ฝ๋๋ก ๋ง๋ค์ด ๋์๊ธฐ ๋๋ฌธ์ ํ์ํ ๋ถ๋ถ์ ์กฐ๋ฆฝํ๋ ํํ๋ก ๊ฐ๋ฐ์ด ๊ฐ๋ฅํ๊ณ , ์ด๋ฌํ ์ฅ์ ์ผ๋ก ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ ํ๋ก์ ํธ๋ ์ผ์ ํ ํ์ง์ ๋ณด์ฅํ๋ฉฐ ๊ฐ๋ฐ์๊ฐ์ ๋จ์ถ์ํฌ ์ ์์ต๋๋ค.
์๋ฐ ์คํ๋ง์ '๊ฒฝ๋ ํ๋ ์์ํฌ' ์ด๋ฉฐ ๊ธฐ์กด์ ๋ณต์กํ ๊ตฌ๋ํ๊ฒฝ์ ๋ฒ์ด๋ ํน์ ๊ธฐ๋ฅ ์์ฃผ๋ก ๊ฐ๋จํ jarํ์ผ์ ์ด์ฉํ์ฌ ๊ฐ๋ฐ์ ๊ฐ๋ฅํ๊ฒ ๊ตฌ์ฑ๋ ํ๋ ์์ํฌ ์
๋๋ค.
โ๏ธJAVA Spring์ ์ฃผ์ ํน์ง
๐ POJO(Plain Old Java Object) ๊ธฐ๋ฐ์ ๊ตฌ์ฑ
: ์คํ๋ง์ ๊ฐ์ฒด๊ฐ์ ๊ด๊ณ๋ฅผ ๊ตฌ์ฑํ ์ ์๋ ํน์ง์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ์คํ๋ง์ ๋ค๋ฆ ํ๋ ์์ํฌ์ ๋ฌ๋ฆฌ ์ด ๊ด๊ณ๋ฅผ ๊ตฌ์ฑํ ๋ ๋ณ๋์ API๋ฅผ ์ฌ์ฉํ์ง ์๋ POJO ์ ๊ตฌ์ฑ๋ง์ผ๋ก ๊ฐ๋ฅํ๋๋ก ์ ์๋์์ต๋๋ค. ์ฆ, ์ผ๋ฐ์ ์ธ JAVA์ฝ๋๋ฅผ ์ด์ฉํ์ฌ ๊ฐ์ฒด๋ฅผ ๊ตฌ์ฑํ๋ ๋ฐฉ์์ ๊ทธ๋๋ก ์ฌ์ฉํ ์ ์๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ๋ฐ๋ผ์ ๊ฐ๋ฐ์๊ฐ ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ํํ๋ก ์ฝ๋๋ฅผ ์์ฑํ๊ณ ์คํ ๊ฐ๋ฅํ์ฌ ์ ์ฐํ๊ฒ ์์
ํ ์ ์์ต๋๋ค.
๐ ์์กด์ฑ ์ฃผ์
(DI)์ ํตํ ๊ฐ์ฒด๊ฐ์ ๊ด๊ณ๊ตฌ์ฑ
: ์์กด์ฑ์ด๋ ํ๋์ ๊ฐ์ฒด๊ฐ ๋ค๋ฅธ ๊ฐ์ฒด์์ด ์ญํ ์ ์ํํ ์ ์๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ์ฆ ๋ค๋ฅธ ํ๋์ ๊ฐ์ฒด๊ฐ ๋ค๋ฅธ ๊ฐ์ฒด์ ์ํ์ ์ํฅ์ ๋ฐ์ต๋๋ค. ์ฃผ์
์ด๋ ์ธ๋ถ์์ ๋ฐ์ด ๋ฃ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ๋ฐ๋ผ์ ์์กด์ฑ ์ฃผ์
์ด๋ ์ด๋ ํ ๊ฐ์ฒด๊ฐ ํ์ํ ๊ฐ์ฒด๋ฅผ ์ธ๋ถ์์ ๋ฐ์ด๋ฃ๋ ๋ฐฉ์์ ๋งํฉ๋๋ค.
์ถ๊ฐ์ ์ธ ํ๋์ ์กด์ฌ๊ฐ ์์กด์ฑ์ด ํ์ํ ๊ฐ์ฒด์ ํ์ํ ๊ฐ์ฒด๋ฅผ ์ฐพ์์ '์ฃผ์ ' ํด์ฃผ๋ ํํ๋ก ๊ตฌ์ฑ๋์ด์์ต๋๋ค.
์คํ๋ง์์ 'ApplicationContext'๋ผ๋ ์กด์ฌ๊ฐ ์ด๋ฌํ ์ญํ ์ ํ๋๋ฐ, ์ด๋ ์กด์ฌ๊ฐ ํ์ํ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ์ฃผ์ ํด์ค๋๋ค. ๋ฐ๋ผ์ ๊ฐ๋ฐ์๋ ๊ฐ์ฒด์ ๊ฐ์ฒด๋ฅผ ๋ถ๋ฆฌํด์ ์์ฑํ๊ณ , ์ด๋ฌํ ๊ฐ์ฒด๋ฅผ ์ฎ์ด์ ์์ ํฉ๋๋ค. ์คํ๋ง์์ ApplicationContext๊ฐ ๊ด๋ฆฌํ๋ ๊ฐ์ฒด๋ฅผ '๋น(Bean)' ์ด๋ผ๊ณ ๋ถ๋ฅด๋ฉฐ ๋น๊ณผ ๋น์ฌ์ด์ ์์กด๊ด๊ณ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ผ๋ก 'XML์ค์ ', '@์ด๋ ธํ ์ด์ ์ค์ ', 'JAVA ์ค์ ๋ฐฉ์'์ ์ด์ฉํฉ๋๋ค.
๐ฉ์์กด์ฑ ์ฃผ์ ํ ์คํธ
: ์์กด์ฑ ์ค์ ๋ฐฉ์์ผ๋ก XML์ด๋ ์ด๋ ธํ ์ด์ ์ ์ด์ฉํ ๊ฒ์ด๋ฉฐ, LOMBOK์ ์ด์ฉํ์ฌ setter๋ฉ์๋๋ฅผ ์๋์ผ๋ก ๊ตฌํํฉ๋๋ค.
(**Lombok : JAVA ๊ฐ๋ฐ์ ์์ฃผ ์ด์ฉํ๋ getter/setter, toString(), ์์ฑ์ ๋ฑ์ ์๋์ผ๋ก ์์ฑํด์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ)
๐ก<pom.xml> : lombok ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ถ๊ฐํ ํ log4j๋ฒ์ ๋ณ๊ฒฝ (1.2.15 -> 1.2.17)
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.22</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
๐กex00 ํ๋ก์ ํธ์ 'org.zerock.sample'ํจํค์ง ์์ฑ ํ Restaurantํด๋์ค์ Chefํด๋์ค ์์ฑ
<Chef.java>
package org.zerock.sample;
import org.springframework.stereotype.Component;
import lombok.Data;
@Component
@Data
public class Chef {
}
<Restaurant.java>
## Chef.java๋ฅผ ์ฃผ์
๋ฐ๋๋ก ์ค๊ณ
package org.zerock.sample;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import lombok.Data;
import lombok.Setter;
@Component ## ํด๋น ํด๋์ค๊ฐ ์คํ๋ง์์ ๊ด๋ฆฌํด์ผํ๋ ๋์์์ ํ์
@Data ## Data์ด๋
ธํ
์ด์
์ ์ด์ฉํ์ฌ Lombok์ setter์์ฑ๊ธฐ๋ฅ๊ณผ ์์ฑ์, toString()๋ฑ์ ์๋์ผ๋ก ์์ฑํ๊ฒํจ
public class Restaurant {
@Setter(onMethod= @_({@Autowired})) ## onMethod ์์ฑ์ ์์ฑ๋๋ setChef()์ @Autowired ์ด๋
ธํ
์ด์
์ ์ถ๊ฐํ๋๋ก ํจ
private Chef chef;
}
์คํ๋ง์์ ๊ด๋ฆฌ๋๋ ๊ฐ์ฒด '๋น(Bean)' ์ ๋ํ ์ค์ ์ ์ํ XML์ค์ ํ์ผ
๐ก<root-context.xml> : Namespacesํญ์์ context๋ฅผ ์ ํ ํ ์ฝ๋ ์ถ๊ฐ
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mybatis-spring="http://mybatis.org/schema/mybatis-spring"
xsi:schemaLocation="http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring-1.2.xsd
http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
<!-- Root Context: defines shared resources visible to all other web components -->
<context:component-scan base-package="org.zerock.sample">
</context:component-scan>
</beans>
๐ก๊ทธ ํ ์๋ BeansGraph๋ฅผ ๋ณด๋ฉด Restaurant ์ Chef๊ฐ์ฒด๊ฐ ์ค์ ๋ ๊ฒ์ ๋ณผ ์ ์์
๐กroot-context.xml ์๋ ์์
- ์คํ๋ง ํ๋ ์์ํฌ๊ฐ ์์๋๋ฉด ๋จผ์ ์คํ๋ง์ด ์ฌ์ฉํ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ (Context)๋ฅผ ๋ง๋ค๊ณ ApplicationContext๋ผ๋ ์ด๋ฆ์ ๊ฐ์ฒด๊ฐ ์์ฑ
- ์คํ๋ง์ ์์ ์ด ๊ฐ์ฒด๋ฅผ ๊ด๋ฆฌํด์ผํ๋ ๊ฐ์ฒด(Bean)๋ค์ ๋ํด root-context.xml์ ์ค์
- root-context.xml์ ์ค์ ๋์ด์๋ <context:component-scan> ํ๊ทธ์ ๋ด์ฉ์ ํตํด 'org.zerock.sample' ํจํค์ง๋ฅผ ์ค์บ
- ํด๋น ํจํค์ง์ ์๋ ํด๋์ค๋ค ์ค์ @Component๋ผ๋ ์ด๋ ธํ ์ด์ ์ด ์กด์ฌํ๋ ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ์์ฑ
- Restaurant๊ฐ์ฒด๋ Chef๊ฐ์ฒด๊ฐ ํ์ํ๋ค๋ @Autowired์ด๋ ธํ ์ด์ (ํด๋น ์ธ์คํด์ค ๋ณ์๊ฐ ์คํ๋ง์ผ๋ก๋ถํฐ ์๋์ผ๋ก ์ฃผ์ ํด๋ฌ๋ผ๋ ํ์/ ๊ฐ๋ฐ์๊ฐ ์ง์ ๊ฐ์ฒด๋ค๊ณผ์ ๊ด๊ณ๋ฅผ ๊ด๋ฆฌํ์ง ์๊ณ ์๋์ผ๋ก ๊ด๋ฆฌ๋๋๋ก ํจ) ์ค์ ์ด ์์ผ๋ฏ๋ก ์คํ๋ง์ Chef๊ฐ์ฒด์ ๋ ํผ๋ฐ์ค๋ฅผ Restaurant ๊ฐ์ฒด์ ์ฃผ์
๐ก new Restaurant()์ ๊ฐ์ด Restaurant ํด๋์ค์์ ๊ฐ์ฒด๋ฅผ ์์ฑํ ์ ์ด ์๋๋ฐ๋ ๊ฐ์ฒด๊ฐ ๋ง๋ค์ด์ก๋ค๋ ์ ์์ ์คํ๋ง์ ๊ด๋ฆฌ๊ฐ ํ์ํ ๊ฐ์ฒด๋ฅผ ์ด๋ ธํ ์ด์ ๋ฑ์ ์ด์ฉํด ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ๊ด๋ฆฌํ๋ ์ผ์ข ์ '์ปจํ ์ด๋'๋ 'ํฉํ ๋ฆฌ' ๊ธฐ๋ฅ์ ๊ฐ์ง๊ณ ์๋ค๋ ๊ฒ์ ํ์ธ ๊ฐ๋ฅํจ
โก ์ฆ, 1) ์ฝ๋๊ฐ ์คํ๋๊ธฐ ์ํด์ ์คํ๋ง ํ๋ ์์ํฌ๊ฐ ๋์ํ๊ณ , 2) ๋์ํ๋ ๊ณผ์ ์์ ํ์ํ ๊ฐ์ฒด๋ค์ด ์คํ๋ง์ ๋ฑ๋ก๋๊ณ (@ContextConfiguration), 3) ์์กด์ฑ ์ฃผ์ ์ด ํ์ํ ๊ฐ์ฒด๋ ์๋์ผ๋ก ์ฃผ์ ์ด ์ด๋ฃจ์ด์ก๋ค(@Autowired)
๐ก์ฝ๋์ ์ฌ์ฉ๋ ์ด๋ ธํ ์ด์
Lombok ๊ด๋ จ ์ด๋ ธํ ์ด์ | Spring ๊ด๋ จ ์ด๋ ธํ ์ด์ | Test ๊ด๋ จ ์ด๋ ธํ ์ด์ |
---|---|---|
@Setter | @Autowired | @RunWith |
@Data | @Component | @ContextConfiguration |
@Log4j | @Test |
@Setter
: setter๋ฉ์๋๋ฅผ ์์ฑํด์ฃผ๋ ์ญํ / 3๊ฐ์ง ์์ฑ(value, onMethod, onParam)์ ๋ถ์ฌํ ์ ์์
- value : ์ ๊ทผ ์ ํ ์์ฑ
- onMethod : setter๋ฉ์๋ ์์ฑ์ ๋ฉ์๋์ ์ถ๊ฐํ ์ด๋ ธํ ์ด์ ์ ์ง์ ํจ (@Setter(onMethod_={@AnnotationGohere})
- onParam : setter๋ฉ์๋์ ํ๋ผ๋ฏธํฐ์ ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์ ์ฉํจ
@Data
: @ToString, @EqualsAndHashCode, @Getter/@Setter, @RequiredArgsConstructor๋ฅผ ๋ชจ๋ ๊ฒฐํฉํ ํํ๋ก ํ๋ฒ์ ์์ฃผ ์ฌ์ฉ๋๋ ๋ชจ๋ ๋ฉ์๋๋ฅผ ์์ฑํ ์ ์์ (์ธ๋ถ์ค์ ์ด ํ์์๋ ๊ฒฝ์ฐ ํ๋ฒ์ ์ฌ์ฉ)
@Log4j
: ๋ก๊ทธ๊ฐ์ฒด๋ฅผ ์์ฑ
@Log๋ฅผ ํด๋์ค์ชฝ์ ๋ถ์ฌ๋๋ฉด ๋ด๋ถ์ ์ผ๋ก static final๋ก Logger๊ฐ์ฒด๊ฐ ์์ฑ๋๋ฏ๋ก ๊ฐ๋ฐ์ ๋ณ๋์ ๋ก๊ทธ๋ฅผ ์ค์ ํ ํ์์์ด ํ์ํ ์ฝ๋๋ฅผ ๋ง๋ค์ด๋ผ ์ ์์. 'Spring Legacy Progject'๋ก ์์ฑํ ๊ฒฝ์ฐ์๋ ๊ธฐ๋ณธ์ ์ผ๋ก Log4j ์ค์ ์ด ๋์ด์๊ธฐ ๋๋ฌธ์ ์ถ๊ฐ์ ์ธ ์ค์ ํ์์์ด @Log4j๋ง์ผ๋ก๋ ๋ก๊ทธ๊ฐ์ฒด๋ฅผ ์ค๋นํ ์ ์์
@Component
: ํด๋น ํด๋์ค๊ฐ ์คํ๋ง์์ ๊ฐ์ฒด๋ก ๋ง๋ค์ด์ ๊ด๋ฆฌํ๋ ๋์์์ ๋ช
์
@ComponentScan์ ํตํด์ @Component๊ฐ ์๋ ํด๋์ค๋ฅผ ์คํ๋ง์ด ์ฝ์ด์ฃผ๋๋ก ์ง์ ํ๋ค๋ฉด, ํด๋น ํจํค์ง๊ฐ ์๋ ํด๋์ค๋ค์ ์กฐ์ฌํ๋ฉด์ @Component๊ฐ ์กด์ฌํ๋ ํด๋์ค๋ค์ ๊ฐ์ฒด๋ก ์์ฑํ์ฌ ๋น์ผ๋ก ๊ด๋ฆฌํจ
@Autowired
: ์คํ๋ง ๋ด๋ถ์์ ์์ ์ด ํน์ ํ ๊ฐ์ฒด์ ์์กด์ ์ด๋ฏ๋ก ์์ ์๊ฒ ํด๋น ํ์
์ ๋น์ ์ฃผ์
ํด์ฃผ๋ผ๋ ํ์
์คํ๋ง์ @Autowired ์ด๋
ธํ
์ด์
์ ๋ณด๊ณ ์คํ๋ง ๋ด๋ถ์ ๊ด๋ฆฌ๋๋ ๊ฐ์ฒด๋ค ์ค์ ์ ๋นํ ๊ฒ์ด ์๋์ง๋ฅผ ํ์ธํ๊ณ , ์๋์ผ๋ก ์ฃผ์
ํจ
@ContextConfiguratio
: ์คํ๋ง์ด ์คํ๋๋ฉด์ ์ด๋ค ์ค์ ์ ๋ณด๋ฅผ ์ฝ์ด ๋ค์ฌ์ผํ๋์ง ๋ช ์ํจ
@Runwith
: ํ ์คํธ์ ํ์ํ ํด๋์ค ์ง์ . ์คํ๋ง์ SpringJUnit4ClassRunner ํด๋์ค๊ฐ ๋์์ด ๋จ
@Test
: junit์์ ํด๋น ๋ฉ์๋๊ฐ jUnit์์์ ๋จ์ํ ์คํธ์ ๋์์ธ์ง ์๋ ค์ค
๐ AOP (Aspect-Oriented-Programming)์ง์
: AOP๋ฐฉ์์ ๊ด์ ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ๋๋ค. ์ด๋ 'ํก๋จ ๊ด์ฌ์ฌ(๋ฐ๋์ ์ฒ๋ฆฌ๊ฐ ํ์ํ ๋ถ๋ถ)'์ ๋ชจ๋๋ก ๋ถ๋ฆฌํ๋ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์ ๋๋ค. ์ด๋ฅผ ํตํด ๊ฐ๋ฐ์๋ ํต์ฌ ๋น์ง๋์ค ๋ก์ง์ ์ง์คํ์ฌ ์ฝ๋๋ฅผ ๊ฐ๋ฐํ ์ ์๊ณ , ๊ฐ ํ๋ก์ ํธ๋ง๋ค ๋ค๋ฅธ ๊ด์ฌ์ฌ๋ฅผ ์ ์ฉํ ๋ ์ฝ๋ ์์ ์ ์ต์ํํ ์ ์์ผ๋ฉฐ ์ํ๋ ๊ด์ฌ์ฌ์ ์ ์ง๋ณด์๊ฐ ์์ํ ์ฝ๋๋ฅผ ๊ตฌ์ฑํ ์ ์์ต๋๋ค.
๐ ํธ๋ฆฌํ MVC ๊ตฌ์กฐ
๐ WAS์ ์ข ์์ ์ด์ง ์์ ๊ฐ๋ฐํ๊ฒฝ
โ๏ธ์๋ฐ Refelction
๊ฐ์ฒด๋ฅผ ํตํด ํด๋์ค์ ์ ๋ณด๋ฅผ ๋ถ์ํด๋ด๋ ํ๋ก๊ทธ๋๋ฐ ๊ธฐ๋ฒ
์๋ฐ ์คํ๋ง์ ๊ณต๋ถํ๊ธฐ ์ ์ '์๋ฐ reflection'์ด๋ผ๋ ๊ฐ๋ ์ ๋จผ์ ํ์ ํ๋ฉด, ์๋ฐ ์คํ๋ง์ ๋ํด ์กฐ๊ธ์ ๋ ์ดํดํ๊ธฐ๊ฐ ์์ํฉ๋๋ค.
์คํ๋ง์ ํต์ฌ์ BeanFactory๋ผ๋ Spring Factory์ธ๋ฐ, ์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ ํ ๊ฐ์ฒด๊ฐ ํธ์ถ๋ ๋น์์ ๊ฐ์ฒด ์ธ์คํด์ค๋ฅผ ์์ฑํฉ๋๋ค. ์ด๋ ํ์ํ ๊ธฐ์ ์ reflection ์ด๋ผ๊ณ ํฉ๋๋ค.
reflection์ ์คํ์ค์ธ ์๋ฐํ๋ก๊ทธ๋จ ๋ด๋ถ๋ฅผ ๊ฒ์ฌํ๊ณ , ๋ด๋ถ์ ์์ฑ์ ์์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
(โก ์ด๋ค ์๋ฐ ํด๋์ค๊ฐ ๊ฐ์ง ๋ชจ๋ ๋ฉค๋ฒ์ ์ด๋ฆ์ ์ป๊ฑฐ๋ ๋ณด์ฌ์ค)
๐ก๊ธฐ์กด์ ๋ถ๊ธฐ ๋ฐฉ์
๊ธฐ๋ณธ์ ์ผ๋ก ํจ์๋ if(๋ถ๊ธฐ)๋ฌธ์ ์ฌ์ฉํ์ฌ ๊ฒฝ๋ก๋ฅผ ์ฐพ์๋ด์ง๋ง
์์๊ฐ์ด
if (๊ฐ =/user){
user();
}
๋ถ๊ธฐ๊ฐ ๊ณ์ ๋์ด๋๋ค๋ฉด ๊ณ์ IF๋ฌธ์ ์์ฑํด์ค ์ ์๋ค. ๋ํ, ์๊ณ ์๋ ํจ์๋ค์ ํํด IF๋ฌธ์ ์ฌ์ฉํ ์ ์๋ค.
ํ์ง๋ง reflection์ ์ฌ์ฉํ๋ค๋ฉด ์ด๋ค ํจ์(๊ณ ์ ๋์ด ์์ง ์์)๊ฐ ๋ค์ด์ค๋ฉด ์ปจํธ๋กค๋ฌ์ ์๋ ํจ์๋ฅผ ์ฐพ์๋ผ ์ ์๋ค.
์ด์ ๊ฐ์ด ์๋ฐ ์คํ๋ง์ ์ด๋ ธํ ์ด์ ์ ํ์ฉํ ์๋ฐ reflection์ ๊ธฐ์ด์ ๋๊ณ ์๋ ๊ฒ์ ์ ์ ์๋ค.
Author And Source
์ด ๋ฌธ์ ์ ๊ดํ์ฌ(๐ฑJAVA SPRING_์๋ฐ ์คํ๋ง์ ๊ธฐ์ด ๊ฐ๋ ), ์ฐ๋ฆฌ๋ ์ด๊ณณ์์ ๋ ๋ง์ ์๋ฃ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ ๋ณด์๋ค https://velog.io/@hyebbi99/JAVA์๋ฐ-์คํ๋ง์-๊ธฐ์ด-๊ฐ๋ ์ ์ ๊ท์: ์์์ ์ ๋ณด๊ฐ ์์์ URL์ ํฌํจ๋์ด ์์ผ๋ฉฐ ์ ์๊ถ์ ์์์ ์์ ์ ๋๋ค.
์ฐ์ํ ๊ฐ๋ฐ์ ์ฝํ ์ธ ๋ฐ๊ฒฌ์ ์ ๋ (Collection and Share based on the CC Protocol.)
์ข์ ์นํ์ด์ง ์ฆ๊ฒจ์ฐพ๊ธฐ
๊ฐ๋ฐ์ ์ฐ์ ์ฌ์ดํธ ์์ง
๊ฐ๋ฐ์๊ฐ ์์์ผ ํ ํ์ ์ฌ์ดํธ 100์ ์ถ์ฒ ์ฐ๋ฆฌ๋ ๋น์ ์ ์ํด 100๊ฐ์ ์์ฃผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์ ํ์ต ์ฌ์ดํธ๋ฅผ ์ ๋ฆฌํ์ต๋๋ค