추상화
= 공통점
객체의 복잡한 내부 동작이나 구조를 감추고, 사용자에게는 필요한 기능이나 동작만 노출하는 것
추상 메소드
메소드는 메소드인데 구현 부분이 없고 선언 부분만 있는 메소드
public void turnOn();
public void turnOff();
public void setVolume(int volume);
추상 클래스
클래스는 클래스인데 추상 메소드를 포함한 클래스
추상 클래스 선언은 abstract 키워드를 사용하고, 사용은 extends 키워드를 통해 사용한다.
// 추상 클래스
public abstract class Animal {
abstract void makeSound();
void eat() {
System.out.println("This animal eats food.");
}
}
public class Dog extends Animal {
@Override
void makeSound() {
System.out.println("Woof!");
}
}
public class Cat extends Animal {
@Override
void makeSound() {
System.out.println("Meow!");
}
}
public class Main {
public static void main(String[] args) {
Animal dog = new Dog();
dog.makeSound(); // 출력: Woof!
dog.eat(); // 출력: This animal eats food.
}
}
인터페이스
추상 메소드만 있는 클래스
중간 다리 역할
Main은 인터페이스만 가져가서 쓰고, 인터페이스는 두 개의 클래스를 연결하고 있다.
인터페이스에 추상 메소드를 만들어놓고, 인터페이스를 implements 키워드로 사용해서 메소드를 구현해준다.
public interface FileUpload {
public void save(String file);
}
public class CloudFileUpload implements FileUpload {
public void save(String file) {
System.out.println(file + " 을 클라우드에 저장");
}
}
public class LoadFileUpload implements FileUpload {
public void save(String file) {
System.out.println(file + " 을 로컬에 저장");
}
}
public class Main {
public static void main(String[] args) {
FileUpload uploader; // 다형성 : 다양한 형태를 가질 수 있는 성질
uploader = new CloudFileUpload(); // Main에서 FileUpload의 의존성을 주입
// uploader = new LocalFileUpload(); LocalFileUpload가 들어갈 수도 있음
uploader.save("파일01");
}
}
다형성 : 다양한 형태를 가질 수 있는 성질
하나의 변수에 여러 개의 객체가 저장될 수 있다.
=> FileUpload에는 CloudFileUpload가 들어갈 수도 있고, LocalFileUpload가 들어갈 수도 있다.
의존성 주입 : 특정 클래스의 객체에 다른 클래스의 객체를 저장하는 방법
인터페이스를 왜 사용할까?
클래스 사이의 의존성을 줄이기 위해서
=> 클래스 분리를 돕고 유연성과 재사용성을 높이는 데 사용
추상 클래스와 인터페이스 비교
특성 | 추상 클래스 | 인터페이스 |
인스턴스화 | 불가능 | 불가능 |
메소드 | 추상 메소드와 일반 메소드 모두 가능 | 기본적으로 추상 메소드만 가능 |
변수 | 일반 변수, 정적 변수 가능 | public static final 변수만 가능 |
다중 상속/구현 | 단일 상속만 가능 | 다중 구현 가능 |
목적 | 공통 속성과 동작 제공 | 동작(행위) 명세 |
사용 키워드 | extends | implements |
성능 | 일반 클래스와 유사 | 약간 느릴 수 있음 |
728x90
'CS > OOP' 카테고리의 다른 글
[OOP] SOLID 원칙 - 객체지향 설계 원칙 5가지 (0) | 2025.01.08 |
---|