hrming

[Java/복습] 객체지향 프로그래밍 7 본문

Java/복습

[Java/복습] 객체지향 프로그래밍 7

hrming 2023. 8. 6. 11:56

1. 인터페이스

인터페이스(interface)란 다른 클래스를 작성할 때 기본이 되는 틀을 제공하면서, 다른 클래스 사이의 중간 매개 역할까지 담당하는 일종의 추상 클래스를 의미

 

- 자바는 다중 상속을 지원하지 않음

- 자바는 '인터페이스'를 통해서 다중 상속을 지원함

- 자바에서 추상 클래스는 추상 메서드뿐만 아니라, 생성자, 필드, 일반 메서드도 포함할 수 있다. 하지만, 인터페이스는 오로지 '추상 메서드' '상수'만을 포함할 수 있음.

 


1-1. 인터페이스 선언

접근제어자 interface 인터페이스이름 {

    public static final 타입 상수이름 = 값;

    public abstract 메소드이름(매개변수목록);
    
     /* 인터페이스의 모든 필드는 public static final이어야 하며, 
     모든 메소드는 public abstract이어야 한다.  
     이 부분은 모든 인터페이스에 공통으로 적용되는 부분이므로 이 제어자는 생략할 수 있다.
     이렇게 생략된 제어자는 컴파일 시 자바 컴파일러가 자동으로 추가해 준다. */
}

 


1-2. 인터페이스 구현

class 클래스이름 implements 인터페이스이름 { ... }


// 자바에서는 다음과 같이 상속과 구현을 동시에 할 수 있다. 
class 클래스이름 extend 상위클래스이름 implements 인터페이스이름 { ... }

- 인터페이스는 추상 클래스와 마찬가지로 자신이 직접 인스턴스를 생성할 수는 없다.

- 인터페이스가 포함하고 있는 추상 메소드를 구현해 줄 클래스를 작성해야만 합니다.

- 만약 모든 추상 메소드를 구현하지 않는다면, abstract 키워드를 사용하여 추상 클래스로 선언해야 합니다

[ChatGPT] 
추상 클래스 (Abstract Class): 추상 클래스는 하나 이상의 추상 메소드를 포함할 수 있습니다. 추상 메소드는 메소드의 선언만 존재하고, 구체적인 구현은 하위 클래스에서 이루어집니다. 추상 클래스는 또한 일반적인 메소드와 필드를 포함할 수 있습니다. 따라서 추상 클래스는 추상 메소드뿐만 아니라 구체적인 메소드 구현도 가질 수 있습니다.
추상 클래스의 주요 목적은 코드 재사용과 클래스 간 계층 구조를 만드는 것입니다. 추상 클래스는 이러한 계층 구조에서 공통적인 특성과 동작을 추출하고 상속을 통해 하위 클래스들이 공통된 기능을 공유하도록 돕습니다. 하지만 추상 클래스는 다중 상속을 지원하지 않기 때문에 여러 클래스로부터 상속받을 필요가 있는 경우 제약이 있을 수 있습니다


인터페이스 (Interface): 인터페이스는 추상 메소드의 집합만을 가질 수 있습니다. 이 메소드들은 선언만 되어 있고, 구체적인 내용은 구현되지 않습니다. 인터페이스는 클래스가 어떤 메소드를 반드시 구현해야 한다는 규약을 정의하며, 이를 통해 클래스 간에 표준화된 메소드를 제공하고 다형성을 활용할 수 있게 해줍니다.
인터페이스의 주요 목적은 클래스 간의 계약(Contract)을 정의하여 다른 클래스들이 동일한 메소드들을 구현하도록 유도하는 것입니다. 인터페이스는 다중 상속을 지원하므로 하나의 클래스가 여러 인터페이스를 구현할 수 있습니다.따라서, 모든 추상 메소드를 구현하지 않는 경우에는 해당 클래스를 추상 클래스로 선언하는 것이 일반적으로 적절합니다. 만약 클래스가 다수의 추상 메소드를 가지며 또 다른 클래스로부터 상속받아야 하는 경우라면, 추상 클래스를 사용하여 필요한 메소드를 구현하고 상속을 통해 확장하는 것이 적절할 것입니다. 반면에, 클래스가 단순히 메소드의 구현을 강제하기 위해 사용될 경우에는 인터페이스를 활용하여 클래스 간의 일관된 메소드 규약을 유지하는 것이 더 적합할 것입니다.

 

 


1-3. 인터페이스 장점

 

- 다중 상속 가능.

- 대규모 프로젝트 개발 시 일관되고 정형화된 개발을 위한 표준화가 가능.

- 클래스의 작성과 인터페이스의 구현을 동시에 진행할 수 있으므로, 개발 시간을 단축할 수 있음.

- 클래스와 클래스 간의 관계를 인터페이스로 연결하면, 클래스마다 독립적인 프로그래밍이 가능.

 

[ChatGPT]
인터페이스(interface)를 사용하여 클래스와 클래스 간의 관계를 연결하는 것은 객체 지향 프로그래밍에서 중요한 개념 중 하나입니다. 이를 통해 클래스 간에 독립적인 프로그래밍을 지원하고 유연성과 재사용성을 높일 수 있습니다.


인터페이스는 추상적인 개념으로, 클래스가 어떤 메서드를 구현해야 하거나 어떤 동작을 해야 하는 것을 정의해놓은 일종의 계약입니다. 클래스는 이러한 인터페이스를 구현함으로써, 정의된 메서드를 반드시 제공해야 합니다. 이때 인터페이스는 실제로 어떤 구현 내용을 포함하지 않으며, 구현된 메서드의 동작 방식은 클래스에 의해 결정됩니다.

클래스 간의 관계를 인터페이스로 연결하면 어떻게 독립적인 프로그래밍이 가능한지 아래의 예시를 통해 설명해보겠습니다:
예를 들어, '동물'이라는 개념을 추상적으로 생각해봅시다. '개'와 '고양이'는 모두 동물이지만 각각의 특성과 동작이 다릅니다. 이때, '동물' 인터페이스를 정의하고, '개' 클래스와 '고양이' 클래스가 이 인터페이스를 구현하도록 할 수 있습니다.


아래 예시에서 '개'와 '고양이' 클래스는 각각 '동물' 인터페이스를 구현하고 있습니다. 이로 인해 두 클래스는 같은 인터페이스를 따르기 때문에, 어떤 코드에서든지 '동물' 인터페이스를 사용하여 '개'나 '고양이' 인스턴스에 접근할 수 있습니다. 이는 독립적인 프로그래밍을 가능하게 해줍니다. 예를 들어, 동물 병원에서는 '동물' 인터페이스를 사용하여 모든 동물들을 다룰 수 있고, 각각의 클래스는 자신만의 동작을 가질 수 있습니다.
이처럼 인터페이스를 사용하면 클래스들 간의 관계를 유연하게 연결할 수 있으며, 이로 인해 클래스의 독립성과 재사용성을 높일 수 있습니다.
// 동물 인터페이스 정의
interface 동물 {
    void 소리내기();
    void 움직이기();
}

// 개 클래스 정의
class 개 implements 동물 {
    @Override
    public void 소리내기() {
        System.out.println("멍멍!");
    }

    @Override
    public void 움직이기() {
        System.out.println("네 발로 걷기");
    }
}

// 고양이 클래스 정의
class 고양이 implements 동물 {
    @Override
    public void 소리내기() {
        System.out.println("야옹!");
    }

    @Override
    public void 움직이기() {
        System.out.println("네 발로 뛰기");
    }
}

 

 


2. 인터페이스 & 추상클래스 용도 차이점

 

인터페이스, 추상클래스 모두 추상메서드를 가지고 있고 이를 다른 클래스를 통해 구현해야 한다는 점은 동일하다.

이러한 인터페이스와 추상클래스의 용도 차이점에 대해서 아래 블로그에 내용이 너무 잘 정리되어 있다.

 

https://inpa.tistory.com/entry/JAVA-%E2%98%95-%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4-vs-%EC%B6%94%EC%83%81%ED%81%B4%EB%9E%98%EC%8A%A4-%EC%B0%A8%EC%9D%B4%EC%A0%90-%EC%99%84%EB%B2%BD-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0

 

☕ 인터페이스 vs 추상클래스 용도 차이점 - 완벽 이해

인터페이스 vs 추상클래스 비교 이 글을 찾아보는 독자분들은 아마도 이미 인터페이스와 추상클래스 개념을 학습한 뒤에 이 둘에 대하여 차이의 모호함 때문에 방문 했겠지만, 그래도 다시한번

inpa.tistory.com

 

 

 

 

 

참고 😎

1. http://www.tcpschool.com/java/java_polymorphism_interface

2. https://inpa.tistory.com/entry/JAVA-%E2%98%95-%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4-vs-%EC%B6%94%EC%83%81%ED%81%B4%EB%9E%98%EC%8A%A4-%EC%B0%A8%EC%9D%B4%EC%A0%90-%EC%99%84%EB%B2%BD-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0

3. ChatGPT

Comments