추상 메소드란?
아주 간단하다.
원래 메소드에서 중괄호 안쪽이 구현부가 빠졌다고 생각하면 된다.
public void print() {
System.out.println("Hello World"); <-이게 원래 메소드였다면
}
abstract public void print() {
<-이게 추상메소드다.
}
추상메소드는 구현부가 없을 뿐더러 abstract라는 단어를 붙여서 일반 메소드들과 구분해주면 된다.
추상 클래스란?
이것또한 아주 간단하다.
클래스에 추상 메소드가 하나라도 섞여있으면 추상 클래스로 변해진다. 일반 클래스에 + 추상 메소드 = 추상 클래스.
따라서 추상 메소드 하나 빼고 생성자, 필드(변수), 일반 메소드가 다 있어도 추상 메소드 하나로 추상 클래스로 변해버린다.
또한 추상메소드가 존재한다면 클래스 명에도 abstract를 붙여줘야한다. 그렇기에 추상메소드와 일반메소드가 같이 있는데, 이 때 추상클래스에 단점이 드러난다.
추상클래스는 객체로 만들 수 없다. 그래서 객채지향인 자바에선 메리트가 확 줄어든다는 느낌을 받았다.
(요즘 잘 안쓴다고 합니다)
인터페이스란?
추상 클래스의 단점을 극복한 추상 메소드의 모음이라고 생각하면 된다.
인터페이스에서 작성된 모든 메소드들에는 abstract 가 붙어있다고 생각하면 되며 인터페이스에서 작성할 수 있는건
추상 메소드와 상수뿐이다.
인터페이스에서 상수를 작성하면 public static final 이 따로 작성하지 않아도 기본 값으로 가지고 있다.(보이지 않아도 써있음)
인터페이스의 구현은 implements 를 붙여주면 되며 인터페이스는 기존 클래스들과 다르게 다중상속이 가능하다.
인터페이스->인터페이스 로 상속이 가능하며 1번 인터페이스가 2,3,4 번 인터페이스에게 다중상속도 가능하다는 뜻이다.
그럼 인터페이스가 왜 좋은걸까?
기존 클래스에서 다중상속할 때 같은 메소드를 상속받게 되면 어디서 온건지 메소드의 출처가 모호해진다.
하지만 인터페이스에 작성된 메소드를 참고하면 메소드의 출처가 확실해져 논리에러가 줄어들 수 있다.
또 다른 장점으로는 대규모 개발시에 아주 편리해진다.
인터페이스는 추상메소드들의 집합으로 인터페이스를 상속 받았을 시 인터페이스 안에 있는 추상메소드를 모두 구현하지 않을 경우 에러가 발생됩니다.
그럼 이게 왜 좋을까? 꼭 필요한 기능을 작성하지 않는 실수를 방지할 수 있고 대규모 개발 때 메소드명이 서로 다르거나 하는 사고를 방지할 수 있습니다. -> 개발 시간의 단축
'JAVA 정리노트' 카테고리의 다른 글
JAVA의 기본 API (2) | 2024.01.31 |
---|---|
JAVA RuntimeException(예외처리) (4) | 2024.01.31 |
JAVA 의 다형성 (0) | 2024.01.24 |
JAVA 상속 (0) | 2024.01.23 |
JAVA static과 객체배열에 대한 정리 (0) | 2024.01.22 |