언어/자바
[Java] 자바의 객제치향 4가지 특징 3. 추상화
believekim
2025. 3. 4. 20:03
자바 객체지향의 4가지 특징
1. 캡슐화(Encapsulation) - 데이터 보호, 접근 제한
2. 상속(Inheritance) - 기능 재사용, 확장
3. 추상화(Abstraction) - 핵심만 정의
4. 다형성(Polymorphism) - 하나의 인터페이스, 다양한 구현
1. 추상화(Abstraction)란?
- 복잡한 시스템에서 필요한 기능만을 뽑아내고 불필요한 세부 사항은 감추는 과정
- 계층구조를 인터페이스 상속, 클래스 상속으로 구현
📌 장점
코드의 재사용성 | 공통 기능은 추상 클래스에 작성, 상속받아 사용 |
유지보수 용이성 | 코드 변경 시 부모 클래스만 수정 |
코드의 일관성 | 동일한 규칙에 따라 구현하도록 강제 |
느슨한 결합 | 세부 사항을 감추고 기능만 공개하여 종속성을 줄임 |
2. 인터페이스(interface)
- 클래스 이름 앞에 interface 키워드 사용
- 모든 메서드가 추상 메서드(구현하지 않은 메서드)로 구성
- 다중 상속 가능
interface Animal {
void sound(); // 구현{} X
void eat(); // 구현{} X
}
// 상속받은 곳에서 구현
class Cat implements Animal {
@Override
public void sound() {
System.out.println("야옹");
}
@Override
public void eat() {
System.out.println("생선을 먹습니다.");
}
}
public class Main {
public static void main(String[] args) {
Animal cat = new Cat();
cat.sound(); // 야옹
cat.eat(); // 생선을 먹습니다.
}
}
3. 추상클래스(abstract class)
- 클래스 이름 앞에 abstract 키워드 사용
- 상속받는 자식 클래스가 반드시 추상 메서드를 구현하도록 강제
abstract class Animal {
// 추상 메서드 (구현 {} -> X)
abstract void sound();
// 일반 메서드 (구현 {} -> O)
void eat() {
System.out.println("먹이를 먹습니다.");
}
}
class Dog extends Animal {
// 강제구현 안하면 오류
@Override
void sound() {
System.out.println("멍멍");
}
}
public class Main {
public static void main(String[] args) {
Animal dog = new Dog();
dog.sound(); // 멍멍
dog.eat(); // 먹이를 먹습니다.
}
}