• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

인터페이스 강의를 듣고 궁금증이 생겼습니다.

23.07.20 21:31 작성 23.07.20 21:48 수정 조회수 188

0

 1. interface클래스내에 정의된 메써드는 public abstract이고, 변수는 public static final이 자동으로 앞에 정의가 된다고 하셨는데 이건 고정인건가요? 다른 형태로 봐꿀 수 있나요?

봐꿀 수 없다면 왜 그러한지가 궁금합니다.

 

  1. interface 클래스를 implements해주고 추상클래스를 extends 해주는 것은 둘 다 상속인건가요? 둘다 부모 클래스가 되는건가요?

답변 1

답변을 작성해보세요.

0

안녕하세요?

1. 자바에서 인터페이스(Interface) 내에 정의된 메서드는 기본적으로 public abstract 이며, 변수는 public static final 로 정의됩니다. 이러한 선언들은 고정되어 있으며 다른 형태로 변경할 수 없습니다.

인터페이스는 클래스가 아니라 인터페이스만 정의하는 구조이기 때문에 인터페이스 내의 메서드들은 기본적으로 추상 메서드(abstract method)입니다. 추상 메서드는 구현이 없이 선언만 되어 있어서 해당 메서드를 상속받는 클래스에서 반드시 구현해야 하지요. 그렇기 때문에 인터페이스 내의 메서드는 public abstract로 선언되는 것입니다.

그리고 인터페이스 내의 변수들은 상수로 취급되어야 합니다. 따라서 변수는 값을 변경할 수 없도록 만들기 위해 public static final로 선언됩니다. 이러한 변수들도 고정된 선언 형태를 가지고 있으며 변경할 수 없습니다.

이렇게 함으로써 자바의 인터페이스가 언어 차원에서 일관되고 안정적인 코드를 유지하도록 보장하는데 도움을 줍니다. 만약 인터페이스 내의 메서드나 변수의 선언을 다양한 형태로 변경할 수 있다면, 인터페이스를 구현하는 클래스들 사이에 일관성이 없어지고 코드 유지보수에 어려움이 발생할 수 있어요. 따라서 자바에서는 이러한 인터페이스의 선언 규칙을 고정시켜 안정성과 일관성을 유지하도록 하고 있습니다.


2. 자바에서 인터페이스를 implements 키워드를 사용하여 구현하는 것과 추상 클래스를 extends 키워드를 사용하여 확장하는 것은 모두 상속의 형태지만 두 개념의 성격과 동작 방식에는 중요한 차이가 있습니다.

(1) 인터페이스 implements (구현)

인터페이스는 추상 메서드들의 집합으로, 구현을 강제하는 일종의 명세입니다. 클래스가 인터페이스를 implements 키워드를 사용하여 구현한다는 것은 해당 클래스가 인터페이스에서 선언된 모든 메서드를 구현하겠다는 약속인 것이죠. 클래스가 인터페이스를 구현할 때, 인터페이스의 추상 메서드들을 반드시 오버라이딩(구현)해야 합니다.

가령 다음과 같이 인터페이스를 정의하고 구현하는 클래스를 작성할 수 있습니다.

interface MyInterface {
    void someMethod();
}

class MyClass implements MyInterface {
    @Override
    public void someMethod() {
        // 구현 내용 작성
    }
}

(2) 추상 클래스 extends (확장)

추상 클래스는 일부 메서드가 구현되어 있고 일부는 추상 메서드로 선언된 클래스입니다. 추상 클래스는 일반적인 클래스와 비슷하게 인스턴스 변수, 메서드, 생성자 등을 가질 수 있으며, 일부 메서드의 구현을 하지 않고 자식 클래스에게 구현을 위임합니다. 추상 클래스를 extends 키워드를 사용하여 상속하는 경우, 자식 클래스는 추상 클래스의 추상 메서드들을 반드시 구현해야 합니다.

예시로 다음과 같이 추상 클래스를 정의하고 상속받아 구현하는 클래스를 작성할 수 있습니다.

abstract class MyAbstractClass {
    abstract void someAbstractMethod();
 
    void someRegularMethod() {
        ... 어떤 동작 수행 ...
    }
}

class MyConcreteClass extends MyAbstractClass {
    @Override
    void someAbstractMethod() {
        // 구현 내용 작성
    }
}

정리하면, 인터페이스를 implements 하는 클래스는 인터페이스의 모든 추상 메서드를 구현해야 하며, 추상 클래스를 extends 하는 클래스는 추상 클래스의 추상 메서드를 구현해야 합니다. 두 경우 모두 상속의 형태를 가지고 있지만, 목적과 동작 방식에서 차이가 있습니다 😊

감사합니다.