Adapter

ν˜Έν™˜λ˜μ§€ μ•ŠλŠ” μΈν„°νŽ˜μ΄μŠ€λ₯Ό 가진 κ°œμ²΄κ°€ ν•¨κ»˜ μž‘λ™ν•  수 μžˆλ„λ‘ ν•˜λŠ” ꡬ쑰적 λ””μžμΈ νŒ¨ν„΄

μ΄λŠ” ν˜Έν™˜λ˜μ§€ μ•ŠλŠ” 두 μΈν„°νŽ˜μ΄μŠ€ μ‚¬μ΄μ˜ λΈŒλ¦¬μ§€ 역할을 ν•˜μ—¬ κΈ°μ‘΄ 클래슀의 μ†ŒμŠ€ μ½”λ“œλ₯Ό λ³€κ²½ν•˜μ§€ μ•Šκ³ λ„ ν˜Έν™˜λ˜λ„λ‘ λ§Œλ“ λ‹€. 이 νŒ¨ν„΄μ€ μž¬μ‚¬μš©ν•˜κ±°λ‚˜ μƒˆ μ‹œμŠ€ν…œμ— ν†΅ν•©ν•˜λ €λŠ” κΈ°μ‘΄ 클래슀(λ˜λŠ” μ‹œμŠ€ν…œ)κ°€ μžˆμ§€λ§Œ ν•΄λ‹Ή μΈν„°νŽ˜μ΄μŠ€κ°€ μƒˆ μ‹œμŠ€ν…œμ— ν•„μš”ν•œ 것과 μΌμΉ˜ν•˜μ§€ μ•Šμ„ λ•Œ μœ μš©ν•˜λ‹€.

μ–΄λŒ‘ν„° νŒ¨ν„΄μ˜ ꡬ성

  • λŒ€μƒ μΈν„°νŽ˜μ΄μŠ€: ν΄λΌμ΄μ–ΈνŠΈ μ½”λ“œκ°€ μ‚¬μš©ν•  μΈν„°νŽ˜μ΄μŠ€

  • Adaptee: μˆ˜μ •ν•˜λ €λŠ” κΈ°μ‘΄ 클래슀 λ˜λŠ” μ‹œμŠ€ν…œ

  • Adapter: Adapteeκ°€ λŒ€μƒ μΈν„°νŽ˜μ΄μŠ€μ™€ ν˜Έν™˜λ˜λ„λ‘ λ³€ν™˜ν•˜λŠ” 클래슀

// 적용 μ‹œν‚€λ €λŠ” κΈ°μ‘΄ μ‹œμŠ€ν…œ
class OldSystem {
    public double getTemperatureInCelsius() {
        return 59.0;
    }
}

// μƒˆλ‘œμš΄ μ‹œμŠ€ν…œμ„ μœ„ν•œ μΈν„°νŽ˜μ΄μŠ€
interface NewSystemInterface {
    double getTemperatureInCelsius();

    double getTemperatureInFahrenheit();
}

// κΈ°μ‘΄ μ‹œμŠ€ν…œμ„ μƒˆλ‘œμš΄ μ‹œμŠ€ν…œμ— μ μš©ν•˜κΈ° μœ„ν•œ μ–΄λŒ‘ν„°
class Adapter extends OldSystem implements NewSystemInterface {
    @Override
    public double getTemperatureInCelsius() {
        return super.getTemperatureInCelsius();
    }

    @Override
    public double getTemperatureInFahrenheit() {
        return (getTemperatureInCelsius() * 9 / 5) + 32;
    }
}

class Client {
    public static void main(String[] args) {
        NewSystemInterface newSystem = new Adapter();

        double celsiusTemperature = newSystem.getTemperatureInCelsius();
        double fahrenheitTemperature = newSystem.getTemperatureInFahrenheit();

        System.out.println("섭씨 μ˜¨λ„: " + celsiusTemperature);
        System.out.println("화씨 μ˜¨λ„: " + fahrenheitTemperature);
    }
}

μ–΄λŒ‘ν„° νŒ¨ν„΄μ˜ 이점

  • μž¬μ‚¬μš©μ„±: μƒˆ μ½”λ“œμ™€ ν˜Έν™˜λ˜μ§€ μ•ŠλŠ” κΈ°μ‘΄ 클래슀 μž¬μ‚¬μš© κ°€λŠ₯

  • 관심사항 뢄리: Adaptee μž‘λ™ 방식에 λŒ€ν•œ 세뢀사항과 ν΄λΌμ΄μ–ΈνŠΈ μ½”λ“œλ₯Ό 뢄리

  • μœ μ—°μ„±: μ—¬λŸ¬ Adapteeλ₯Ό 단일 λŒ€μƒ μΈν„°νŽ˜μ΄μŠ€μ— μ μš©ν•  수 μžˆμ–΄ μœ μ—°μ„±μ΄ ν–₯상

  • λ ˆκ±°μ‹œ μ‹œμŠ€ν…œ 톡합: μ½”λ“œλ₯Ό λ³€κ²½ν•˜μ§€ μ•Šκ³  λ ˆκ±°μ‹œ μ‹œμŠ€ν…œμ„ μ΅œμ‹  μ‹œμŠ€ν…œμ— 톡합할 수 있음

μ–΄λŒ‘ν„° νŒ¨ν„΄ μ‚¬μš© μ‚¬λ‘€μ˜ 예

  • 라이브러리 톡합: μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μΈν„°νŽ˜μ΄μŠ€ μš”κ΅¬ 사항을 μ€€μˆ˜ν•˜μ§€ μ•ŠλŠ” λΌμ΄λΈŒλŸ¬λ¦¬κ°€ μžˆλŠ” 경우 κ°€λŠ₯ν•œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ œκ³΅ν•˜λŠ” μ–΄λŒ‘ν„° μƒμ„±ν•˜μ—¬ 라이브러리λ₯Ό μ‚¬μš©

  • ν•˜λ“œμ›¨μ–΄ 톡합: ν•˜λ“œμ›¨μ–΄ μž₯치λ₯Ό λ‹€λ£° λ•Œ μ–΄λŒ‘ν„°λ₯Ό μ‚¬μš©ν•˜μ—¬ ν•˜λ“œμ›¨μ–΄μ™€ μ†Œν”„νŠΈμ›¨μ–΄ κ°„ ν˜Έν™˜μ„±μ„ 제곡

  • API 버전 ν˜Έν™˜μ„±: APIκ°€ λ³€κ²½λ˜κ±°λ‚˜ μ—…λ°μ΄νŠΈλ  λ•Œ 이전 λ²„μ „μ˜ APIμ™€μ˜ ν˜Έν™˜μ„±μ„ μœ μ§€ν•˜κΈ° μœ„ν•΄ μ–΄λŒ‘ν„°λ₯Ό μ‚¬μš©

  • λ°μ΄ν„°λ² μ΄μŠ€ λ“œλΌμ΄λ²„: μ–΄λŒ‘ν„°λ₯Ό μ‚¬μš©ν•˜λ©΄ λ‹€μ–‘ν•œ λ°μ΄ν„°λ² μ΄μŠ€ λ“œλΌμ΄λ²„κ°€ 곡톡 λ°μ΄ν„°λ² μ΄μŠ€ μ•‘μ„ΈμŠ€ μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•˜λ„λ‘ ν•  수 있음(예: JDBC)

μš”μ•½ν•˜λ©΄, μ–΄λŒ‘ν„° νŒ¨ν„΄μ€ ν˜Έν™˜λ˜μ§€ μ•ŠλŠ” 두 μΈν„°νŽ˜μ΄μŠ€ μ‚¬μ΄μ˜ λ³€ν™˜κΈ° 역할을 ν•˜μ—¬ 두 μΈν„°νŽ˜μ΄μŠ€κ°€ μ›ν™œν•˜κ²Œ ν•¨κ»˜ μž‘λ™ν•  수 μžˆλ„λ‘ ν•œλ‹€.

Last updated