Java 객체지향 개념: 추상화, 캡슐화, 상속, 다형성

 

객체지향 프로그래밍(Object-Oriented Programming, OOP)추상화, 캡슐화, 상속, 다형성이라는 네가지 핵심 개념을 바탕으로 설계된다.

 

 

1. 추상화 (Abstraction)

 

  • 복잡한 시스템에서 핵심적인 정보만 추출하고, 불필요한 부분은 숨기는 개념
  • 객체의 주요 기능을 정의하는 인터페이스나 추상 클래스를 사용
  • 현실 세계의 개념을 프로그래밍에서 표현하기 쉽게 만들어줌

 

 

2. 캡슐화 (Encapsulation)

 

  • 데이터를 숨기고, 외부에서 직접 접근하지 못하도록 제한하는 기법
  • private 키워드로 멤버 변수를 보호하고, getter/setter를 사용해 접근한다.
  • 데이터 무결성을 유지하고, 보안성을 높임

 

예시

class Person {
    private String name;  // private 멤버 변수

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

    public String getName() { // Getter
        return name;
    }
}

 

Person 클래스의 name 변수는 직접 접근할 수 없고, getName() 및 setName() 메서드를 통해서만 수정 가능

 

 

3. 상속 (Inheritance)

 

  • 기존 클래스(부모)로부터 속성과 메서드를 물려받아 새로운 클래스를 생성하는 개념
  • 코드의 재사용성을 높이고 유지보수를 쉽게 만듬
  • extends 키워드를 사용하여 구현

 

예시

class Animal {
    void eat() {
        System.out.println("먹고 있어요!");
    }
}

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

public class Main {
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.eat();  // 부모 클래스의 메서드 사용
        dog.bark(); // 자신의 메서드 사용
    }
}

 

Dog 클래스는 Animal 클래스를 상속받아 eat() 메서드를 사용할 수 있음

 

 

4. 다형성 (Polymorphism)

 

  • 같은 메서드 호출 방식으로 다른 동작을 수행하는 개념
  • 오버로딩(Overloading)과 오버라이딩(Overriding)을 통해 구현
  • 인터페이스와 상속을 활용하면 코드 확장성이 높아짐

 

예시

class Animal {
    void eat() {
        System.out.println("먹고 있어요!");
    }
}

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

public class Main {
    public static void main(String[] args) {
        Animal myAnimal = new Dog(); // 부모 타입으로 자식 객체 참조
        myAnimal.eat(); // 출력: 먹고 있어요!
    }
}

 

Animal 타입이지만, 실제로는 dog 객체가 실행되며 먹고 있어요!가 출력된다.

 

 

 

5. 왜 사용할까?

 

1) 코드의 재사용성 증가

  • 상속을 통해 기존 클래스를 재사용하여 새로운 클래스를 만들 수 있다.
  • 공통 기능을 분리하여 중복 코드를 줄일 수 있다.

 

2) 유지보수 및 확장 용이

  • 캡슐화로 데이터를 보호하고, 외부 코드 변경 없이 내부 로직을 수정 가능
  • 다형성을 활용하면 코드 수정 없이 새로운 기능을 추가할 수 있다.

 

3) 높은 코드 가독성과 모듈화

  • 추상화로 복잡한 시스템을 단순하게 표현 가능
  • 각각의 객체가 독립적으로 동작하여 모듈화가 가능

 

4) 확장성과 유연성 증가

  • 인터페이스와 다형성을 활용하면 새로운 기능을 추가할 때 기존 코드 수정 없이 확장 가능
  • 객체 간 결합도가 낮아 유지보수 및 테스트가 쉬워진다.

 

 

 

 

 

 

 

'Java' 카테고리의 다른 글

Java Interface의 개념과 활용  (0) 2025.02.15
[JAVA] Servlet Filter란?  (0) 2025.01.15
[JAVA] Kakao Pay Api 사용법  (0) 2025.01.13
[JAVA] Thread  (1) 2025.01.08
[JAVA] Java란 무엇인가  (3) 2025.01.02