티스토리 뷰
📌 230802 TIL : 자바 인터페이스 정리
1. 인터페이스는 왜 쓰는가.
인터페이스의 모든 변수는 final로 선언된다.
클래스나 프로그램이 제공하는 기능을 명시적으로 선언하기 때문에, 일종의 클라이언트 코드와의 약속이다.
클라이언트 프로그램은 인터페이스에 선언된 메서드 명세만 보고 이를 구현한 클래스를 사용할 수 있다.
또한 어떤 객체가 하나의 인터페이스 타입이라는 것은 그 인터페이스가 제공하는 모든 메소드를 구현했다는 뜻이다.
2. Jdbc 인터페이스?
오라클 DB나 MYSQL 같은 데이터베이스와 자바와 연결하기 위해서는 connection이라는 인터페이스가 필요하다.
자바는 connection 인터페이스를 선언해놓고, 오라클같은 데이터베이스 기업은 그 인터페이스의 기능을 구현한다.
이렇듯 인터페이스는 매우 중요하다!
3. 인터페이스 예제 : Dao 구현해보기.
하위의 구조로 UserInfoDao를 구현하였다.
📝 UserInfo 정보
private String userId, password, userName; |
📝 UserInfo 인터페이스, 그를 구현한 오라클/MYSQL 클래스
//UserInfoDao 인터페이스
public interface UserInfoDao {
void insertUserInfo(UserInfo userInfo);
void updateUserInfo(UserInfo userInfo);
void deleteUserInfo(UserInfo userInfo);
}
//위 인터페이스를 구현한 오라클 메소드
public class UserInfoOracleDao implements UserInfoDao {
@Override
public void insertUserInfo(UserInfo userInfo) {
System.out.println("Insert into Oracle Db user = " + userInfo.toString());
}
@Override
public void updateUserInfo(UserInfo userInfo) {
System.out.println("Update into Oracle Db user = " + userInfo.toString());
}
@Override
public void deleteUserInfo(UserInfo userInfo) {
System.out.println("Delete into Oracle Db user = " + userInfo.toString());
}
}
//위 인터페이스를 구현한 MYSQL 인터페이스
public class UserInfoMySqlDao implements UserInfoDao {
@Override
public void insertUserInfo(UserInfo userInfo) {
System.out.println("Insert into MySql Db user = " + userInfo.toString());
}
@Override
public void updateUserInfo(UserInfo userInfo) {
System.out.println("Update into MySql Db user = " + userInfo.toString());
}
@Override
public void deleteUserInfo(UserInfo userInfo) {
System.out.println("Delete into MySql Db user = " + userInfo.toString());
}
}
📝 db.properties 파일: 테스트 용으로 임시로 만들어주었다. (💡 src 폴더 밖에 두어야한다! )
📝 UserInfoClinet.class 테스트 코드
public class UserInfoClient {
public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream("db.properties");
Properties prop = new Properties();
prop.load(fis);
String dbType = prop.getProperty("DBTYPE");
UserInfo userInfo = new UserInfo();
userInfo.setUserId("1000");
userInfo.setUserName("송강");
userInfo.setPassword("12345678");
UserInfoDao userInfoDao = null;
if (dbType.equals("ORACLE")) {
userInfoDao = new UserInfoOracleDao();
} else if (dbType.equals("MYSQL")){
userInfoDao = new UserInfoMySqlDao();
} else {
System.out.println("db error!");
return;
}
userInfoDao.insertUserInfo(userInfo);
userInfoDao.updateUserInfo(userInfo);
userInfoDao.deleteUserInfo(userInfo);
}
}
오라클 DB를 인식하여, UserInfoOracleDao 가 실행됨을 알 수 있다.
4. 인터페이스의 Default Method, Static Method, private Method
💡 디폴트 메소드란
메소드 앞에 디폴트가 붙는다. 인터페이스에서 구현이 가능한 부분으로 해당 인터페이스를 구현하는 클래스들은 공통으로 사용이 가능하다. 또한 재정의도 가능하다.
자바 8부터 사용이 가능해졌는데, 왜 필요하냐면, 만약 인터페이스에 추상메소드를 하나 더 추가하면 모든 구현 클래스에서 구현을 해야한다. 이러한 번거로움을 막기 위해 default method 를 추가하면 구현 클래스에서 추가적인 구현을 안 해도 된다.
💡 Static 메소드란
인스턴스 생성과 상관 없는 인터페이스 타입으로 사용할 수 있는 메소드이다.
재정의가 불가능하며, 보통 디폴트 메소드를 돕는 역할을 함. (helper method라고도 함)
💡 private 메소드란
디폴트나 static 메소드에서 사용하기 위한 메소드로, 재정의가 불가능하다. 오로지 인터페이스 내에서만 사용이 가능하다.
📝 코드 예시 Calc interface
public interface Calc {
double PI = 3.14;
int ERROR = -999999999;
int add(int n1, int n2);
int sub(int n1, int n2);
int mul(int n1, int n2);
int div(int n1, int n2);
default void description() {
myMethod(); //private method
myStaticMethod(); //private static method
System.out.println("정수의 사칙연산을 제공합니다. ");
}
static int total(int[] arr) {
return Arrays.stream(arr).sum();
}
//재정의 x 단지 인터페이스 내에서만 사용이 가능함.
private void myMethod() {
System.out.println("Calc.myMethod");
}
private static void myStaticMethod() {
System.out.println("Calc.myStaticMethod");
}
}
📝 Test Code
public class CalcTest {
public static void main(String[] args) {
Calc calc = new CompleteCalc(); //Calc 인터페이스를 구현함.
calc.description(); //디폴트 메소드
System.out.println("1+2+3 = " + Calc.total(new int[] {1,2,3})); //static 메소드
}
}
'백엔드 공부하기 > TIL' 카테고리의 다른 글
230804 TIL : Object 클래스의 다양한 메소드들 (0) | 2023.08.04 |
---|---|
230803 TIL : 상속 및 인터페이스와 추상클래스의 차이 (0) | 2023.08.03 |
230801 TIL : 업캐스팅의 이유, 템플릿 메소드, 프레임워크와 라이브러리의 차이 (0) | 2023.08.01 |
230731 TIL : JAVA에서의 상속, 다형성 정리 (0) | 2023.07.31 |
230728 TIL : JAVA 코드의 메모리 영역 (메소드 / 스택 / 힙) (0) | 2023.07.29 |
- Total
- Today
- Yesterday
- boj
- 국비지원캠프
- 패스트캠퍼스강의
- qjzl
- 카카오API
- 백준
- 스터디후기
- 백엔드
- springboot
- be
- 채팅기능개발
- 부트캠프
- 데이터베이스
- 자료구조 #스택 #큐 #덱 #선형자료구조
- 자료구조
- 과정중간회고
- 야놀자X패스트캠퍼스부트캠프
- Java
- #국비지원취업
- 그룹스터디
- 야놀자
- 그룹스터디워크샵
- 커리어멘토링
- 국비지원
- TiL
- 패스트캠퍼스
- 프로젝트후기
- 국비지원취업
- 백엔드개발자
- 백엔드부트캠프
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |