extends, implements
자꾸 헷갈리는 이 기초개념.. 이번에 정리한다..
상속을 말하기에 앞서 OOP (Object-Oriented Programming, 객체 지향 프로그래밍)을 먼저 정리한다. OOP는 객체를 기준으로 코드를 나눠 구현한다. 이때 자바에서 각 구성 부분 단위가 클래스이다. 구체적으로 클래스는 설계도를 의미하고 직접 구현하고 일하는 것은 인스턴스이다.
(상자가 모두 객체로 Object이고, 자바 용어로는 class를 의미한다.)
계층을 표현하기 위해 만들어진 것이 상속이다. 하위 객체는 상위 객체(부모)의 특징을 물려받는다. 예를들어 '움직이다'를 구현한 move() 메소드가 있다면 모든 동물들은 해당 메소드를 물려받고 사용할 것이다.
✔️ extends
부모에서 선언 및 정의를 모두 하고, 자식은 메소드 및 변수를 그대로 사용한다. 이를 통해 코드의 재사용성이 향상되고, 코드의 중복을 줄일 수 있다. 자바에서는 단일 상속만 지원하기 때문에 한 클래스는 한 번에 하나의 클래스만 상속받을 수 있다. 즉, 클래스에 부모클래스가 2개이상 존재할 수 없다.
class Animal {
protected int speed = 3;
public int getSpeed(){
return speed;
}
public void setSpeed(int speed){
this.speed = speed;
}
}
class Dog extends Animal {
public void print(){
System.out.println(speed);
}
}
public class Example {
public static main (String[] args){
Dog dog = new Dog();
System.out.println(dog.getSpeed());
dog.print();
}
}
✔️ implements (interface 구현)
부모 객체는 선언만 하며 정의 및 내용은 자식에서 오버라이딩(재정의)해서 사용한다. 자바에서는 다중 인터페이스 구현이 가능하여 클래스는 여러 인터페이스를 구현할 수 있다.
interface Animal {
public static int num = 100;
public void move();
public void sleep();
}
class dog implements Animal {
@Override
public void move(){
System.out.println(num);
}
@Override
public void sleep() {
}
}
public class InterfaceSample{
public static void main(String args[]){
Dog dog = new Dog();
dog.move();
}
}
🔗 참고 링크
https://velog.io/@hkoo9329/%EC%9E%90%EB%B0%94-extends-implements-%EC%B0%A8%EC%9D%B4