🚀 객체지향 프로그래밍 (OOP) 및 객체지향 패러다임
💡 객체지향 프로그래밍이란?
객체지향 프로그래밍(Object-Oriented Programming, OOP)은 소프트웨어 설계 및 개발 방법론 중 하나로, 데이터와 그 데이터를 처리하는 방법을 하나의 객체로 묶어 관리하는 방식이다. 객체지향 프로그래밍은 소프트웨어를 여러 개의 독립적인 객체들의 상호작용으로 구성한다.
📌 객체지향 프로그래밍의 주요 개념
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("Speed: " + myCar.speed);
}
}
출력
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("Name: " + person.getName());
System.out.println("Age: " + person.getAge());
}
}
출력
Name: John
Age: 30
3. 상속 (Inheritance)
- 상속은 기존 클래스(부모 클래스)를 기반으로 새로운 클래스(자식 클래스)를 만드는 것을 의미한다. 자식 클래스는 부모 클래스의 속성과 메서드를 상속받아 사용할 수 있다.
Animal 클래스
public class Animal {
void eat() {
System.out.println("This animal eats food.");
}
}
Dog 클래스
public class Dog extends Animal {
void bark() {
System.out.println("The dog barks.");
}
}
Main 클래스
public class Main {
public static void main(String[] args) {
Dog myDog = new Dog();
myDog.eat();
myDog.bark();
}
}
출력
This animal eats food.
The dog barks.
4. 다형성 (Polymorphism)
- 다형성은 같은 메서드 이름이 다양한 형태로 사용될 수 있는 것을 의미한다. 이는 메서드 오버로딩(같은 이름의 메서드를 여러 개 정의)과 메서드 오버라이딩(부모 클래스의 메서드를 자식 클래스에서 재정의)으로 구현된다.
Animal 클래스
public class Animal {
void makeSound() {
System.out.println("Animal makes a sound");
}
}
Cat 클래스
public class Cat extends Animal {
@Override
void makeSound() {
System.out.println("Meow");
}
}
Dog 클래스
public class Dog extends Animal {
@Override
void makeSound() {
System.out.println("Bark");
}
}
Main 클래스
public class Main {
public static void main(String[] args) {
Animal myCat = new Cat();
Animal myDog = new Dog();
myCat.makeSound(); // Meow
myDog.makeSound(); // Bark
}
}
출력
Meow
Bark
🌟 객체지향 패러다임
객체지향 패러다임(Object-Oriented Paradigm)은 소프트웨어 설계 및 개발에서 객체라는 개념을 중심으로 프로그램을 구조화하는 방식이다. 객체지향 패러다임은 다음과 같은 원칙을 따른다:
1. 실세계 모델링
- 객체지향 패러다임은 실세계의 개념을 객체로 모델링하여, 프로그램을 현실 세계의 개체들 간의 상호작용으로 구성한다.
2. 정보 은닉
- 객체 내부의 데이터를 외부에서 접근하지 못하도록 하여, 데이터의 일관성을 유지하고 변경에 대한 영향을 최소화한다.
3. 메시지 전달
- 객체는 다른 객체와 메시지를 주고받으며 상호작용한다. 이는 객체지향 패러다임에서 중요한 통신 방식이다.
4. 상속과 재사용성
- 객체지향 패러다임은 상속을 통해 코드의 재사용성을 높이고, 새로운 기능을 추가할 때 기존 코드를 최소한으로 수정하여 확장할 수 있다.
5. 다형성과 유연성
- 다형성을 통해 같은 인터페이스를 구현한 다양한 객체들이 동일한 메시지를 받아들일 수 있어, 시스템의 유연성을 높인다.
👍🏻 객체지향 프로그래밍의 장점
- 코드 재사용성: 상속을 통해 코드의 중복을 줄이고, 재사용성을 높인다.
- 유지보수성: 객체 단위로 코드를 관리하기 때문에 유지보수가 쉽다.
- 확장성: 새로운 기능을 추가할 때 기존 코드를 최소한으로 수정하여 확장할 수 있다.
- 모듈화: 객체 단위로 모듈화하여 복잡한 시스템을 단순화할 수 있다.
👎🏻 객체지향 프로그래밍의 단점
- 복잡성: 객체지향 개념을 이해하고 적용하는 데 초기 학습 곡선이 가파를 수 있다.
- 성능 오버헤드: 객체지향의 특징인 다형성, 캡슐화 등의 사용은 성능에 오버헤드를 발생시킬 수 있다.
- 설계의 어려움: 올바른 객체 모델링과 설계가 어려울 수 있다.
📝 마무리
객체지향 프로그래밍과 객체지향 패러다임은 소프트웨어 개발의 효율성과 유연성을 높이는 강력한 방법론이다. 클래스와 객체, 캡슐화, 상속, 다형성을 잘 이해하고 활용하면 유지보수가 쉽고 확장 가능한 소프트웨어를 개발할 수 있다.
✅ 클래스를 통해 객체를 정의하고, 객체 간의 상호작용을 통해 프로그램을 구성한다.
✅ 캡슐화를 통해 데이터의 일관성을 유지하고, 변경에 대한 영향을 최소화한다.
✅ 상속을 통해 코드의 재사용성을 높이고, 새로운 기능을 쉽게 추가할 수 있다.
✅ 다형성을 통해 시스템의 유연성을 높인다.
'CS' 카테고리의 다른 글
HTTP와 HTTPS의 차이점을 알아보자 (0) | 2024.09.26 |
---|---|
객체지향 프로그래밍과 절차지향 프로그래밍: 무엇이 더 좋을까? (0) | 2024.07.26 |
SOLID 원칙: 객체 지향 프로그래밍의 5대 기본 원칙 (1) | 2024.07.17 |