인터페이스란?
- 모든 메서드가 추상 메서드로 선언됨 public abstract
- 모든 변수는 상수로 선언됨 public static final
interface 인터페이스 이름{
public static final float pi = 3.14F;
public void makeSomething();
}
아무것도 안쓴다고해도 public abstract, public static final 로 적용
자바 8부터 디폴트 메서드(default method)와 정적 메서드(static method) 기능의 제공으로 일부 구현 코드가 있음
인터페이스 정의와 구현
클래스가 인터페이스를 구현한다. Calculator ---> Calc 점선 화살표
Calc interface 생성
Calc - interface 구현한 Calculator - class 생성
Calc - interface 구현한 Calculator - class를 상속받은 CompleteCalc - class 생성
test class ----
CompleteCalc는 Calc 타입이 구현된 타입 상속
인터페이스형의 메서드 적용돼서 출력 잘 됨을 확인
구현 상속이 아닌 타입 상속 - 인터페이스의 타입이다.
인터페이스는 구현부가 없다. 따라서 모호성이 없다.
다중 class 상속 가능
인터페이스 구현과 형 변환
- 인터페이스를 구현한 클래스는 인터페이스 형으로 선언한 변수로 형 변환할 수 있음
Calc calc = new CompleteCalc();
- 상속에서의 형 변환과 동일한 의미
- 클래스 상속과 달리 구현 코드가 없으므로 여러 인터페이스를 구현할 수 있음 ( cf. extends)
- 형 변환되는 경우 인터페이스에 선언된 메서드만을 사용 가능함
인터페이스는 왜 쓰는가?
리모컨 같은 것도 인터페이스. TV와 사람을 연결해주는 통로 어떤 연결 점을 인터페이스 ( 추상적 )
인터페이스가 하는 일
- 클래스나 프로그램이 제공하는 기능을 명시적으로 선언
- 일종의 클라이언트 코드와의 약속이며 클래스나 프로그램이 제공하는 명세(specification)
- 클라이언트 프로그램은 인터페이스에 선언된 메서드 명세만 보고 이를 구현한 클래스를 사용할 수 있음
- 어떤 객체가 하나의 인터페이스 타입이라는 것은 그 인터페이스가 제공하는 모든 메서드를 구현했다는 의미임
- 인터페이스를 구현한 다양한 객체를 사용함 - 다형성
- 예) JDBC 인터페이스
Calc - interface 구현한 Calculator - class를 상속받은 CompleteCalc - class 생성
사용하는 쪽 프로그램을 클라이언트
제공하는 쪽은 서버 혹은 모듈이라 함
서버를 쓰는 방법을 적어 놓은 인터페이스 - Calc
클라이언트는 서버가 어떻게 구현되어있는지 알 필요 없다.
- Calculator와 CompleteCalc로 구현되었는지 코드는 어떻게 구현되었는지 알 필요 없다.
쓰는 방법인 인터페이스만 보고 사용한다.
- Calc 인터페이스의 add, substract, times, divide 사용 법만 보고 사용한다.
인터페이스를 구현한 클래스가 여러 개일 수 있지만
- Calculator(add, substract 구현), CompleteCalc(times, divide 구현)
클라이언트가 쓸 때 사용하는 방법이 바뀌진 않는다.
- Calc 인터페이스의 add, substract, times, divide 사용 법만 보고 사용한다
인터페이스에 있는 명시된 방식으로만 쓰면 된다.
int add(int num1, int num2);
int substract(int num1, int num2);
int times(int num1, int num2);
int divide(int num1, int num2);
인터페이스를 활용한 다형성 구현 (dao 구현하기)
버전 다르게 사용하거나 여러 버전 사용할 때
각각 코드 만들어서 관리하면 overhead
버전 관리 / 기능 추가 / 디버깅하기도 어렵다.
하나의 코드 소스 안에서 해결하면 좋다.
방법은 1개의 인스턴스를 정의해 놓고
그거를 오라클 버전으로 mysql 버전으로 등으로 구현해서 관리한다.
하나의 솔루션에서 리플레이스 가능하고 여러 가지 값을 읽어드리고 할 수 있다.
똑같은 인터페이스를 통하여 메서드를 호출하지만 버전에 맞는 인스턴스 메서드에 따라 돌아가고 출력된다!
- DB에 회원 정보를 넣는 dao(data access object)를 여러 DB 제품이 지원될 수 있게 구현함
- 환경 파일(db.properties)에서 database의 종류에 대한 정보를 읽고 그 정보에 맞게 dao 인스턴스를 생성하여 실행될 수 있게 함
- source hierarchy
사용자 정보 넣고 빼고 할 거니까 UserInfo에 대한 java파일
dao class 크게 2개 mysql / oracle 연결은 아니고 콘솔 아웃까지만
얘네들을 쓰는 클라이언트 프로그램을 웹 쪽으로
userinfo.web으로 메인으로 돌려본다. 실제 웹 화면이 없으므로
패키지는 hierarchy를 가지고 있다.
지금까지는 패키지를 소스의 구분, 단위 구분에만 썼었는데
실제로는 hierarchy를 가지면서 어떤 식으로 관리를 하느냐의 고민이 필요하다
프로젝트 시작하고 설계할 때 어드 코드를 어디에 두고 할지.
review
인터페이스
모든 메서드는 추상 메서드 / 모든 변수는 상수
클래스가 인터페이스를 구현한다는 개념
클라이언트에게 서버를 사용할 수 있게 알려주는 명세
클래스를 상속받아 확장하고 재정의하고 했었는데
인터페이스라는 구현 코드가 없고 사용하는 방법만 나와있는 것을 배웠다.
사용자는 알려준 방법대로만 사용하면 어떻게 구현되고 구성되어있는지 알 필요는 없다.
플랫폼들이 이런 것들이었구나 생각이 들었다.
입력하라는 곳에 입력하고 클릭해서 쉽게 사용하고 했는데
그 뒤에는 구현된 코드들과 여러 클래스들이 작동하고 있는 것이었다.
인터페이스의 기능들을 작동하게 구현하는 것이 백엔드 개발자!
나도 능력을 쑥쑥 키워서 백엔드 개발자가 되고 싶다.
'JAVA 웹 개발 패키지 - 패스트캠퍼스 > Chapter3' 카테고리의 다른 글
인터페이스 - 클래스 상속과 인터페이스 구현 함께 쓰기+복습예제 (0) | 2022.01.09 |
---|---|
인터페이스 - 메서드, 구현, 상속 (0) | 2022.01.04 |
추상 클래스(abstract class) 와 템플릿 메서드 패턴 (0) | 2022.01.04 |
다운 캐스팅과 instanceof (0) | 2022.01.04 |
다형성과 다형성을 사용하는 이유 (0) | 2022.01.03 |