2023. 3. 14. 10:23ใJAVA/Effective JAVA
item24. ๋ฉค๋ฒ ํด๋์ค๋ ๋๋๋ก static์ผ๋ก ๋ง๋ค๋ผ.
" p.147. ์ด๋ํฐ"
[์ดํํฐ๋ธ ์๋ฐ] Item24. ๋ฉค๋ฒ ํด๋์ค๋ ๋๋๋ก static์ผ๋ก ๋ง๋ค๋ผ. (tistory.com)
๋น์ ์ ๋ฉค๋ฒ ํด๋์ค๋ ์ด๋ํฐ๋ฅผ ์ ์ํ ๋ ์ฃผ๋ก ์ฌ์ฉ๋๋ค๊ณ ํ๋ค.
์ด๋ ์ด๋ํฐ ํจํด์ด๋?
: ๊ธฐ์กด ์ฝ๋๋ฅผ ํด๋ผ์ด์ธํธ๊ฐ ์ฌ์ฉํ๋ ์ธํฐํ์ด์ค์ ๊ตฌํ์ฒด๋ก ๋ฐ๊ฟ์ฃผ๋ ํจํด์ ๋งํ๋ค.
์ฆ, ์ฝ๋๋ฅผ ์ฌ์ฌ์ฉํ๊ธฐ ์ํด์ ๊ตฌ์กฐ๋ฅผ ๋ณ๊ฒฝํ๋ ํจํด์ด๋ค.
ํด๋ผ์ด์ธํธ๊ฐ ์ฌ์ฉํ๋ ์ธํฐํ์ด์ค๋ฅผ ๋ฐ๋ฅด์ง ์๋ ๊ธฐ์กด ์ฝ๋๋ฅผ ์ฌ์ฌ์ฉํ ์ ์๊ฒ ํด์ค๋ค.
Target
: ํด๋ผ์ด์ธํธ๊ฐ ์ฌ์ฉํ๊ธธ ์ํ๋ ์ธํฐํ์ด์ค
Adaptee
: ํด๋ผ์ด์ธํธ๊ฐ ๊ฐ๊ณ ์๋ ์ธํฐํ์ด์ค
Adpater
: target ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ํด๋์ค, ์ด๋ Adpatee์ ํจ์๋ฅผ ์ฌ์ฉํจ
Client
: Target ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ ์ฃผ์ฒด
public class AdapterInJava
{
public static void main(String[] args)
{
// ์ด๋ํฐ ํจํด์ ๋ํ์ ์ธ ์์
try (InputStream is = new FileInputStream("number.txt");
InputStreamReader isr = new InputStreamReader(is);
BufferedReader reader = new BufferedReader(isr))
{
while (reader.ready())
{
System.out.println(reader.readLine());
}
}
catch (IOException e)
{
throw new RuntimeException(e);
}
}
}
InputStream, InputStreamReader, BufferedReader๊ฐ ์ด๋ํฐ ํจํด์ ์ฌ์ฉํ๋ ๋ํ์ ์ธ ์์ ๋ผ๊ณ ํ ์ ์๋ค.
public class MySet<E> extends AbstractSet<E>
{
@Override
public Iterator<E> iterator()
{
return new MyIterator();
}
@Override
public int size()
{
return 0;
}
// ์ด๋ํฐ ํจํด
private class MyIterator implements Iterator<E>
{
@Override
public boolean hasNext()
{
return false;
}
@Override
public E next()
{
return null;
}
}
}
๊ทธ๋ฆฌ๊ณ MyIterator ์ญ์ ์ด๋ํฐ ํจํด์ ์ฌ์ฉํ ์์ ์ด๋ค.
๐ ์ ๋ฆฌ
์ด๋ํฐ ํจํด์ ๊ธฐ๋ฅ์ ๋ฌธ์ ์์ด ๋์ํ๋ ์ฝ๋๊ฐ ๋จ์ง ์ธํฐํ์ด์ค ์ฐจ์ด ๋๋ฌธ์ ์ฌ์ฉํ ์ ์๋ ๊ฒฝ์ฐ ๋ง์ด ์์ฉ๋๋ ํจํด์ด๋ค.
๋ํ ๊ธฐ์กด ์ฝ๋์ ์ค๋ฅ๊ฐ ์๊ฑฐ๋ ๋ณด์ ์์ ์ด ํ์ํ ๊ฒฝ์ฐ์๋ ์ ์ฉํ๊ฒ ์ฌ์ฉ๋๋ค.
์ด๋ํฐ ํจํด์ ์ค๋ฌด์์๋ ๋ง์ด ์ฌ์ฉ๋๋๋ฐ, ์ค๋๋ ๋ ๊ฑฐ์ ์ฝ๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฌ์ฉํ ๋ ์ ์ฉํ๋ค. ๊ทธ๋ฆฌ๊ณ ์๋ก ํธํ๋์ง ์๋ ์ธํฐํ์ด์ค๋ฅผ ๊ฐ์ง ์ฝ๋๋ฅผ ๊ฒฐํฉํ์ฌ ์์ฉ ํ๋ก๊ทธ๋จ์์ ๋์ํ ์ ์๋๋ก ๋์์ค๋ค.