오늘은 객체지향(OOP)의 핵심 개념을 쉽고 재미있게 알아볼게요!
객체지향이 뭔가요? 🤔
레고 블록으로 집을 만든다고 상상해보세요.
- 각 블록은 독립적이면서도 다른 블록과 조합 가능
- 비슷한 블록들은 규격이 같아 재사용 가능
- 블록들이 모여 하나의 완성된 구조물 형성
객체지향은 바로 이런 레고 블록처럼 프로그램을 객체들의 모임으로 보는 것입니다!
4대 핵심 개념 💎
1. 캡슐화 (Encapsulation)
public class CoffeeMachine {
private int water; // 외부에서 직접 접근 불가
public void addWater(int amount) {
if (amount > 0) {
this.water += amount;
}
}
}
마치 캡슐처럼 내부 구현을 숨기고 필요한 것만 공개해요
- 커피머신의 내부 부품은 숨기고
- 버튼만 외부로 공개하는 것처럼!
2. 상속 (Inheritance)
public class Animal {
public void eat() { }
}
public class Dog extends Animal {
public void bark() { }
}
마치 부모의 특징을 자식이 물려받는 것처럼
- Dog는 Animal의 모든 특성을 물려받고
- 거기에 자신만의 특성(bark)도 가질 수 있어요
3. 다형성 (Polymorphism)
Animal pet1 = new Dog();
Animal pet2 = new Cat();
// 같은 타입이지만 다른 동작!
pet1.makeSound(); // 멍멍!
pet2.makeSound(); // 야옹!
하나의 타입으로 여러 가지 객체를 다루는 것
- TV 리모컨으로 다양한 TV를 조작하듯
- 같은 메서드로 다른 동작 가능!
4. 추상화 (Abstraction)
public interface Vehicle {
void move();
void stop();
}
복잡한 것은 숨기고 핵심만 남기는 것
- 자동차를 운전할 때
- 엔진이 어떻게 동작하는지 몰라도
- 핸들과 페달만 알면 되죠!
실무에서는 이렇게 써요 💫
예시: 결제 시스템
public interface PaymentService {
void pay(int amount);
}
public class CreditCardPayment implements PaymentService {
@Override
public void pay(int amount) {
// 신용카드 결제 로직
}
}
public class KakaoPayment implements PaymentService {
@Override
public void pay(int amount) {
// 카카오페이 결제 로직
}
}
장점은? 🌟
유지보수가 쉬워요
- 레고 블록처럼 교체하기 쉽습니다
재사용성이 높아요
- 한번 만든 객체는 여러 곳에서 사용 가능
확장이 쉬워요
- 새로운 기능을 추가하기 쉬움
주의할 점 ⚠️
과도한 상속은 피하기
- 상속이 깊어지면 복잡해져요
- 차라리 컴포지션(구성)을 고려해보세요
적절한 추상화 레벨 선택
- 너무 추상적이면 이해하기 어려워요
- 너무 구체적이면 재사용이 어려워요
마치며 🎁
객체지향은 마치 레고 블록으로 세상을 만드는 것과 같아요. 각각의 블록(객체)이 자신의 역할을 잘 수행하면서도, 다른 블록과 잘 어울릴 때 멋진 프로그램이 완성됩니다!
더 궁금한 점이 있다면 댓글로 남겨주세요! 😊
728x90
'800===Dev Docs and License > 이론 문서' 카테고리의 다른 글
객체지향 심화 학습 4편: 인터페이스 분리 원칙 (ISP) 완전정복 🎯 (1) | 2024.11.03 |
---|---|
객체지향 심화 학습 1편 SRP : SOLID 원칙 완전정복 🎯 (0) | 2024.11.03 |
What is the Internet (0) | 2024.06.07 |
Coding Best Practice (0) | 2024.06.01 |
Network Subnet Introduced (0) | 2024.05.29 |