1. 추상화
추상화의 개념
- 불필요한 정보를 숨기고 중요한 정보만을 나타내는 것을 의미
- 추상화를 이용하면 어떤 영역에서 필요한 공통의 속성이나 행동을 추출함으로써 효율적은 코드를 작성할 수 있음.
⭐ 데이터 추상화 vs 제어 추상화
⭐ 데이터 추상화 vs 캡슐화 비교
2. 추상 클래스
⭐ 추상 메서드
- 추상 메서드는 자식 클래스에서 구현됨(즉, 자식 클래스로 객체화 할 수 있음.)
- 이는 부모 클래스가 메서드명만 가지고 있고 자식 클래스가 해당 메서드명을 사용하여 필요에 따라 본문을 정의한다는 것을 의미
- 클래스에 추상 메서드가 포함되어 있으면 반드시 추상 클래스로 선언해야 함.
public abstract class Animal {
public abstract void printSound(); // 추상 메서드
public void displayInfo() { System.out.println(“나는 동물입니다“); // 일반 메서드
}
}
추상 클래스 사용 시 주의 사항
- 추상 클래스는 항상 abstract 키워드를 사용하여 선언해야 함
- 추상 클래스의 모든 메서드를 추상으로 사용할 필요는 없음
- 추상 클래스에 일반적인 메서드가 포함될 수도 있음.
- 클래스 메서드 중 하나가 추상 메서드이면 해당 클래스는 추상 클래스여야 함
- 추상 클래스의 추상 메서드는 선언(시그니처)만 하고, 자식 클래스에서 해당 메서드를 재정의해야 함ㅁ
- 추상 클래스(추상 메서드 포함)를 상속하는 경우 추상 메서드는 재정의는 필수
- 추상 클래스는 자신의 인스턴스를 가질 수 없음
- 추상적인 클래스의 객체를 가질 수 있으나, 추상 클래스를 참조하는 객체(즉, 자식 클래스를 통해 참조)는 가질 수 있음.
- 프로그램이 자식 클래스의 객체를 만들 때 컴파일러가 추상 클래스의 생성자를 호출함
-
상속만 가능하고 객체를 생성할 수 없는 클래스를 생성하려면 추상 클래스로 선언, 이 추상 클래스 내부에 일반 메서드와 추상 메서드 모두 가질 수 있으며, 추상 메서드는 반드시 구현되어야 함
-
단일 클래스가 여러 추상 클래스를 상속받을 수 없음. 다중 상속을 구현하려면 인터페이스를 사용해야 함
-
추상 클래스에 final() 메서드를 포함할 수도 있음
⭐ 추상 클래스의 상속
- 추상 클래스는 그 자체의 인스턴스를 만들 수 없기 때문에 상속해서 사용하며, 보통의 클래스처럼 extends 키워드를 이용하여 상속함
- 자식 클래스는 이러한 추상 클래스를 상속받고 추상 메서드를 재정의하여 사용함
3. 인터페이스
⭐ 인터페이스의 개념
- 추상 클래스와 마찬가지로 인터페이스는 그 자체의 객체를 만들 수 없음
- 추상 클래스는 추상 메서드와 일반 메서드를 포함할 수 있지만, 인터페이스는 추상 메서드만 포함할 수 있음
인터페이스 사용 이유
- 완전한 추상화를 구현할 수 있음
- 다중 상속을 구현할 수 있음
- 느슨한 결합 관계를 형성할 수 있음
인터페이스의 선언: interface
인터페이스 메서드
- 매개변수만을 포함하고, 인터페이스를 구현하는(상속받는) 클래스에서 모든 메서드를 구현해야 함
- 인터페이스 메서드는 기본적으로 public과 abstract이므로 명시적으로 선언하지 않아도 되며, 인터페이스 내에서 public 또는 abstract가 아닌 메서드를 정의하면 오류가 발생
⭐ 인터페이스의 상속
- 다중 상속
- 단일 클래스가 둘 이상의 클래스를 상속할 수 없어 다중 상속이 불가능하기 때문에 인터페이스를 사용하여 다중 상속 구현
⭐ 추상 클래스 vs 인터페이스
구 분 | 추상 클래스 | 인터페이스 |
목 적 | 상속 받아서 기능을 확장 | 구현 객체의 동일한 실행 기능을 보장 |
클래스 | 클래스(abstract class) | 클래스가 아님(interface) |
일반 메서드 | 일반 메서드 정의가 가능 | 일반 메서드 정의 불가능 (Java8 이후 static, default 메서드 정의 가능) |
멤버 변수 | 클래스와 동일하게 변수 선언 및 사용 가능 | 상수(final)만 사용 가능 (interface 선언된 변수는 상수로 취급되어 final 생략 가능) |
상속 키워드 | Extends | Implements, extends |
다중 상속 | 불가능 | 가능 |
추상 메서드 | 0개 이상 | 전부 |
필드 | 일반 변수 및 상수 모두 가능 | 상수만 가능 |
접근 제어자 | 제한 없음 | public, default |
4. 객체지향 프로그래밍
추상화를 하는 방법
- 인터페이스(interface)를 이용하는 방법 : 다중 상속 지원(클래스 다중상속 안됨)
- interface 키워드를 사용하여 선언하는 인터페이스 ⇒ implements
- üinterface 키워드는 클래스가 구현해야 하는 동작을 지정하는 데 사용되는 추상 자료형
- 인터페이스를 사용하려면 다른 클래스에서 인터페이스를 구현해야 함
- 인터페이스 특징
- 다중 상속 가능
- 추상 메서드와 상수만 가능
- 생성자 사용 불가
- 메서드 오버라이딩 필수
⭐ 추상화를 하는 방법: interface vs 추상클래스
//interface 추상화
public interface Animal {
public abstract void sound();
// 추상 메서드만 사용
}
public class Dog implements Animal {
@Override
public void sound() {
System.out.println(“interface : 멍멍“);
}
}
public class HelloAnimal{
public static void main(String[] args) {
Dog dog = new Dog();
dog.sound();
}
}
//추상 클래스 추상화
abstract class Animal {
abstract void sound();
void sleep(); // 일반 메서드 가능
}
public class Dog extends Animal {
@Override
public void sound() {
System.out.println(“추상:멍멍”);
}
void sleep() { System.out.println(“쿨~”); }
}
public class HelloAnimal {
public static void main(String[] args){
Dog dog = new Dog();
dog.sound();
}
}
'Java' 카테고리의 다른 글
Chap 04. 상속과 다형성 (0) | 2024.04.22 |
---|---|
Chap 03. 클래스/객체 (0) | 2024.04.22 |
Chap 02. 배열과 문자열 (1) | 2024.04.20 |
Chap 01. 객체지향 프로그래밍 (0) | 2024.04.20 |
JAVA 배열의 기초와 다차원 배열 (0) | 2024.01.14 |
댓글