Development/Java

자바는 왜 객체지향 언어인가요?

이대코 2025. 3. 15. 13:44

자바는 캡슐화,상속,추상화,다형성의 특징을 갖고 있기 때문입니다.

 

흔히 말하는 "캡상추다" 가 맞습니다.

 

1. 캡슐화(Encapsulation)

  • 객체 내부의 데이터(속성)는 private으로 숨기고, getter/setter 메서드를 통해 접근할 수 있습니다.
  • 이를 통해 데이터 보호와 정보 은닉이 가능하며, 유지보수가 쉬워집니다.
public class Person {
    private String name;  // 외부에서 직접 접근 불가

    public String getName() {  // 캡슐화를 통해 접근
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

 

2. 상속(Inheritance)

  • 기존 클래스를 확장하여 새로운 클래스를 만들 수 있습니다.
  • 코드 재사용성을 높이고, 중복을 줄이며, 유지보수를 쉽게 합니다.
class Animal {
    void makeSound() {
        System.out.println("동물이 소리를 냅니다.");
    }
}

class Dog extends Animal {
    void bark() {
        System.out.println("멍멍!");
    }
}

 

3. 추상화(Abstraction)

  • 불필요한 세부 사항을 숨기고, 핵심 기능만 노출합니다.
  • 인터페이스와 추상 클래스를 사용하여 구현됩니다.
abstract class Vehicle {
    abstract void move();  // 구현 강제
}

class Car extends Vehicle {
    @Override
    void move() {
        System.out.println("자동차가 달립니다.");
    }
}

 

4. 다형성(Polymorphism)

  • 하나의 인터페이스나 부모 클래스를 기반으로 다양한 형태의 객체를 사용할 수 있습니다.
  • 여기서 다형성이란 하나의 객체에 여러 가지 타입을 대입할 수 있다는 것을 의미합니다.
  • 메서드 오버라이딩(Overriding)과 메서드 오버로딩(Overloading)으로 구현됩니다.
class Animal {
    void makeSound() {
        System.out.println("동물이 소리를 냅니다.");
    }
}

class Cat extends Animal {
    @Override
    void makeSound() {
        System.out.println("야옹!");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal myAnimal = new Cat();  // 부모 타입으로 자식 객체 참조 가능
        myAnimal.makeSound();  // 야옹!
    }
}