개발/개념정리

What are the four main principles of OOP?

ksc036 2026. 5. 17. 17:23

객체지향 프로그래밍(OOP)의 4가지 핵심 원칙

객체지향 프로그래밍(Object-Oriented Programming, OOP)은 현실 세계의 객체 개념을 바탕으로 소프트웨어를 설계하는 방식이다.
객체지향에서는 코드의 재사용성과 유지보수성을 높이기 위해 여러 가지 개념을 사용하는데, 그중 가장 대표적인 4가지 원칙은 다음과 같다.

  • 상속(Inheritance)
  • 다형성(Polymorphism)
  • 추상화(Abstraction)
  • 캡슐화(Encapsulation)

이번 글에서는 각각의 개념이 왜 필요한지와 장단점까지 함께 정리해보려고 한다.

 

1. 상속(Inheritance)

상속은 부모 클래스의 속성과 메서드를 자식 클래스가 물려받아 사용할 수 있게 해주는 개념이다.

이를 통해 중복 코드를 줄이고 코드의 재사용성을 높일 수 있다.

예를 들어 여러 클래스에서 공통적으로 사용하는 기능이 있다면 부모 클래스에 정의하고, 자식 클래스들이 이를 상속받아 사용할 수 있다.

상속의 장점

  • 코드 재사용 가능
  • 중복 코드 감소
  • 공통 로직 관리 용이
  • 유지보수 편리

상속의 단점

하지만 상속 구조가 너무 깊어질 경우 다음과 같은 문제가 발생할 수 있다.

  • 클래스 간 결합도가 증가
  • 코드 흐름 파악이 어려워짐
  • 부모 클래스 변경 시 자식 클래스 영향 발생

이러한 이유로 최근에는 무조건 상속을 사용하는 것보다 Composition(조합)을 선호하는 경우도 많다.

즉,

“가져다 쓰는 관계(has-a)”를 활용하여 유연한 구조를 만드는 방식이다.

언제 사용할까?

  • 여러 클래스가 공통 기능을 공유해야 할 때
  • 부모의 기능 대부분을 재사용하고 싶을 때

2. 다형성(Polymorphism)

다형성은 같은 메서드 호출이라도 객체에 따라 다른 동작을 수행할 수 있게 하는 개념이다.

즉,

“같은 인터페이스지만 동작은 다르게”

구현할 수 있도록 해준다.

다형성의 종류

1) 오버로딩(Overloading)

컴파일 시점의 다형성이다.

  • 같은 메서드 이름 사용
  • 매개변수(parameter)가 다름

예시:

 
print(String s)
print(int n)
 

2) 오버라이딩(Overriding)

실행 시점(Runtime)의 다형성이다.

부모 클래스나 인터페이스의 메서드를 자식 클래스에서 재정의하여 사용한다.

예시:

 
class Animal {
    void sound() {}
}

class Dog extends Animal {
    @Override
    void sound() {
        System.out.println("멍멍");
    }
}
 

다형성의 장점

  • 코드 확장 용이
  • 객체 교체가 쉬움
  • 유연한 설계 가능
  • 객체지향 특징을 잘 살릴 수 있음

언제 사용할까?

  • 같은 동작이 객체마다 다르게 동작해야 할 때
  • 인터페이스 기반 설계를 할 때

3. 추상화(Abstraction)

추상화는 복잡한 내부 구현을 숨기고 필요한 기능만 외부에 제공하는 개념이다.

사용자는 내부 동작 원리를 몰라도 제공된 기능만으로 쉽게 객체를 사용할 수 있다.

주로 다음과 같은 방식으로 구현한다.

  • 인터페이스(interface)
  • 추상 클래스(Abstract Class)

추상화의 장점

  • 복잡성 감소
  • 유지보수성 향상
  • 사용 방법 단순화
  • 역할과 구현 분리 가능

예를 들어 자동차를 운전할 때 엔진 내부 구조를 몰라도 핸들과 페달만 사용하면 되는 것과 비슷하다.

언제 사용할까?

  • 내부 구현을 감추고 싶을 때
  • 공통 규격(인터페이스)을 정의하고 싶을 때

4. 캡슐화(Encapsulation)

캡슐화는 데이터와 메서드를 하나의 클래스 내부에 묶고, 필요한 정보만 외부에 공개하는 개념이다.

보통 접근 제어자(private, protected, public)를 활용하여 구현한다.

캡슐화의 목적

  • 객체 내부 데이터 보호
  • 외부의 잘못된 접근 방지
  • 데이터 무결성 유지

예를 들어:

 
private int age;
 

처럼 외부에서 직접 수정하지 못하도록 막고,
getter/setter를 통해 안전하게 접근하도록 만들 수 있다.

캡슐화의 장점

  • 데이터 보호 가능
  • 객체 상태 관리 용이
  • 유지보수성 향상
  • 코드 안정성 증가

마무리

객체지향의 4가지 원칙은 단순히 암기하는 개념이 아니라, 유지보수성과 확장성을 높이기 위한 설계 철학에 가깝다.

특히 실제 개발에서는 다음과 같은 흐름으로 함께 사용된다.

  • 상속 → 코드 재사용
  • 다형성 → 유연한 확장
  • 추상화 → 복잡성 감소
  • 캡슐화 → 데이터 보호

결국 객체지향 프로그래밍의 핵심은
“변화에 유연한 코드를 만드는 것”이라고 볼 수 있다.

'개발 > 개념정리' 카테고리의 다른 글

What is a primary key? What is a foreign key?  (0) 2026.05.23
What is an index, and why do we use it?  (0) 2026.05.19
Network - OSI 5계층  (1) 2026.05.18
인증/인가 개념 정리  (0) 2026.03.21
트랜잭션  (0) 2026.03.19