객체지향과 절차지향 무엇이 더 좋을까?

2024. 7. 26. 19:57·개발 노트/etc.

🚀 객체지향 프로그래밍 (OOP)과 절차지향 프로그래밍 (POP)의 차이

💡 객체지향 프로그래밍이란?

객체지향 프로그래밍(Object-Oriented Programming, OOP)은 데이터를 객체로 모델링하고, 이 객체들이 서로 상호작용하면서 프로그램이 동작하도록 설계하는 방식이다. OOP의 핵심 개념은 클래스와 객체, 상속, 다형성, 캡슐화, 그리고 추상화이다.

📘 절차지향 프로그래밍이란?

절차지향 프로그래밍(Procedural Programming, POP)은 프로그램을 순차적인 명령어의 집합으로 구성하는 방식이다. 주로 함수나 프로시저를 통해 작업을 수행하며, 프로그램의 흐름이 절차적으로 진행된다.

📌 객체지향 프로그래밍의 주요 특징

1. 클래스와 객체

  • 클래스: 객체의 청사진으로 속성과 동작을 정의한다.
  • 객체: 클래스의 인스턴스로, 실제 데이터를 갖고 동작할 수 있는 실체이다.

Car 클래스

public class Car {
    String color;
    int speed;

    void accelerate() {
        speed += 10;
    }

    void brake() {
        speed -= 10;
    }
}

Main 클래스

public class Main {
    public static void main(String[] args) {
        Car myCar = new Car();
        myCar.color = "red";
        myCar.accelerate();
        System.out.println("속도: " + myCar.speed);
    }
}

출력

속도: 10

2. 캡슐화 (Encapsulation)

  • 캡슐화는 객체의 상태를 외부에서 직접 접근하지 못하도록 하고, 객체 내부의 데이터를 보호하는 것을 의미한다. 이를 위해 접근 제어자(private, public, protected 등)를 사용한다.

Person 클래스

public class Person {
    private String name;
    private int age;

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

Main 클래스

public class Main {
    public static void main(String[] args) {
        Person person = new Person();
        person.setName("John");
        person.setAge(30);
        System.out.println("이름: " + person.getName());
        System.out.println("나이: " + person.getAge());
    }
}

출력

이름: John
나이: 30

3. 상속 (Inheritance)

  • 상속은 기존 클래스(부모 클래스)의 특성을 새로운 클래스(자식 클래스)가 물려받는 개념이다.
  • 코드의 재사용성을 높이고, 유지보수를 용이하게 한다.

Animal 클래스

public class Animal {
    void eat() {
        System.out.println("이 동물은 음식을 먹습니다.");
    }
}

Dog 클래스

public class Dog extends Animal {
    void bark() {
        System.out.println("강아지가 짖습니다.");
    }
}

Main 클래스

public class Main {
    public static void main(String[] args) {
        Dog myDog = new Dog();
        myDog.eat();
        myDog.bark();
    }
}

출력

이 동물은 음식을 먹습니다.
강아지가 짖습니다.

4. 다형성 (Polymorphism)

  • 다형성은 같은 메서드 이름이 다양한 형태로 사용될 수 있는 것을 의미한다. 이는 메서드 오버로딩(같은 이름의 메서드를 여러 개 정의)과 메서드 오버라이딩(부모 클래스의 메서드를 자식 클래스에서 재정의)으로 구현된다.

Animal 클래스

public class Animal {
    void makeSound() {
        System.out.println("동물이 소리를 냅니다.");
    }
}

Cat 클래스

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

Dog 클래스

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

Main 클래스

public class Main {
    public static void main(String[] args) {
        Animal myCat = new Cat();
        Animal myDog = new Dog();
        myCat.makeSound(); // 야옹
        myDog.makeSound(); // 멍멍
    }
}

출력

야옹
멍멍

🌟 절차지향 프로그래밍의 주요 특징

1. 함수 중심의 설계

  • 절차지향 프로그래밍은 함수나 프로시저를 중심으로 프로그램을 구성한다.
  • 코드의 재사용성을 높이고, 모듈화를 통해 유지보수를 용이하게 한다.

절차지향 프로그래밍 예시

public class Main {
    public static void main(String[] args) {
        int result = add(5, 3);
        System.out.println("합계: " + result);
    }

    public static int add(int a, int b) {
        return a + b;
    }
}

출력

합계: 8

📊 객체지향 프로그래밍과 절차지향 프로그래밍 비교

특징 객체지향 프로그래밍 (OOP) 절차지향 프로그래밍 (POP)
설계 방식 객체 단위로 설계 함수 단위로 설계
데이터 관리 객체 내에서 캡슐화 전역 변수와 함수로 관리
재사용성 상속과 다형성을 통해 높음 함수 재사용으로 높음
유지보수 객체 단위로 유지보수 용이 모듈 단위로 유지보수 용이
코드 구조 객체 간 상호작용을 통해 구성 순차적인 명령어의 집합으로 구성

📝 마무리

객체지향 프로그래밍과 절차지향 프로그래밍은 각각의 장점과 단점을 가지고 있으며, 프로젝트의 특성과 요구 사항에 따라 적절한 프로그래밍 패러다임을 선택하는 것이 중요하다.

 

✅ 객체지향 프로그래밍은 클래스와 객체, 상속, 다형성 등을 활용하여 유연하고 확장 가능한 시스템을 구축할 수 있다.

✅ 절차지향 프로그래밍은 함수 중심의 설계를 통해 간단하고 직관적인 코드 작성을 가능하게 한다.

한줄 요약

객체지향 프로그래밍은 객체를 중심으로, 절차지향 프로그래밍은 함수 중심으로 프로그램을 구성하는 방식이다.

'개발 노트 > etc.' 카테고리의 다른 글

HTTP와 HTTPS의 차이점을 알아보자  (0) 2024.09.26
객체지향 패러다임 이해하기 - OOP의 기본 개념과 원칙  (0) 2024.07.26
Hexagonal Architecture란?  (3) 2024.07.23
유닛 테스트(Unit Test)란?  (1) 2024.07.21
SOLID 원칙: 객체 지향 프로그래밍의 5대 기본 원칙  (1) 2024.07.17
'개발 노트/etc.' 카테고리의 다른 글
  • HTTP와 HTTPS의 차이점을 알아보자
  • 객체지향 패러다임 이해하기 - OOP의 기본 개념과 원칙
  • Hexagonal Architecture란?
  • 유닛 테스트(Unit Test)란?
악덕
악덕
우당탕탕 개발 블로그
  • 악덕
    버그와 함께 춤을
    악덕
  • 전체
    오늘
    어제
    • 전체 (23)
      • TIL (0)
      • 개발 노트 (18)
        • Java (5)
        • JavaScript (1)
        • Spring (4)
        • Linux (1)
        • etc. (7)
      • 문제 풀이 (0)
      • 삽질 로그 (3)
      • 기타 (2)
  • 링크

    • GitHub
    • project.zip
    • 밀로(millo)
  • 태그

    Spring Data JPA
    invalid character found in the request target
    ports and adapters
    java persistence api
    자료형
    객체지향 프로그래밍
    i/o extended
    gdg
    프로그래밍
    java
    웹개발
    자바기초
    solid 원칙
    springboot
    프로그래밍언어
    JPA
    ssl
    macos linux
    macos ubuntu
    OOP
  • hELLO· Designed By정상우.v4.10.3
악덕
객체지향과 절차지향 무엇이 더 좋을까?
상단으로

티스토리툴바