본문 바로가기
JAVA

extends vs implements (자바 키워드, 파이썬과 비교)

by yororing 2024. 9. 30.

00 개요

목록

01 자바 extends 키워드란

02 파이썬 상속이란

03 자바 implements 키워드란

04 파이썬 인터페이스 대체 - abc 추상화 모듈

05 자바와 파이썬 비교

  • 자바는 객체 지향 프로그래밍 (Object Oriented Programming) 언어로, 코드 재사용과 확장을 지원하기 위해 다양한 기능을 제공함
  • 그중 extends와 implements는 클래스와 인터페이스 간의 관계를 설정하는 중요한 키워드임
  • 파이썬의 상속의 개념과 유사
  • extends 및 implements 키워드의 정의, 문법, 예시 및 비교에 대한 정리 (두 키워드를 파이썬의 상속 개념과도 비교)

 

01 자바 extends 키워드란

1. 정의

  • 자바에서 한 클래스가 다른 클래스를 상속받을 때 사용됨
  • 이를 통해 자식 클래스는 부모 클래스의 속성과 메소드를 물려받아 사용 가능
  • 코드의 재사용성을 높임

2. 문법

class ChildClass extends ParentClass {
    // ChildClass의 필드와 메소드
}

3. 예시

public class practiseExtendsImplements {
    public static void main(String[] args) {
        Dog dog = new Dog(); // Dog 클래스의 인스턴스 생성
        dog.eat();  // Dog 클래스가 Animal 클래스를 extends를 통해 상속받아서 Animal 클래스의 eat 메소드 호출 가능 
        dog.bark(); // Dog 클래스의 bark 메소드 호출
    }

    static class Animal {
        void eat() {
            System.out.println("Eating...");
        }
    }

    static class Dog extends Animal {
        void bark() {
            System.out.println("Barking...");
        }
    }
}
  • 실행 결과:
Eating...
Barking...

Process finished with exit code 0

4. 특징

  • 단일 상속: 자바는 한 클래스가 오직 하나의 부모 클래스만 가질 수 있음
  • 오버라이드 (Override) 가능: 자식 클래스에서 부모 클래스의 메소드를 오버라이드 할 수 있음

02 파이썬 상속이란

1. 정의

  • 파이썬에서 클래스는 다른 클래스를 상속받아 속성과 메소드를 재사용 가능

2. 문법

class ParentClass:
    def method(self):
        pass

class ChildClass(ParentClass):
    def child_method(self):
        pass

3. 예시

# 첫 번째 부모 클래스
class Animal:
    def eat(self):
        print("Eating...")

# 두 번째 부모 클래스
class Pet:
    def play(self):
        print("Playing...")

# 자식 클래스가 두 개의 부모 클래스를 상속받음
class Dog(Animal, Pet):
    def bark(self):
        print("Barking...")
        
# Dog 클래스의 인스턴스 생성
dog = Dog()

# 부모 클래스의 메소드 호출
dog.eat()
dog.play()
dog.bark()
  • 실행 결과
Eating...
Playing...
Barking...

4. 특징

03 자바 implements 키워드란

1. 정의

  • 클래스가 하나 이상의 인터페이스를 구현할 때 사용됨
  • 인터페이스는 메소드의 시그니처만 정의하고, 구현은 인터페이스를 구현하는 클래스에서 수행함

2. 문법

class ClassName implements InterfaceName {
    // InterfaceName의 메소드를 구현
}

 

3. 예시

public class ImplementsPractise {
    public static void main(String[] args) {
        Dog dog = new Dog(); // Dog 클래스의 인스턴스 생성
        dog.eat(); // Dog 클래스의 eat 메소드 호출
    }

    interface Animal {
        void eat();
    }

    static class Dog implements Animal {
        @Override
        public void eat() {
            System.out.println("Dog is eating.");
        }
    }
}
  • 실행 결과:
Dog is eating.

Process finished with exit code 0

4. 특징

    • 다중 구현: 하나의 클래스가 여러 개의 인터페이스를 구현할 수 있음
    • 메소드 구현 필수: 인터페이스의 모든 메소드를 구현해야 하며, 구현하지 않으면 해당 클래스는 추상 클래스 (메소드의 구체적인 구현이 없는 클래스; 참조: 2024.06.28 - [Python] - abc (추상화 클래스) )가 되어야 함

04 파이썬 인터페이스 대체 - abc 추상화 모듈

1. 대체 가능한 파이썬 모듈: abc

  • 파이썬에서는 자바의 인터페이스와 동일한 개념이 없지만, 추상 클래스를 사용하여 유사한 기능을 구현 가능
  • abc 모듈 사용하여 추상 메소드를 정의 가능 
  • 참조: 2024.06.28 - [Python] - abc (추상화 클래스)

2. 문법

from abc import ABC, abstractmethod

class Animal(ABC):
    @abstractmethod
    def eat(self):
        pass

class Dog(Animal):
    def eat(self):
        print("Dog is eating...")

 

3. 특징

  • 추상 클래스: 추상 클래스를 사용하여 인터페이스처럼 동작할 수 있는 클래스 정의 가능
  • 메소드 구현 필수: 자식 클래스에서 추상 메소드를 반드시 구현해야 함 (구현 안 될 시 강제 에러 발생)  

05 자바와 파이썬 비교

특성 자바 extends 파이썬 상속 자바 implements 파이썬 추상 클래스
상속의 종류 단일 상속 다중 상속 다중 구현 추상 클래스 구현
접근성 부모 클래스의 속성과 메소드 접근 가능 부모 클래스의 속성과 메소드 접근 가능 인터페이스의 메소드 구현 필요 추상 메소드 구현 필수
사용 예시 클래스를 상속할 때 사용 클래스를 상속할 때 사용 인터페이스를 구현할 때 사용 추상 클래스 정의 시 사용 

 

 

 

'JAVA' 카테고리의 다른 글

throws (자바 키워드)  (0) 2024.09.30
ArrayList vs LinkedList (자바 데이터 타입)  (0) 2024.09.30
Mybatis (DB 연동 프레임워크)  (1) 2024.09.25
로그 레벨 (log4j)  (0) 2024.05.07