Java/문법

Java의 꽃 상속 - Interface

ssury94 2024. 12. 16. 15:36
 
 
 

 

상속 시리즈

1) Extend, Overriding

2) Abstract 

3) Interface <<

 

 

대망의 상속 마지막 키워드 interface에 대해 알아봅시다.

 

자바클래스 생성시 인터페이스선택하여 만들수도 있고,

 

class 대신 insterface라고 입력하여 사용할 수도 있다.

 

package entity;

public interface Card {

 

인터페이스는 클래스 키워드를 사용하지 않는다.

= 인터페이스는 클래스가 아니다!

 

 

 

클래스와 인터페이스는 무슨 차이가 있지?

인터페이스는 일반적인 변수가 올 수 없다. (상수 static는 가능!)

 

변수 불가

 

 

상수 가능!

 

public static final int CLOVER = 1;

 

 

CLOVER의 값이 1로 정해졌기때문에 10으로 변경불가

final: Java에서 변수, 메서드, 또는 클래스에 대한 불변성을 지정

 

static에 저장되었기때문에 모든 클래스에서 사용가능

 

상수필드, 구현하지 않은 함수 (=추상 메서드), 디폴트 메서드, statci 메서드, private메서드만 적을 수 있다.

 


다중 상속 가능한 interface

 

interface는 extends로는 상속받을 수 없다!

implements로 상속!

package entity;

public class MyCard implements Card{
    @Override
    public String getCardNumber() {
        return "";
    }

    @Override
    public void print() {

    }
}

 

상속 Extend 은 하나만 가능

인터페이스는 여러개 가능, 이를 다중상속 이라 한다.

 

package entity;
public class MyCard implements Card, Player{}

 

package entity;

public class MyCard implements Card, Player{
    @Override
    public String getCardNumber() {
        return "";
    }

    @Override
    public void print() {

    }

    @Override
    public void play(String name) {
        
    }

    @Override
    public void end() {

    }
}

 

 

 

정리!

  클래스 인터페이스
구조와
목적
객체의 구조와 행동을 정의합니다.

구체적인 구현을 포함할 수 있습니다.

상태(필드)와 행동(메서드)을 모두 가질 수 있습니다.
메서드의 선언만을 포함합니다.

구현 객체의 동일한 동작을 보장하기 위해 사용됩니다.

주로 추상 메서드로만 구성됩니다.
상속과
구현
단일 상속만 가능합니다 (extends 키워드 사용).

다른 클래스를 확장하고 기능을 재사용할 수 있습니다.
다중 구현이 가능합니다.
(implements 키워드 사용)

여러 인터페이스를 동시에 구현할 수 있어 유연성이 높습니다.
사용
목적
객체의 설계도 역할을 합니다.

코드 재사용과 확장성을 제공합니다.
구현 객체 간의 계약을 정의합니다.

다형성을 지원하고 시스템의 결합도를 낮춥니다.
(한 모듈을 변경하더라도 다른 모듈에 미치는 영향이 적어 유지보수가 용이해짐)

클래스는 객체의 구체적인 구현을 포함하는 반면, 인터페이스는 구현을 강제하는 추상적인 계약의 역할을 합니다. 

 

 

OOP(Object-Oriented Programming)

  • 캡슐화 (Encapsulation): 객체의 데이터와 그 데이터를 처리하는 메서드를 하나로 묶어 외부에서 직접 접근할 수 없도록 하는 것입니다. 이를 통해 데이터의 무분별한 변경을 방지하고 객체의 안정성을 높입니다.
  • 상속 (Inheritance): 기존의 클래스를 기반으로 새로운 클래스를 생성하는 기능으로, 코드의 재사용성을 높이고 중복된 코드 작성을 줄입니다. 예를 들어, '동물' 클래스에서 '포유류' 또는 '조류' 클래스를 파생시킬 수 있습니다.
  • 다형성 (Polymorphism): 같은 이름의 메서드가 서로 다른 형태로 동작할 수 있는 능력입니다. 이는 메서드 오버로딩과 오버라이딩을 통해 구현되며, 유연한 코드 작성을 가능하게 합니다.
  • 추상화 (Abstraction): 복잡한 시스템을 단순화하여 필요한 특성만을 강조하는 것입니다. 예를 들어, 자동차 객체를 표현할 때 엔진, 바퀴 등의 주요 특성만을 강조하고 나머지 세부 사항은 생략할 수 있습니다.