객체 지향 프로그래밍 (Object-Oriented Programming, OOP)

Kkd·2025년 2월 12일
0

매일메일 개념정리

목록 보기
83/93

객체 지향 프로그래밍 (Object-Oriented Programming, OOP)란? 🚀

1. 객체 지향 프로그래밍(OOP)이란?

객체 지향 프로그래밍(OOP)객체(Object)와 클래스(Class)를 기반으로 프로그램을 설계하고 구현하는 프로그래밍 패러다임입니다.
데이터(필드)와 동작(메서드)을 하나의 객체로 묶어 재사용성과 유지보수성을 향상시키는 것이 핵심입니다.

📌 객체(Object): 데이터 + 동작(메서드)을 포함하는 단위
📌 클래스(Class): 객체를 생성하기 위한 설계도

OOP의 핵심 개념:
캡슐화(Encapsulation)
상속(Inheritance)
다형성(Polymorphism)
추상화(Abstraction)


2. OOP의 핵심 개념

✅ 1) 캡슐화 (Encapsulation)

📌 캡슐화(Encapsulation)객체의 데이터(필드)를 외부에서 직접 접근하지 못하도록 숨기고, 메서드를 통해서만 접근할 수 있도록 하는 개념입니다.

장점
✔ 데이터 보호 (정보 은닉, Information Hiding)
✔ 코드 수정 최소화 (유지보수성 향상)

📌 캡슐화 예제 (Java)

class Person {
    private String name;  // private 필드 (외부 접근 불가)

    // Getter (데이터 읽기)
    public String getName() {
        return name;
    }

    // Setter (데이터 변경)
    public void setName(String name) {
        this.name = name;
    }
}

📌 외부에서는 setName(), getName()을 통해서만 name 값을 변경하고 읽을 수 있음.


✅ 2) 상속 (Inheritance)

📌 상속(Inheritance)기존 클래스를 확장하여 새로운 클래스를 만드는 개념입니다.
즉, 부모 클래스(슈퍼 클래스)의 속성과 메서드를 자식 클래스(서브 클래스)가 물려받아 재사용할 수 있습니다.

장점
코드 재사용성 증가
유지보수 용이

📌 상속 예제 (Java)

// 부모 클래스
class Animal {
    void sound() {
        System.out.println("동물이 소리를 냅니다.");
    }
}

// 자식 클래스 (Animal 상속)
class Dog extends Animal {
    void bark() {
        System.out.println("멍멍!");
    }
}

public class Main {
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.sound(); // 부모 클래스의 메서드 호출 가능
        dog.bark();  // 자식 클래스의 메서드 호출
    }
}

📌 Dog 클래스는 Animal 클래스를 상속받아 sound() 메서드를 그대로 사용 가능.


✅ 3) 다형성 (Polymorphism)

📌 다형성(Polymorphism)같은 인터페이스나 부모 클래스를 공유하는 객체들이 서로 다른 동작을 할 수 있도록 하는 개념입니다.

장점
코드의 유연성 증가
확장성과 유지보수성 향상

📌 다형성 예제 (Java)

class Animal {
    void makeSound() {
        System.out.println("동물 소리");
    }
}

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

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

public class Main {
    public static void main(String[] args) {
        Animal myDog = new Dog();
        Animal myCat = new Cat();

        myDog.makeSound();  // 멍멍!
        myCat.makeSound();  // 야옹!
    }
}

📌 makeSound() 메서드는 같은 메서드지만, 객체 타입에 따라 다르게 동작함.


✅ 4) 추상화 (Abstraction)

📌 추상화(Abstraction)불필요한 세부 사항을 숨기고, 핵심적인 기능만을 제공하는 개념입니다.
즉, 인터페이스(interface)나 추상 클래스(abstract class)를 사용하여 객체의 동작을 정의합니다.

장점
코드의 복잡성을 줄이고, 유지보수성을 높임
설계 단계에서 공통적인 기능을 정의 가능

📌 추상 클래스 예제 (Java)

abstract class Animal {
    abstract void makeSound(); // 추상 메서드 (구현 X)
}

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

public class Main {
    public static void main(String[] args) {
        Animal dog = new Dog();
        dog.makeSound();  // 멍멍!
    }
}

📌 추상 클래스 Animal을 상속한 Dog 클래스에서 makeSound() 구현을 강제함.


3. OOP의 장점과 단점

장점

코드 재사용성 증가 → 상속을 통해 기존 코드를 재사용 가능
유지보수성 향상 → 코드 변경 시 영향 범위 최소화
유연성과 확장성 증가 → 다형성을 활용하여 코드 변경 없이 새로운 기능 추가 가능
캡슐화로 데이터 보호 → 외부에서 객체의 데이터를 직접 변경할 수 없음


단점

초기 설계 비용이 큼 → 클래스와 객체 간 관계를 고려해야 함
과도한 상속 사용 시 복잡성 증가 → 다중 상속 문제 발생 가능
실행 속도가 상대적으로 느릴 수 있음 → FP(함수형 프로그래밍)보다 성능이 낮을 수도 있음


4. 객체 지향 프로그래밍(OOP) vs 함수형 프로그래밍(FP)

비교 항목객체 지향 프로그래밍(OOP)함수형 프로그래밍(FP)
중심 개념객체(Object), 클래스(Class)함수(Function), 표현식(Expression)
상태 변경변경 가능 (Mutable State)불변성 유지 (Immutable State)
코드 스타일명령형 (Imperative)선언형 (Declarative)
부작용있음 (Side Effect 발생)없음 (순수 함수 사용)
병렬 처리어렵고 동기화 필요쉬움 (Immutable 데이터)

📌 OOP는 상태 중심, FP는 데이터 변환 중심!
📌 최근에는 "함수형 스타일 + 객체지향" 혼합 방식 사용이 많아짐!


5. OOP의 활용 사례

웹 애플리케이션 개발 → Java, Python, C++ 기반 웹 서비스 (Spring, Django, Flask)
모바일 앱 개발 → Android(Java, Kotlin), iOS(Swift)
게임 개발 → Unity(C#), Unreal Engine(C++)
데스크톱 애플리케이션 개발 → Java Swing, .NET (C#)
엔터프라이즈 소프트웨어 → 은행, 금융, ERP 시스템


6. 결론

객체 지향 프로그래밍(OOP)은 "클래스 + 객체"를 기반으로 유지보수성과 재사용성을 높이는 프로그래밍 방식
캡슐화, 상속, 다형성, 추상화 등의 개념을 활용하여 효율적인 코드 구조 설계 가능
대규모 소프트웨어, 웹 애플리케이션, 게임 개발 등 다양한 분야에서 널리 사용됨
최근에는 함수형 프로그래밍(FP)과 OOP를 혼합하여 개발하는 방식도 많이 활용됨

**OOP를 활용하면 확장성과 유지보수성이 뛰어난 소프트웨어를 만들 수 있습니다!


추가 학습 자료

profile
🌱

0개의 댓글