๊ทธ ์ค์ ๋ค์ํ ํ๊ฒฝ๊ณผ ์ํฉ์ ๋ฐ๋ผ์ ์๊ฒฌ์ด ๋ถ๋ถํ ๋ฃฐ์ด AvoidInstantiatingObjectsInLoops ์ ๋๋ค.
์์ธํ ์ค๋ช ์ ์ดํด๋ณด๋ฉด,..
** AvoidInstantiatingObjectsInLoops
------------------------------------------------------------------------------------------------------------
Since: PMD 2.2
Detects when a new object is created inside a loop
This rule is defined by the following Java
class:net.sourceforge.pmd.rules.optimization.AvoidInstantiatingObjectsInLoops
Example:
public class Something {
public static void main( String as[] ) {
for (int i = 0; i < 10; i++) {
Foo f = new Foo(); //Avoid this whenever you can it's really
expensive
}
}
}
------------------------------------------------------------------------------------------------------------
์ด๋ผ๊ณ ๋์ค๊ณ , Optimization Rule์ ํด๋นํ๋ ์ฌํญ์ ๋๋ค.
๊ฐ๋จํ๊ฒ ๋ง์๋๋ ค์ loop์์์ ๋ฐ๋ณต์ ์ผ๋ก ์ฌ์ฉํ๋ ๊ฐ์ฒด์ ๊ฒฝ์ฐ ๋ฃจํ ๋ฐ์์ ์์ฑํ๊ณ ์ฌํ์ฉํ๋ผ๋ ์๋ฏธ์ธ๋ฐ.
์๋ ๋ฉ์๋๋ฅผ ํ๋ฒ ๋ณด์์ฃ .(Service์์ ์ฌ์ฉํ๋ ๋ฉ์๋ ์ ๋๋ค.)
public List sampleAbcList(List inList){//DB์์ DVO์ ์ ๋ณด๋ฅผ ๋ฃ์ด์ List๋ก ์ ๋ฌ
List returnList = new ArrayList();
Iterator itr = inList.iterator();
while(itr.hasNext()){
//๋ฆฌ์คํธ์์ ํ๋์ฉ ๊บผ๋ด์ ๊ฐ๊ณตํจ
AbcDVO dvo = new AbcDVO(); //--------(1)
dvo = (AbcDVO) itr.next();
dvo.setLoginEpno(session.getLognEpno());
dvo.setScnId(session.getScnId());
dvo.setLastChgPsEpno(session.getEpno());
returnList.add(dvo);
}
return returnList;
}
์์ ๊ฒฝ์ฐ, inList๋ DB์์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์จ ๋ด์ฉ์ด๊ณ , ์ด๋ฅผ ํ๋์ฉ ๊บผ๋ด์ ๊ฐ๊ณตํด์ ๋ค์ ๋ฃ๋ ๊ฒฝ์ฐ์ธ๋ฐ..
์ด ๊ฒฝ์ฐ ์ฒ์ ๋ง์๋๋ฆฐ Rule์ ํ์ฉํด์ ๊ฐ์ฒด์์ฑ(1)์ while ๋ฐ์์ ์์ฑํด์ ์ฌํ์ฉํด์ผ ํ๋ค ๋ผ๊ณ ๊ฐ์ด๋ํ๋ ๊ฒ์ด
1) ๋ฌธ์ ์ ์ด ์๋์ง
2) ์ด๋์ ์ป์ ์ ์๋์ง
๋ผ๋ ์ธก๋ฉด์ด ์ด์ ์
๋๋ค.
rule ์๋ฐ์ ํด๊ฒฐํ๋ ค๋ฉด ์๋์ ๊ฐ์ด ์์ฑํ๋๋ฐ,
public List sampleAbcList(List inList){//DB์์ DVO์ ์ ๋ณด๋ฅผ ๋ฃ์ด์ List๋ก ์ ๋ฌ
List returnList = new ArrayList();
Iterator itr = inList.iterator();
AbcDVO dvo = new AbcDVO(); //--------(1)
while(itr.hasNext()){
//๋ฆฌ์คํธ์์ ํ๋์ฉ ๊บผ๋ด์ ๊ฐ๊ณตํจ
dvo = (AbcDVO) itr.next();
dvo.setLoginEpno(session.getLognEpno());
dvo.setScnId(session.getScnId());
dvo.setLastChgPsEpno(session.getEpno());
returnList.add(dvo);
}
return returnList;
}
์ด ๋ถ๋ถ์ ๋ํด์ ์ ์๊ฒฌ์ ์ด๋ ์ต๋๋ค.
(1) ๋ฌธ์ ์ ์ ์๋์ง...
- abcDVO๋ ์ด๋ฏธ DAO์์ ๋ง๋ค์ด์ inList๋ก ๋ด์์ ๋ณด๋ด๊ณ ์๊ณ
- ์ด๋ฅผ (1)์์ ์์ฑ๋ ๊ฐ์ฒด๋ ๋จ์ง ๋ฐ์์ ์ ๋ฌ๋ง ํ๋ฏ๋ก returnList์ ๋ด๊ธฐ๋ ๊ฐ์ฒด๋ inList์ DVO์
- ๋ฐ๋ผ์, (1)์ dvo๋ ์๋ณธ ๊ฐ์ฒด์ ๋ ํผ๋ฐ์ค๋ง ๋ด๊ณ ์๋ ๊ฐ์ฒด๊ฐ ๋จ
- ์ฌํ์ฉ์ ๋ฌธ์ ์์
(2) ์ด๋์ ์ป์ ์ ์๋์ง
- ๊ฐ๋ฐ์์ ์ต๊ด๊ณผ ๊ฒฝํ์ ๋ฐ๊ฟ ์ ๋๋ก ์๋ฏธ๊ฐ ์์๊น...์ ์ฌํญ์ธ๋ฐ,
์ ๋ด์ฉ์ ๋ณดํต ์กฐํ์ฑ ํ๋ฉด์ ๊ฒ์ํ ํ
์ด๋ธ์ ๋ด๊ธฐ๋ ๊ฒฝ์ฐ๊ฐ ๋๋ถ๋ถ์
๋๋ค.
- ์ฆ, List์ ์ฌ์ด์ฆ๊ฐ ๋ง์๋ 20~40๊ฐ ์ ๋ ๋ง๋ค์ด์ง๋๋ฐ.... ์ด๋ฅผ ํฐ ์ค๋ฅ๋ผ๊ณ ์๊ฐํ๊ณ ํด๊ฒฐํ๊ธฐ ์ํ
๋
ธ๋ ฅ์ ํ๋ ๊ฒ์ด ์ค์ํ๊ฐ. ๋ผ๋ ๋ถ๋ถ ์
๋๋ค.
- ์ฌ๊ธฐ์์๋ ๋ค์๊ฐ์ ๊ฒฌํด ์ฐจ์ด๊ฐ ์กด์ฌํ ์ ์์ต๋๋ค๋ง, ์ ์๊ฐ์๋
ํ์คํ ์ฌํญ์ ๋ํด์๋ง ๊ฐ๋ฐ์์ ์ต๊ด์ ๋ฐ๊พธ๋๋ก ํ๋ค
(์: obj.equals("String") --> "String".equals(obj) ์ผ๋ก null point
exception ๋ฐฉ์ง ๋ฑ)
์
๋๋ค.
๋ฐ๋ผ์, ๋ด๋ถ์ ์ผ๋ก๋ ์ ์ฌํญ์ ๊ฐ์ํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ๊ณ , ์กฐ์น๋ ๊ฐ์ ์ฌํญ์ด ์๋
๊ถ๊ณ ์ฌํญ์ผ๋ก ์ ๊ทผํ๋๊ฒ์ด ์ข๊ฒ ๋ค๋ ์๊ฐ์
๋๋ค.
๋ค๋ฅธ ๋ถ ์๊ฒฌ์ ์ด๋ ํ์ ์ง์?....
AbcDVO dvo = null;
--
Google ๊ทธ๋ฃน์ค 'Korea Spring User Group' ๊ทธ๋ฃน์ ๊ฐ์ ํ์ผ๋ฏ๋ก ๋ณธ ๋ฉ์ผ์ด ์ ์ก๋์์ต๋๋ค.
์ด ๊ทธ๋ฃน์ ๊ฒ์ํ๋ ค๋ฉด ks...@googlegroups.com(์ผ)๋ก ์ด๋ฉ์ผ์ ๋ณด๋ด์ธ์.
๊ทธ๋ฃน์์ ํํดํ๋ ค๋ฉด ksug+uns...@googlegroups.com๋ก ์ด๋ฉ์ผ์ ๋ณด๋ด์ฃผ์ธ์.
๋ ๋ง์ ์ต์ ์ ๋ณด๋ ค๋ฉด http://groups.google.com/group/ksug?hl=ko์์ ๊ทธ๋ฃน์ ๋ฐฉ๋ฌธํ์ธ์.
public List sampleAbcList(List inList){//DB์์ DVO์ ์ ๋ณด๋ฅผ ๋ฃ์ด์ List๋ก ์ ๋ฌ
List returnList = new ArrayList();
Iterator itr = inList.iterator();
while(itr.hasNext()){
//๋ฆฌ์คํธ์์ ํ๋์ฉ ๊บผ๋ด์ ๊ฐ๊ณตํจ
AbcDVO dvo = new AbcDVO((AbcDVO) itr.next());
dvo.setLoginEpno(session.getLognEpno());
dvo.setScnId(session.getScnId());
dvo.setLastChgPsEpno(session.getEpno());
returnList.add(dvo);
}
return returnList;
}
inList์์ ํ๋์ฉ ๋ฐ์์ ์ด๊ฒ์ ๋ณต์ฌํ ๋ค์์ (์ด ๊ณผ์ ์ ์ ๊ฐ์ฒด๊ฐ ์์ฑ
๋์ฃ ) ์ด๋ฅผ ๋ฐํํ ๋ฆฌ์คํธ(returnList)์ ๋ฃ๊ณ ๋ฐํํ๋...
> ์์ ๊ฒฝ์ฐ, inList๋ DB์์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์จ ๋ด์ฉ์ด๊ณ , ์ด๋ฅผ ํ๋์ฉ ๊บผ๋ด์ ๊ฐ๊ณตํด์ ๋ค์ ๋ฃ๋ ๊ฒฝ์ฐ์ธ๋ฐ..
> ์ด ๊ฒฝ์ฐ ์ฒ์ ๋ง์๋๋ฆฐ Rule์ ํ์ฉํด์ ๊ฐ์ฒด์์ฑ(1)์ while ๋ฐ์์ ์์ฑํด์ ์ฌํ์ฉํด์ผ ํ๋ค ๋ผ๊ณ ๊ฐ์ด๋ํ๋ ๊ฒ์ด
> 1) ๋ฌธ์ ์ ์ด ์๋์ง
์ด ๊ฒฝ์ฐ๋ PMD์ ๋ฃฐ์ด ์๋ชป์
๋๋ค. PMD๊ฐ ๋ ๋๋ํ๋ค๋ฉด ์ง์ ํ์ง ์์์ ๊ฒ
๊ฐ๋ค์.
> 2) ์ด๋์ ์ป์ ์ ์๋์ง
๊ฐ์ฒด ์์ฑ์ ๋ฐ์ผ๋ก ๋บ ์ ์์ต๋๋ค.
> rule ์๋ฐ์ ํด๊ฒฐํ๋ ค๋ฉด ์๋์ ๊ฐ์ด ์์ฑํ๋๋ฐ,
>
> public List sampleAbcList(List inList){//DB์์ DVO์ ์ ๋ณด๋ฅผ ๋ฃ์ด์ List๋ก ์ ๋ฌ
> List returnList = new ArrayList();
> Iterator itr = inList.iterator();
> AbcDVO dvo = new AbcDVO(); //--------(1)
> while(itr.hasNext()){
> //๋ฆฌ์คํธ์์ ํ๋์ฉ ๊บผ๋ด์ ๊ฐ๊ณตํจ
> dvo = (AbcDVO) itr.next();
> dvo.setLoginEpno(session.getLognEpno());
> dvo.setScnId(session.getScnId());
> dvo.setLastChgPsEpno(session.getEpno());
> returnList.add(dvo);
> }
> return returnList;
> }
>
> ์ด ๋ถ๋ถ์ ๋ํด์ ์ ์๊ฒฌ์ ์ด๋ ์ต๋๋ค.
> (1) ๋ฌธ์ ์ ์ ์๋์ง...
๋ฃจํ ๋ฐ์์ ์์ฑํ ๊ฐ์ฒด๋ ์ ํ ์ฌ์ฉ๋์ง ์์ต๋๋ค.
> (2) ์ด๋์ ์ป์ ์ ์๋์ง
1๋ฒ ์์ค์ ์๋ณธ์์ newํ ๊ฐ์ฒด๋ ์ด๋ฒ์ ๋ฐ์ผ๋ก ๋บ ๊ฐ์ฒด๋ ์ ํ ์ฌ์ฉ๋์ง
์์ต๋๋ค. ์ค๋ฅ์ด๋ ์ด๋์ ๋ฐ์ง ํ์๊ฐ ์๋ค์.
> - ์ฆ, List์ ์ฌ์ด์ฆ๊ฐ ๋ง์๋ 20~40๊ฐ ์ ๋ ๋ง๋ค์ด์ง๋๋ฐ.... ์ด๋ฅผ ํฐ ์ค๋ฅ๋ผ๊ณ ์๊ฐํ๊ณ ํด๊ฒฐํ๊ธฐ ์ํ ๋
ธ๋ ฅ์ ํ๋ ๊ฒ์ด ์ค์ํ๊ฐ. ๋ผ๋ ๋ถ๋ถ ์
๋๋ค.
20-40 ์ ๋๋๋ ๋ฆฌ์คํธ๋ฅผ ๋ง๋๋ ๊ฒ VM ์
์ฅ์์ ํฐ ๋ถํ๋ ์๋๋ผ๊ณ ์๊ฐํฉ
๋๋ค. ํ์ํ๋ฉด ๋ง๋ค์ด์ผ๊ฒ ์ฃ . ํ์ง๋ง ์ ์ด์ ์๋ณธ ์์ค์ ์ค๋ฅ๊ฐ ์์ด ์ฑ๋ฅ
์ ๋
ผํ ๋จ๊ณ๋ ์๋๋ผ๊ณ ์๊ฐํฉ๋๋ค.
๊ฒฐ๊ตญ ๋ณด์์๋ ๋ฌธ์ ์๊ณ (์ฐธ์กฐํ๋ ์๋ณธ์ด ๋ณ๊ฒฝ๋ ์ ์๊ณ ),
Loop์ ๋ค์ด๊ฐ์๋ง์ ๋ฐ๋ก ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋๋ฐ ๋ด๋ถ์์๋ ์ธ๋ถ์์๋ ์์ฑํ
๊ฐ์น๊ฐ ์๋ค ๋ผ๋ ์ธก๋ฉด์ผ๋ก ์ดํด ๋ฉ๋๋ค.
์ฑ์ฒ ๋์ ๋ง์(๋ด๊ฐ ์ฒ๋ฆฌ๋ฅผ ์์ฒญํ ์๋ณธ์ด ์๋ํ์ง ์๊ฒ ๋ณํด๋ฒ๋ฆฐ๋ค)๋ผ๋ ์ธก๋ฉด์
์ข ๋ ์ง์งํ๊ฒ ๊ณ ๋ฏผํด๋ณผ๊ป์. ์ด๋ป๊ฒ ์ฌ์ฉ๋๋์ง.. ์ข ๋ ์ดํด๋ด์ผ๊ฒ ์ต๋๋ค.
์๋์๋์ธ ๋ฃฐ ์๋ฐ์ ํ๋์ง ์ฌ๋ถ ๋ณด๋ค๋
์ด๋ค ์ด์ ๋ก ์ด๋ฐ ํ์์ ์ฝ๋ฉ์ ํ๋์ง ์ง์ผ๋ณด๋ ์ฉ๋๋ก ์จ์ผ๊ฒ ๊ตฐ์.
ํ์๊ฐ๋ ์๋์ด์ ์ด๋ ๊ฒ ๋จ๊ฑฐ์ด. ํธ์์ ๋ฐ์ผ๋.
๊ฐ์ฌ ํฉ๋๋ค.
> > ๊ทธ๋ฃน์์ ํํดํ๋ ค๋ฉด ksug+uns...@googlegroups.com<ksug%2Bunsu...@googlegroups.com>๋ก
์ ์ด์ PMD์ ๊ฒฝ๊ณ ๊ฐ ๋ฐ๋ณต๋ฌธ ์์์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๊ฒ ์ณ์์ง ์ฌ๋ถ์ธ๋ฐ ์ฌ
์ค ์ฌ๋ฆฌ์ ์์ค์์๋ ์ ์ด์ ๊ฐ์ฒด ์์ฑ์ด ๋ฌด์๋ฏธ ํ๊ธฐ ๋๋ฌธ์ ๊ฐ์ฒด ์์ฑ์ด
๋ฐ๋ณต๋ฌธ ์์์ ์๋ฏธ์๊ฒ ์ฌ์ฉ๋๋ ์ฌ๋ก๋ก ์ข ๋ฐ๊พธ์ด ๋ณธ ๊ฒ์
๋๋ค. ๋
ผ์ ์ด ์
์ค์ ๋ฌธ์ ๋ก ๋ฐ๋ ๊ฒ ๊ฐ์์์.
์์ฑํ๋์ด ํ ๋ก ํ๊ธฐ ์ํ์๋ ๊ฒ์ ๋ฃจํ์์์ ๊ฐ์ฒด๋ฅผ ์์ฑํจ์ผ๋ก์จ PMD์
๊ฒฝ๊ณ ๋ฅผ ๋ฐ์๋๋ฐ PMD์ ๊ฒฝ๊ณ ๋ฅผ ๋ฌด์ํด๋ ์ข์์ง, ์๋๋ฉด PMD์ ์ง์นจ์ ๋ฐ๋ผ
๋ณ๊ฒฝํด์ผ ํ๋์ง ๊ฐ์ต๋๋ค.
ํ์ง๋ง ๋จ์ํ DTO๊ฐ ์๋ ORM์ ์์ํ๋ ๊ฐ์ฒด๋ผ๋ฉด ๊ณ ๋ฏผํด์ผ ํ ๋ถ๋ถ์ ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ ๊ฐ ์๋ณธ์ ๋ณต์ฌํ๋ ๋ฒ์ ์ผ๋ก ๋ฐ๊พผ ์ด์ ๋ ์์ฑํ๋์ ์ง๋ฌธ ์๋๋ฅผ
๋ ๋ถ๊ฐํ๋ ค๊ณ ํ ๊ฒ ๋ฟ์
๋๋ค.