[프로그래머스 데브코스 백엔드 3기] 3일차, 인터페이스(Interface)

SSO·2022년 10월 19일
0

개발 일기

목록 보기
2/2

2022.10.19 (수)

Interface 라는 주제로 학습했습니다. 역시나 알고 있는 건 알고 있던 게 아니더군요 ~!~! 새롭게 배우는 느낌이어서 재밌고 좋았어요 :)


의존성 주입 (Dependency Injection)

외부에서 의존도를 높임으로써 외부에서 의존성을 주입한다.

UserService userService = new UserService(new KakaoLogin());
userService.login();

UserService 라는 객체에 KakaoLogin 이라는 구체적인 객체를 넣어 login() 기능을 호출했다. -> 외부 의존도 높아짐 -> 의존성 주입 (우와)


의존성 역전 법칙 (DIF)

구상체가 아닌, 추상체에 의존(결합)해서 구상체에 접근한다.


Factory 패턴

구체화 된 객체를 생성하는 디자인 패턴으로, 기능을 외부로 위임한다.

void run(LoginType loginType) {
	Login user = getLogin(loginType);
	user.login();
}

// factory 패턴
private static Login getLogin(LoginType loginType) {
	if(loginType == LoginType.Kakao) return new KakaoLogin();
	return new NaverLogin();
}

getLogin() 클래스에서 구체화 된 객체를 생성하고, 기능을 외부(run()) 클래스로 위임하였다.


인터페이스 추가 및 기능 확장

변경 없이 인터페이스를 추가해서 기능을 확장하는 게 무슨 말이야,,,
했는데 default 메소드 강의와 코드를 보면서 이해할 수 있었다 :)

class Duck implements Swimmable, Walkable {}
class Swan implements Flyable, Walkable, Swimmable {}

public class Main {
    public static void main(String[] args) {
        new Duck().swim();
        new Duck().walk();
        new Swan().swim();
        new Swan().walk();
        new Swan().fly();
    }
}

Duck 과 Swan 클래스에 인터페이스 상속을 추가하면서 기능을 확장할 수 있었다.

interface Flyable {
    default void fly() {
        System.out.println("FLY");
    }
}

interface Swimmable {
    default void swim() {
        System.out.println("SWIM");
    }
}

interface Walkable {
    default void walk() {
        System.out.println("WALK");
    }
}

default method는 상속받은 클래스 내에서 오버라이드 없이 호출 가능하기 때문이죠.

profile
쏘's 코딩·개발 일기장

0개의 댓글