🚀 객체지향 프로그래밍 (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) |
---|---|---|
설계 방식 | 객체 단위로 설계 | 함수 단위로 설계 |
데이터 관리 | 객체 내에서 캡슐화 | 전역 변수와 함수로 관리 |
재사용성 | 상속과 다형성을 통해 높음 | 함수 재사용으로 높음 |
유지보수 | 객체 단위로 유지보수 용이 | 모듈 단위로 유지보수 용이 |
코드 구조 | 객체 간 상호작용을 통해 구성 | 순차적인 명령어의 집합으로 구성 |
📝 마무리
객체지향 프로그래밍과 절차지향 프로그래밍은 각각의 장점과 단점을 가지고 있으며, 프로젝트의 특성과 요구 사항에 따라 적절한 프로그래밍 패러다임을 선택하는 것이 중요하다.
✅ 객체지향 프로그래밍은 클래스와 객체, 상속, 다형성 등을 활용하여 유연하고 확장 가능한 시스템을 구축할 수 있다.
✅ 절차지향 프로그래밍은 함수 중심의 설계를 통해 간단하고 직관적인 코드 작성을 가능하게 한다.
한줄 요약
객체지향 프로그래밍은 객체를 중심으로, 절차지향 프로그래밍은 함수 중심으로 프로그램을 구성하는 방식이다.
'Computer Science' 카테고리의 다른 글
HTTP와 HTTPS의 차이점을 알아보자 👏🏻 (0) | 2024.09.26 |
---|---|
객체지향 패러다임 이해하기: OOP의 기본 개념과 원칙 (0) | 2024.07.26 |
SOLID 원칙: 객체 지향 프로그래밍의 5대 기본 원칙 (1) | 2024.07.17 |