추상화란 (구현숨기기, class 앞쪽 성질변환)
추상화는 Java에서 객체 지향 프로그래밍(OOP)의 네 가지 기본 개념 중 하나입니다. 사용자에게 꼭 필요한 정보만 보여주면서 구현 내용을 숨기는 과정을 말합니다.
Java에서 추상화는 추상 클래스와 인터페이스를 통해 이루어집니다. 추상 클래스는 인스턴스화할 수 없고 다른 클래스에 의해 서브클래싱되도록 설계된 클래스입니다. 추상 메서드와 비추상 메서드를 모두 가질 수 있습니다. 추상 메서드는 본문이 없는 메서드이며 추상 클래스를 확장하는 모든 하위 클래스에 의해 구현되어야 합니다.
다음은 Java에서 추상 클래스의 예입니다.
public abstract class Shape {
public abstract double getArea();
public abstract double getPerimeter();
}
이 예제에서 Shape는 두 개의 추상 메서드 getArea() 및 getPerimeter()가 있는 추상 클래스입니다. Shape를 확장하는 모든 하위 클래스는 이 두 메서드를 구현해야 합니다.
반면 인터페이스는 추상 클래스와 유사하지만 구현 코드를 포함할 수 없습니다. 클래스가 구현해야 하는 일련의 메서드만 정의합니다. 다음은 Java 인터페이스의 예입니다.
public interface Drawable {
void draw();
}
이 예제에서 Drawable은 하나의 메서드 draw()가 있는 인터페이스입니다. Drawable 인터페이스를 구현하는 모든 클래스는 draw() 메서드에 대한 구현을 제공해야 합니다.
추상화는 구현 세부 사항을 숨기고 코드를 보다 모듈화하고 유지 관리하기 쉽게 만들어 코드의 복잡성을 줄이는 데 도움이 됩니다. 또한 프로그램의 다른 부분에 영향을 주지 않고 코드를 쉽게 수정할 수 있습니다.
예시코드
abstract class Vehicle {
public abstract void start();
public abstract void stop();
}
class Car extends Vehicle {
@Override
public void start() {
System.out.println("Car started");
}
@Override
public void stop() {
System.out.println("Car stopped");
}
}
class Bike extends Vehicle {
@Override
public void start() {
System.out.println("Bike started");
}
@Override
public void stop() {
System.out.println("Bike stopped");
}
}
public class Main {
public static void main(String[] args) {
Vehicle car = new Car();
Vehicle bike = new Bike();
car.start();
car.stop();
bike.start();
bike.stop();
}
}
이 예제에는 두 개의 추상 메서드 start() 및 stop()을 정의하는 추상 클래스 Vehicle이 있습니다. Car 및 Bike 클래스는 Vehicle 클래스를 확장하고 start() 및 stop() 메서드에 대한 자체 구현을 제공합니다.
Main 클래스에서 Car 및 Bike 개체를 만들고 이를 Vehicle 유형의 변수에 저장합니다. 그런 다음 이러한 객체에서 start() 및 stop() 메서드를 호출합니다. 이 메서드는 Car 및 Bike 클래스에서 해당 메서드를 호출합니다.
Vehicle은 추상 클래스이므로 직접 인스턴스화할 수 없습니다. 그러나 하위 클래스(자동차 및 자전거)의 참조 유형으로 사용할 수 있으므로 서로 다른 하위 클래스의 개체를 함께 그룹화하고 유사한 방식으로 조작할 수 있습니다. 추상 Vehicle 클래스 뒤에 Car 및 Bike 클래스의 구현 세부 정보를 숨기고 있기 때문에 이것은 추상화의 예입니다.
자바에서 추상클래스와 인터페이스의 차이점
추상 클래스:
- 추상 클래스는 추상(미구현) 메서드와 구체(구현된) 메서드 모두 가질 수 있습니다.
- 인스턴스 변수(필드)를 가질 수 있으며 하위 클래스에서 상속될 수 있습니다.
- 추상 클래스는 생성자를 가질 수 있습니다.
- 자바는 단일 상속만 지원하므로 하위 클래스는 하나의 추상 클래스만 확장할 수 있습니다.
- 클래스의 부분적인 구현을 정의할 수 있으며 이를 하위 클래스가 공유할 수 있습니다.
인터페이스:
- 인터페이스는 추상 메서드(몸체 없는 메서드)와 상수 필드(static final 필드)만 가질 수 있습니다.
- 인스턴스 변수나 생성자는 포함하지 않습니다.
- 자바에서는 한 클래스가 여러 인터페이스를 구현할 수 있으므로, 여러 타입의 다중 상속을 지원합니다.
- 인터페이스는 주로 클래스가 반드시 구현해야 하는 메서드들의 집합을 정의하고, 메서드 시그니처를 일치시켜 공통 규약을 제공하는 데 사용됩니다.
'개발 > Java' 카테고리의 다른 글
[Java] bytetohex hextobyte 코드 (0) | 2023.04.11 |
---|---|
[Android, Java] Main Thread에서 sub Thread 로 값 넘겨주기 (0) | 2023.04.10 |
[Java] 상속(Inheritance) 이란, super 란 (0) | 2023.03.03 |
[Java] 다형성(polymorphism) 이란 (0) | 2023.03.03 |
[Java] src 와 bin 의 차이점과 eclipse 는 구체적으로 무슨일을 하는가 (0) | 2022.11.10 |