Java/Java 활용 개념 정리

[Java] 인터페이스의 활용 예시!(feat.JDBC)

Dev dreamer 2023. 2. 5. 22:18

 

💡 1. 인터페이스(규약)와 JDBC의 관계.


 

인터페이스 자체는 기능이 없지만 자식(하위)클래스를 만나면 기능을 100% 발휘 할 수 있다.

 

예를 들어 리모콘 하나 있다고 쓸 용도가 없지만 리모컨이 티비를 만나면 용도를 100% 활용 할 수 있는 것처럼.

 

인터페이스가 가지고 있는 기능(추상메서드)를 자식(하위)클래스는 반드시 재정의 해야만 한다.

 

그렇기 때문에 하위 클래스의 동작방식을 모르더라도 부모 클래스의 추상메서드로 100% 실행이 가능하다.

 

 

Java에서 데이터베이스(db)와 연동해서 프로그래밍을 하는 분야를 JDBC Programming 이라고 한다.

 

Java에서 JDBC 프로그래밍을 하기 위해서는 벤더(공급업체)에서 제공하는 클래스를 이용해야 한다.

 

 

 

Oracle 과 My-SQL는 각 벤더(공급업체)에서 제공하는 각각의 CLASS 들이 있을 것이다.

자신의 DB 프로그램에 연결해서 CRUD가 작동하도록 동작 하는 방식은 각각 다를것이다.

 

만약 벤더에서 제공하는 클래스가 통일되어 있지 않으면 자바 개발자들은 모든 데이터 베이스의 동작을 알고 있어야 만 JDBC Programming이 가능할 것이다.

 

그래서 클래스가 통일되어있지 않으면 사실상 사용이 불가능 하다. 

 

다른 프로그램을 쓸 때마다 이용해야하는 클래스와 내부의 메서드들이 바뀌면 유지보수하기 매우 힘들것이다.

 

그래서 벤더들이 클래스 명은 다르더라도 내부의 메서드(주요기능)의 이름은 똑같게 만들 수 있다.

 

 

바로 인터페이스로 추상메서드(주요기능)를 만들고 각각의 클래스들에게 implements 하게 되면!!

 

각 벤더에서 제공한 클래스들 내부에서도 java 개발자들이 사용할 메서드가 이름이 동일하게 있을 것이다.

 

즉 벤더들이 이 interface를 가져가서 implements 해서 구현 클래스를 만들게하는 것이다.

 

java 개발자들은 인터페이스의 그 메서드를 컨트롤 하는 것만으로도 각 벤더들이 구현한 클래스를 이용할 수 있다.

 

 

 

즉 Connection 이라는 인터페이스에 getConnection() 이라는 메서드를 만들고

 

url, id,pwd 만 있으면 벤더에서 만든 클래스를 이용이 가능한 것이다.

 

추상메서드를 재정의 할때는 매개변수타입 순서 개수 등이 완벽히 동일해야 한다.

 

기존에 벤더들이 만들었던 oracleConnection mysqlConnection 등등 메서드는 쓰지않고

 

getConnection() 이라는 메서드가 통일되어 만들것이다.

 

java 개발자들은 getConnection 이라는 메서드에 url id pwd만 넘기면 잘 작동 될것이다.

 

벤더들이 만들 클래스가 어떻게 구현이 되고 동작이 되는건 java 개발자 입장에서 전혀 알 필요가 없는 것이다.

 

java 에서 만들어 놓은 인터페이스를 각 벤더회사들이 가져가서 자신의 시스템에 맞게

Driver 클래스를 만들어 왔고 그 Driver 클래스 들은 반드시 getConnection 메서드들이 구현되어 있을것이다.

 

구현된 기능이 어떻게 재정의 되고 어떻게 동작하는지는 각 프로그램에 맞게 설계될 것이고

 

java개발자들은 인터페이스 내부에 있었던

 

getConnection을 통해서 url , id , pwd 만 잘 넘겨주면 정상적으로 crud를 할 수 있을것이다.

 

 

 

💡 2. 코드로 알아보는 인터페이스 활용


 

DBconnect 라는 interface를 만들고 그 내부에 getConnection 을 만들어 놓는다.

 

Oracle 에서 만든 클래스는 Dbconnect를 implements 받았고 반드시 getConnection이 구현되어 있을 것이다.

 

getConnection 내부의 oracle과 연결하여 저장하는 동작원리는 사용하는 입장에서는 중요하지 않다.

 

Mysql에서 만든 클래스 역시도 Dbconnect 를 implements 받아 getConnection이 구현되어 있을것이다.

 

 

 

보통 이러한 Driver class 들은 엄청나게 많은 파일들이 뭉쳐서 jar파일로 제공된다.

이 jar 파일을 받고 나서 경로에 추가하고 사용하면 그중 하나가 getConnection 기능을 하는 것이다.

 

 

 

그래서 우리는 Dbconnect 라는 인터페이스를 통해서 각 oracle과 mysql에 접근하여

getConnection 메서드를 사용할 수 있는 것이다.

 

Driver class를 다운받아서 자바에서 제공해주는 인터페이스를 가지고

드라이브 안에 있는 메서드에 접근해 crud 기능을 이용 가능한 것이다.

 

 

 

 

💡 3. 인터페이스와 인터페이스의 상속 관계


 

🔍 3.1 인터페이스를 상속받은 인터페이스?!

 

인터페이스 A가 있고 인터페이스 B가 있다

 

인터페이스는 인터페이스를 상속받을 수 있다.

 

B가 A인터페이스를 상속받았다면 B를 implements한 클래스를 살펴보자.

 

B를 implements 한 클래스를 보면

 

A에 있던 메소드와 B에 있던 메소드를 모두 재정의 해준것을 확인 할 수 있다.

 

즉 B를 implements 하더라도 A를 상속 받은 B라면 A까지 함께 구현해줘야 하는 것이다.

 

그리고 객체를 생성할 때에도

객체를 B나 A 둘중 하나 어떤것이든 선택해서 생성하면 된다.

 

🔍 3.2 다중 상속 관계에 있는 클래스 구조

 

 

당연히 클래스는 하나만 상속 받아야 하므로 Dog 는 abstract class 를 상속 받은 클래스이다.

 

하지만 인터페이스 인 경우에 class 를 상속받고 나서도 여러개 더 상속 받을 수 있다.

 

뭔가 공유 될 수 없는 별도의 특성이나 기능들을 추가하고 싶을때 interface를 이용한 다중 상속을 한다.

 

별도의 필요한 기능들을 별도의 인터페이스로 만들어서 필요한 클래스들에게만 인터페이스를 구현하는 것이다.

 

Dog 는 Animal을 상속(extends) 받았고 Pet 과 Robots 인터페이스를 구현(implements) 했다. 라고 말할 수 있다.

 

 

 

 

 

Java 관련 개념을 알려주실 때 그 내부 동작이 어떻게 구현되는지 자세하게 알수 있는 강의입니다.

출처: Java TPC (생각하고, 표현하고, 코딩하고) 대시보드 - 인프런 | 강의 (inflearn.com)