2021. 04. 08(ネック)TIL
Java
関係です
インタフェース
インタフェースフィーチャー
public interface Sample {
public static final 데이터타입 상수명 = 값;
public abstract 반환타입 추상메소드명(타입 변수, 타입변수, ...);
}
インタフェースの定義
public interface Phone {
// 상수
public static final String MOBILE_TELECOMMUNICATION = "LTE";
// 추상 메소드(모든 하위 클래스 반드시 존재해야하는 기능은 추상메소드로 추상화)
void call();
void sms();
// 디폴트 메소드(모든 하위클래스가 동일하게 구현하는 기능은 디폴트 메소드로 인터페이스에서 구현)
default void on() {
전원 켜기
}
default void off() {
전원 끄기
}
}
クラスでのインタフェースの実装
クラスはimplementsキーワードを使用して実装するインタフェースを指定します.
インタフェースの実装
public interface Calculatable {
void addNumber(int x, int y);
int plus();
int minus();
}
public class SimpleCalculator implements Calculatable {
int x;
int y;
public void addNumber(int x, int y) {
this.x = x;
this.y = y;
}
public int plus() {
return x + y;
}
public int minus() {
return x - y;
}
}
1つ以上のインタフェースを実装
// 모든 하위 클래스가 반드시 포함해야 되는 기능을 정의한 인터페이스
public interface phone {
void call();
void sms();
}
// 인증 기능을 지원하는 모든 하위 클래스가 반드시 포함해야 되는 기능을 정의한 인터페이스
public interface Authenticatable {
void auth();
}
// 인터넷 기능을 지원하는 모든 하위 클래스가 반드시 포함해야 되는 기능을 정의한 인터페이스
public interface InternetAvailable {
void web();
}
// Phone 인터페이스를 구현한 NormalPhone
public class NormalPhone implements Phone {
String tel;
public void call() {
통화하기
}
public void sms() {
문자보내기
}
}
// NormalPhone 클래스를 상속받고, Authenticatable인터페이스와 IntenetAvailable인터페이스를 구현하는 클래스
public class SmartPhone extends NormalPhone implements Authenticatable, InternetAvailable {
String ip;
public void auth() {
사용자 인증하기
}
public void web() {
인터넷하기
}
}
インタフェースの使用
package day4;
public class User {
private String id;
private String name;
public User () {}
public User(String id, String name) {
this.id = id;
this.name = name;
}
public String getId() {
return id;
}
public String getName() {
return name;
}
}
package day4;
public class UserArrayRepository implements UserRepository {
private User[] db = new User[100];
private int position = 0;
public UserArrayRepository() {
db[position++] = new User("hong", "홍길동");
db[position++] = new User("kim", "김유신");
db[position++] = new User("lee", "이순신");
}
@Override
public void saveUser(User user) {
db[position++] = user;
}
@Override
public void removeUser(String id) {
// TODO Auto-generated method stub
}
@Override
public void updateUser(User user) {
// TODO Auto-generated method stub
}
@Override
public User getUserById(String id) {
User user = null;
for (User item : db) {
if (item == null) {
break;
}
if (item.getId().equals(id) ) {
user = item;
break;
}
}
return user;
}
}
package day4;
public class UserFileRepository implements UserRepository {
@Override
public void saveUser(User user) {
// TODO Auto-generated method stub
}
@Override
public void removeUser(String id) {
// TODO Auto-generated method stub
}
@Override
public void updateUser(User user) {
// TODO Auto-generated method stub
}
@Override
public User getUserById(String id) {
// TODO Auto-generated method stub
return null;
}
}
package day4;
public class UserManager {
// 사용자정보 등록 / 삭제 / 변경 / 조회 기능을 제공하는 객체에 대한 표준(인터페이스)사용
private UserRepository repo;
public void setRepo(UserRepository repo) {
this.repo = repo;
}
public UserManager() {}
public UserManager(UserRepository repo) {
super();
this.repo = repo;
}
// 새 사용자 등록하기
public void addNewUser(String id, String name) {
User savedUser = repo.getUserById(id);
if (savedUser != null) {
System.out.println("동일한 아이디로 가입한 사용자가 이미 존재합니다.");
return; // 메소드 실행 끝내기
}
User user = new User(id, name);
repo.saveUser(user);
}
// 사용자 정보 삭제하기
public void deleteUser(String id) {
User savedUser = repo.getUserById(id);
if (savedUser == null) {
System.out.println("지정된 아이디의 사용자가 존재하지 않습니다.");
return;
}
repo.removeUser(id);
}
// 사용자 정보 조회하기
public User findUser(String id) {
User savedUser = repo.getUserById(id);
return savedUser;
}
}
package day4;
public class UserManagerApp {
public static void main(String[] args) {
// UserRepository의 구현객체 생성하기
UserArrayRepository arrayRepo = new UserArrayRepository();
// UserManager객체 생성
UserManager userManager = new UserManager();
// Setter 메소드를 이용해서 UserRepository구현 객체를 UserManager의 repo변수에 전달하기
userManager.setRepo(arrayRepo);
System.out.println("### 아이디로 사용자 조회하기");
User user1 = userManager.findUser("lee");
if ( user1 != null) {
System.out.println(user1.getId() + ", " + user1.getName());
} else {
System.out.println("사용자가 존재하지 않습니다");
}
System.out.println("## 신규 사용자 등록하기");
userManager.addNewUser("park", "박혁거세");
System.out.println("### 아이디로 사용자 조회하기");
User user2 = userManager.findUser("park");
System.out.println(user2.getId() + ", " + user2.getName());
// UserManager객체 생성, 생성자 메소드를 이용해서 UserRepository구현객체를 UserManager의
// repo 변수에 전달하기
UserManager userManager2 = new UserManager(arrayRepo);
}
}
package day4;
public interface UserRepository {
/**
* 사용자정보를 전달받아서 저장소에 저장한다
* @param user 사용자정보가 저장된 User객체
*/
void saveUser(User user);
/**
* 지정된 아이디의 사용자를 저장소에서 삭제한다
* @param id 삭제할 사용자 아이디
*/
void removeUser(String id);
/**
* 변경된 정보를 포함하고 있는 사용자저보를 전달받아서 저장소에 반영한다
* @param user 변경된 사용자 정보를 포함하고 있는 User객체
*/
void updateUser(User user);
/**
* 지정된 아이디의 사용자 정보를 저장소에서 찾아서 반환한다
* @param id 조회할 사용자 아이디
* @return 사용자정보를 포함하고 있는 User객체
*/
User getUserById(String id);
}
Reference
この問題について(2021. 04. 08(ネック)TIL), 我々は、より多くの情報をここで見つけました https://velog.io/@eastgun_/2021.-04.-08목-TILテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol