언리얼 엔진 - 게임 프로젝트/AWS GameLift를 활용한 데디케이트 FPS 프로젝트

Access Tokens - 4) 의존성 주입

monstro 2026. 6. 18. 11:20
728x90
반응형

- 개요

의존성 주입클래스 내부에서 필요한 객체를 스스로 만드는 것이 아닌 외부에서 주입받아 사용하는 개념이다

이를 통해 다른 클래스와의 의존도는 감소시키고 코드의 재사용성유지보수성은 증가시킬 수 있다

이때 의존성 주입은 인터페이스를 통해 구현할 수 있다

 

- 인터페이스 : 의존성 주입의 구현

1) 인터페이스를 사용하지 않는 코드

// 자바 코드 예시

class KumhoTire { 
	... 
}

class Car {
    private KumhoTire tire;

    public Car() {
        // Car 클래스가 KumhoTire 클래스에 종속
        this.tire = new KumhoTire(); 
    }
}

 

인터페이스를 사용하지 않는 경우 Car 클래스가 tire 변수의 객체를 생성하는 경우

위와 같이 KumhoTire 클래스에 종속적인 것을 확인할 수 있다

 

2) 인터페이스를 사용하는 코드

// 자바 코드 예시

interface Tire {
    void roll();
}

class KumhoTire implements Tire { 
	public void roll() { System.out.println("저는 금호 타이어입니다."); } 
}
class MichelinTire implements Tire { 
	public void roll() { System.out.println("저는 미쉐린 타이어입니다"); } 
}

class Car {
	// 인터페이스를 통해 특정 클래스에 의존하지 않게 됨
    private Tire tire; 

    // 생성자 주입(외부에서 특정 클래스를 주입받아 tire 변수의 객체를 생성)
    public Car(Tire tire) {
        this.tire = tire;
    }
}

 

인터페이스를 사용하는 경우 Car 클래스는 더 이상 특정 클래스에 종속되지 않고

외부에서 의존성 주입을 통해 특정 클래스 타입의 tire 변수의 객체를 생성할 수 있는 것을 확인할 수 있다

 

- 스크립트 작업

1) PortalManagement 인터페이스

 

토큰을 재발급하는 RefreshTokens 함수순수 가상함수를 들고 있는 PortalManagement 인터페이스를 추가한다

해당 인터페이스를 사용하여 Portal 중재자 클래스와 LocalPlayerSubsystem간의 의존성을 제거한다

 

2) PortalManager 클래스

 

Portal 중재자 클래스상속관계에 PortalManagement 인터페이스를 추가하고

RefreshTokens 멤버함수에 virtual 키워드를 추가한다

 

3) DSLocalPlayerSubsystem 클래스

 

DSLocalPlayerSubsystem 클래스에서 Portal 중재자 클래스와의 연관성을 제거한다

또, PortalManager 멤버변수 대신 PortalManagementInterface 멤버변수를 사용한다

외부에서 토큰을 초기화하는 InitializeTokens 함수를 호출하면서 주입하여 PortalManagementInterface의 값을 설정한다

 

 

InitializeTokens 함수의 로직을 위와 같이 수정하여

외부에서 주입한 PortalManagement 매개변수를 사용하여 PortalManagementInterface의 값을 설정한다

 

 

SetRefreshTokenTimer 함수의 로직을 위와 같이 수정하여

PortalManagementInterface를 상속받아 구현한 Object가 있는지 확인하고

하단의 람다 함수에서 오버라이드된 RefreshTokens 함수를 호출한다

728x90
반응형