https://multifrontgarden.tistory.com/315
인터페이스
interface SocialLogin {
void login(String clientKey); // 공통된 기능만 정의
}
구현클래스
class NaverLogin implements SocialLogin {
private String userId;
private boolean isAgreed;
public NaverLogin(String userId, boolean isAgreed) {
this.userId = userId;
this.isAgreed = isAgreed;
}
@Override
public void login(String clientKey) {
System.out.println("Naver 로그인: userId=" + userId + ", isAgreed=" + isAgreed + ", clientKey=" + clientKey);
}
}
class KakaoLogin implements SocialLogin {
private String userId;
public KakaoLogin(String userId) {
this.userId = userId;
}
@Override
public void login(String clientKey) {
System.out.println("Kakao 로그인: userId=" + userId + ", clientKey=" + clientKey);
}
}
class GoogleLogin implements SocialLogin {
private String userToken;
public GoogleLogin(String userToken) {
this.userToken = userToken;
}
@Override
public void login(String clientKey) {
System.out.println("Google 로그인: userToken=" + userToken + ", clientKey=" + clientKey);
}
}
클라이언트
class SocialLoginClient {
private SocialLogin login;
// 생성자 주입
public SocialLoginClient(SocialLogin login) {
this.login = login;
}
public void performLogin(String clientKey) {
login.login(clientKey);
}
}
public class Main {
public static void main(String[] args) {
// 네이버 로그인 사용
SocialLogin naverLogin = new NaverLogin("naverUser123", true);
SocialLoginClient client1 = new SocialLoginClient(naverLogin);
client1.performLogin("naver-client-key");
// 카카오 로그인 사용
SocialLogin kakaoLogin = new KakaoLogin("kakaoUser456");
SocialLoginClient client2 = new SocialLoginClient(kakaoLogin);
client2.performLogin("kakao-client-key");
// 구글 로그인 사용
SocialLogin googleLogin = new GoogleLogin("googleToken789");
SocialLoginClient client3 = new SocialLoginClient(googleLogin);
client3.performLogin("google-client-key");
}
}
작동 원리 및 구조
- SocialLogin 인터페이스 정의:
- SocialLogin은 소셜 로그인에서 공통적으로 사용할 기능(여기서는 login(String clientKey))을 정의.
- NaverLogin, KakaoLogin, GoogleLogin 클래스는 이 인터페이스를 구현
- 구현 클래스(NaverLogin):
- NaverLogin 클래스는 네이버 소셜 로그인을 담당하며, 인터페이스에서 정의된 메서드(login)를 구현
- 이 클래스는 네이버 로그인에 필요한 고유한 정보(userId, isAgreed)를 관리
- 클라이언트(SocialLoginClient):
- SocialLoginClient는 SocialLogin 인터페이스에 의존하며, 이를 통해 구체적인 구현체(NaverLogin, KakaoLogin 등)를 알 필요가 없음
- 생성자를 통해 SocialLogin 인터페이스를 구현한 객체(naverLogin)를 주입
- 객체 생성 및 실행:
구현체 객체 생성
SocialLogin naverLogin = new NaverLogin("naverUser123", true);
클라이언트 객체 생성
SocialLoginClient client1 = new SocialLoginClient(naverLogin);
로그인 실행
client1.performLogin("naver-client-key");
'Java' 카테고리의 다른 글
LSP (0) | 2024.12.29 |
---|---|
리스트처리(for -> forEach), switch (enum), Null(Optional) (1) | 2024.12.25 |
클라이언트 ip 가져오기 (0) | 2024.12.24 |
추상 클래스 / 인터페이스 (0) | 2024.12.20 |
캡슐화 (0) | 2024.12.17 |