[JAVA] 08 객체지향(OOP) 4대 특징
자바는 객체지향 프로그래밍(Object-Oriented Programming) 언어다. 객체지향은 프로그램을 객체 단위로 설계하는 방식이며, 유지보수와 확장에 유리한 구조를 만드는 것을 목표로 한다.
1. 객체지향이란
객체지향은 데이터를 중심으로 기능을 묶어 현실 세계의 개념을 코드로 표현하는 방식이다.
자바에서는 클래스와 객체를 통해 객체지향을 구현한다. 객체는 상태(필드)와 동작(메서드)을 함께 가진다.
2. 객체지향 4대 특징
- 캡슐화 (Encapsulation)
- 상속 (Inheritance)
- 다형성 (Polymorphism)
- 추상화 (Abstraction)
3. 캡슐화 (Encapsulation)
캡슐화는 데이터를 외부로부터 보호하고, 메서드를 통해서만 접근하도록 하는 개념이다.
class Person {
private int age;
public void setAge(int age) {
if (age > 0) {
this.age = age;
}
}
public int getAge() {
return age;
}
}
필드는 private으로 숨긴다.
접근은 public 메서드를 통해 수행한다.
잘못된 값 입력을 방지할 수 있다.
→ 데이터 무결성을 보장하는 것이 핵심이다.
4. 상속 (Inheritance)
상속은 기존 클래스의 기능을 새로운 클래스가 물려받는 개념이다. 코드 재사용과 계층 구조 설계를 가능하게 한다.
class Animal {
void eat() {
System.out.println("먹는다");
}
}
class Dog extends Animal {
void bark() {
System.out.println("짖는다");
}
}
Dog dog = new Dog();
dog.eat();
dog.bark();
OUTPUT
먹는다
짖는다
- extends 키워드 사용
- 자바는 단일 상속만 허용
super 키워드를 통해 부모의 메서드를 호출할 수 있다.
5. 다형성 (Polymorphism)
다형성은 하나의 타입으로 여러 객체를 참조할 수 있는 성질이다.
Animal animal = new Dog();
animal.eat();
실행 시점에는 실제 객체(Dog)의 메서드가 호출된다. 이를 동적 바인딩(Dynamic Binding)이라고 한다.
오버라이딩
class Dog extends Animal {
@Override
void eat() {
System.out.println("개가 먹는다");
}
}
메서드 이름과 매개변수가 동일해야 한다. 실행 시점에 자식 메서드가 호출된다.
업캐스팅 / 다운캐스팅
Animal a = new Dog(); // 업캐스팅
Dog d = (Dog) a; // 다운캐스팅
다운캐스팅은 실제 객체 타입과 일치해야 한다.
6. 추상화 (Abstraction)
추상화는 공통적인 특징만 정의하고 구체적인 구현은 하위 클래스에 맡기는 개념이다.
abstract class Animal {
abstract void sound();
}
class Dog extends Animal {
void sound() {
System.out.println("멍멍");
}
}
- abstract 키워드 사용
- 추상 메서드는 구현부가 없다
- 자식 클래스에서 반드시 구현해야 한다
7. 인터페이스
interface Flyable {
void fly();
}
class Bird implements Flyable {
public void fly() {
System.out.println("난다");
}
}
- implements 키워드 사용
- 다중 구현 가능
- 메서드는 기본적으로 public abstract
추상 클래스 vs 인터페이스
- 추상 클래스 → 공통 상태 + 일부 구현 포함 가능
- 인터페이스 → 행위 중심 설계
- 인터페이스는 다중 구현 가능
8. OOP는 왜 중요한가
- 변경에 강한 구조
- 확장에 유리
- 결합도를 낮춤
- 유지보수 비용 감소
4대 특징은 서로 연결되어 있다. 캡슐화가 기본이 되고, 상속과 다형성이 확장을 가능하게 하며, 추상화가 설계 수준을 높인다.
정리
- 캡슐화 → 데이터 보호
- 상속 → 코드 재사용
- 다형성 → 유연한 구조
- 추상화 → 핵심만 표현
- 객체지향은 설계 철학이다.
'Computer Science > Java' 카테고리의 다른 글
| [JAVA] 다형성 (0) | 2026.02.15 |
|---|---|
| [JAVA] 10 컬렉션(List / Set / Map)과 제네릭 (0) | 2026.02.15 |
| [JAVA] 07 클래스와 객체 (0) | 2026.02.15 |
| [JAVA] 06 메서드(Method) (0) | 2026.02.15 |
| [JAVA] 05 배열(Array) (0) | 2026.02.15 |