본문 바로가기

언어/Java

인터페이스(Interface)

※ 인터페이스

시스템에 접속할 수 있는 장치. 병행작업을 위해 인터페이스를 먼저 만들어야 한다.

제공하는 라이브러리에 접속하기 위해서 중간매개체 역할하는게 인터페이스.
사용자 입장에서 사용할때도, 제공자 입장에서 제공할 때, 접속 장치도 인터페이스 봄

 

인터페이스는 모든 메서드가 추상 메서드(abstract method)로 선언되어야 함.

추상 메서드는 메서드의 시그니처(메서드 이름, 매개변수, 리턴 타입)만 선언되고, 본체가 없는 메서드.

인터페이스의 메서드는 구현부가 없기 때문에 하위 클래스에서 반드시 구현해야 한다.

인터페이스의 모든 메서드가 추상 메서드로 선언되는 이유는 인터페이스가 일종의 계약(contract)을 정의하는 것이기 때문입니다. 인터페이스를 구현하는 클래스는 해당 인터페이스의 모든 메서드를 반드시 구현해야 하기 때문에, 모든 메서드가 추상 메서드로 선언되어야 인터페이스를 상속받은 클래스에서 반드시 메서드를 재정의할 수 있도록 보장합니다.

인터페이스를 정의할 때, 메서드의 앞에 abstract 키워드를 사용하지 않아도 됩니다. 인터페이스의 모든 메서드는 자동으로 추상 메서드로 간주됩니다.

// 데이터베이스에 접속하는 시스템이 오라클에서 SQL로 변경된다고 가정
// 메서드 이름은 동일하게 executeUpdate를 사용해야 함
// executeUpdate 메서드를 사용할 때, 인터페이스 타입으로 사용하면 
// 어떤 데이터베이스를 사용하더라도 동일한 메서드 이름으로 호출가능

interface Statement {
    void executeUpdate(String sql);
}

class OracleStatement implements Statement {
    @Override
    public void executeUpdate(String sql) {
        // 오라클에 맞는 구현
    }
}

class SQLStatement implements Statement {
    @Override
    public void executeUpdate(String sql) {
        // SQL에 맞는 구현
    }
}
public class Abstract {
	abstract class Parent{
		/**
		* 반드시 재정의해야한다 → 그럼 앞에 abstract 붙였어야 한다.
		*/
		abstract void m();	// {} 사용 안함
		void sayHello() {
			System.out.println("Hello from Parent class!");
		}
	}

	class A extends Parent {
		void m(){
			 System.out.println("A class implementation of m()");
		}
	}

	class B extends Parent {
		void m(){
			System.out.println("B class implementation of m()");
		}
	}
	
	public static void main(String[] args) {
		Abstract a = new Abstract();
		Parent p;
		
		p = a.new A();
		p.sayHello();
		p.m();
		System.out.println("----------------------------");
		p = a.new B();
		p.sayHello();
		p.m();
	}
}

결과

'언어 > Java' 카테고리의 다른 글

GUI프로그램  (0) 2023.08.02
인터페이스 예시  (0) 2023.08.02
클래스의 용도  (0) 2023.08.01
이클립스 Source로 메서드 작성하기  (0) 2023.08.01
상속과 생성자  (0) 2023.08.01