Post

객체지향 프로그래밍(OOP)이란? 개념, 특징, 장점 총정리

객체지향 프로그래밍의 정의와 특징, 장단점을 한눈에 정리한 가이드입니다.

객체지향 프로그래밍(OOP)이란? 개념, 특징, 장점 총정리

객체가 서로 메시지를 주고받으며 협력하도록 설계‧구현하는 프로그래밍 패러다임입니다. “데이터 + 행위”를 하나로 묶어 응집도를 높이고, 필요한 곳만 노출해 결합도를 낮추는 것이 핵심이죠.

객체지향이란?

객체(Object)​는 상태(State), 행동(Behavior), 그리고 다른 객체와 구분되는 식별자(Identity)​를 가진 독립적인 단위입니다. 클래스(class)는 설계도이고, 그 설계도로부터 메모리 위에 실체화된 인스턴스가 바로 객체입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
// 클래스(설계도)
public class Cat {
    // 상태(State)
    private String name;
    private int age;

    // 생성자(Constructor)
    public Cat(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // 행동(Behavior)
    public void cry() {
        System.out.println("냐옹");
    }

    public void eat(String food) {
        System.out.println(food + "를 먹었다!!");
    }

    // Getter / Setter (캡슐화)
    public String getName() { return name; }
    public int getAge() { return age; }
    public void setName(String name) { this.name = name; }
    public void setAge(int age) { this.age = age; }
}

// 객체(인스턴스)
public class Main {
    public static void main(String[] args) {
        Cat cat1 = new Cat("나비", 2); // 객체 생성
        cat1.cry();                     // 메시지 전달
        cat1.eat("참치");             // 협력
    }
}

위 코드에서 Cat은 설계도(클래스)이고, cat1은 메모리에 생성된 객체입니다. 실제 프로덕션 코드에서는 각 객체가 분명한 책임을 가지고 서로 협력해 시스템을 완성합니다.

절차지향 vs 객체지향

| 구분 | 절차지향(Procedural) | 객체지향(Object-Oriented) | | ————— | ——————– | ————————- | | 중심 개념 | 함수(절차) | 객체(데이터 + 행위) | | 데이터 접근 | 전역 데이터 공유 | 캡슐화로 은닉 | | 재사용 방법 | 함수 라이브러리 | 클래스, 상속, 조합 | | 확장성 | 기존 코드 수정 | 새로운 객체 추가 | | 적합한 규모 | 작은·단순한 프로그램 | 복잡한 비즈니스 도메인 |

장점과 단점

장점

  • 유지보수성: 책임이 잘 분리되어 버그 수정·기능 추가가 용이합니다.

  • 재사용성: 상속·조합으로 구현 코드를 손쉽게 재활용할 수 있습니다.

  • 확장성: 새로운 요구 사항이 생겨도 객체를 확장·추가하여 수용하기 쉽습니다.

  • 협업 효율: 역할·모듈이 명확해 팀 단위 개발에 유리합니다.

단점

  • 학습 비용: 절차지향보다 설계 개념이 복잡해 러닝 커브가 있습니다.

  • 성능 오버헤드: 메서드 호출, 객체 생성 비용이 존재해 실시간·임베디드에서 주의가 필요합니다.

  • 과도한 설계: 작은 프로젝트에서 지나친 OOP 설계는 오히려 개발 속도를 늦출 수 있습니다.

    언제 OOP를 선택할까?

  • 도메인이 복잡해서 개념 모델링이 중요한 경우

  • 변경·확장이 잦은 장기 프로젝트

  • 협업 규모가 커서 역할 분담이 명확해야 하는 경우

반대로 계산 로직만 필요한 간단한 스크립트, 풋풋한 단일 기능 툴처럼 작고 수명이 짧은 프로그램은 절차지향·함수형이 더 빠르고 단순할 수 있습니다.

마무리

객체지향은 무조건 옳은 만능 열쇠가 아닙니다. 하지만 복잡한 문제를 사람 중심 사고로 해석할 수 있게 해 주는 강력한 도구이죠. 상황에 맞춰 OOP의 힘을 끌어내고, 필요하다면 절차지향·함수형 기법과 혼용해 유연한 소프트웨어를 만들어 보세요.

This post is licensed under CC BY 4.0 by the author.