본문 바로가기
CS

[CS] 절차지향 vs 객체지향

by 시간많은백수 2023. 8. 20.
반응형

절차지향과 객체지향 비교

 

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

절차지향 프로그래밍은 프로그램을 수행해야 할 작업 단계들의 연속으로 간주합니다. 프로그램은 일련의 함수나 절차들의 집합으로 구성되며, 데이터와 함수(절차)가 분리되어 있습니다. 주로 C, Pascal, Fortran과 같은 언어에서 많이 사용되었습니다.

 

💡특징

  • 프로그램이 수행해야 할 일련의 단계를 중심으로 설계됩니다.
  • 데이터와 함수(절차)가 분리되어 관리됩니다.
  • 프로그램의 흐름이 상대적으로 직관적이며, 단순한 작업에 적합합니다.
  • 작은 규모의 프로젝트나 선형적인 흐름이 필요한 경우에 유용합니다.

💡장점

  • 간단하고 직관적인 프로그램 작성이 가능합니다.
  • 작은 규모의 프로젝트에서 성능 면에서 효율적입니다.

💡단점

  • 대규모 프로젝트의 복잡성을 다루기 어려울 수 있습니다.
  • 유지보수와 확장이 어려울 수 있습니다.
  • 코드 재사용이 제한적일 수 있습니다.

 

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

객체지향 프로그래밍은 프로그램을 상호작용하는 '객체'들의 모음으로 간주합니다. 각각의 객체는 데이터와 해당 데이터를 처리하는 메서드(함수)로 구성되며, 이 객체들 간의 상호작용을 통해 프로그램이 동작합니다. Java, C++, Python과 같은 언어에서 주로 사용됩니다.

 

💡특징

  • 프로그램을 객체 간의 상호작용으로 모델링하며, 데이터와 기능을 하나의 단위인 객체로 묶습니다.
  • 상속, 다형성, 캡슐화와 같은 개념을 활용하여 코드의 재사용과 유지보수를 강화합니다.
  • 대규모 프로젝트에 적합하며, 복잡한 문제를 해결할 수 있습니다.

📌상속(Inheritance)

상속은 객체지향 프로그래밍에서 중요한 개념 중 하나로, 클래스 간에 코드를 재사용하고 확장하는 메커니즘입니다. 하위 클래스(또는 파생 클래스)가 상위 클래스(또는 부모 클래스)의 특성과 동작을 상속받아 사용할 수 있게 됩니다.

 

   예)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Animal {
    void speak() {
        System.out.println("Animal speaks");
    }
}
 
class Dog extends Animal {
    @Override
    void speak() {
        System.out.println("Woof!");
    }
}
 
class Cat extends Animal {
    @Override
    void speak() {
        System.out.println("Meow!");
    }
}
 
 
cs

 

📌다형성(Polymorphism)

다형성은 같은 이름의 메서드를 서로 다른 클래스에서 다르게 구현하여 다양한 객체가 동일한 메서드 호출을 통해 다양한 방식으로 동작할 수 있게 하는 개념입니다. 이는 상속과 함께 사용될 때 가장 강력한 특징 중 하나입니다.

 

   예)

1
2
3
4
5
Animal[] animals = new Animal[] { new Dog(), new Cat() };
for (Animal animal : animals) {
    animal.speak();
}
 
 
cs

 

📌캡슐화(Encapsulation)

캡슐화는 객체의 상태(data fields)와 행동(methods)을 하나로 묶어 정보 은닉과 보안을 제공하는 프로그래밍 개념입니다. 객체의 내부 구현 세부사항을 외부로부터 숨기고, 공개된 인터페이스만을 제공하여 안정성과 유지보수성을 향상시킵니다.

 

   예)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class BankAccount {
    private double balance;
 
    public BankAccount(double initialBalance) {
        balance = initialBalance;
    }
 
    public void deposit(double amount) {
        balance += amount;
    }
 
    public void withdraw(double amount) {
        if (amount <= balance) {
            balance -= amount;
        } else {
            System.out.println("Insufficient funds");
        }
    }
 
    public double getBalance() {
        return balance;
    }
}
 
 
cs

 

💡장점

  • 코드 재사용이 용이하며, 모듈화가 잘 되어 있어 유지보수가 편리합니다.
  • 대규모 프로젝트에서도 구조를 쉽게 파악하고 확장할 수 있습니다.
  • 객체 지향 설계를 통해 문제 해결 방법을 더 직관적으로 표현할 수 있습니다.

💡단점

  • 초기 학습 곡선이 상대적으로 가파를 수 있습니다.
  • 작은 규모의 프로젝트나 간단한 로직에는 과도한 복잡성을 가져올 수 있습니다.

 

 

✔️결론

  •  작은 프로젝트나 단순한 작업을 위해서는 절차지향이 적합하고, 대규모이거나 복잡한 프로젝트를 다루려면 객체지향이 더 적합할 수 있습니다.
  • 이러한 패러다임들을 잘 이해하고 적재적소에 활용한다면, 보다 효율적이고 유지보수가 용이한 프로그램을 개발할 수 있을 것입니다.
반응형

'CS' 카테고리의 다른 글

[CS] 도커와 쿠버네티스 (컨테이너)  (0) 2023.09.04
[CS] 깃(Git)과 깃허브(Github)  (0) 2023.08.29
[CS] Rest 와 Restful API  (0) 2023.08.26
[CS] OSI 7계층과 TCP/IP 4계층  (0) 2023.08.24
[CS] MVC 패턴  (0) 2023.08.18