800===Dev Docs and License/이론 문서

객체지향의 핵심 개념 정복하기 🎯

블로글러 2024. 11. 3. 20:55

오늘은 객체지향(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) {
        // 카카오페이 결제 로직
    }
}

장점은? 🌟

  1. 유지보수가 쉬워요

    • 레고 블록처럼 교체하기 쉽습니다
  2. 재사용성이 높아요

    • 한번 만든 객체는 여러 곳에서 사용 가능
  3. 확장이 쉬워요

    • 새로운 기능을 추가하기 쉬움

주의할 점 ⚠️

  1. 과도한 상속은 피하기

    • 상속이 깊어지면 복잡해져요
    • 차라리 컴포지션(구성)을 고려해보세요
  2. 적절한 추상화 레벨 선택

    • 너무 추상적이면 이해하기 어려워요
    • 너무 구체적이면 재사용이 어려워요

마치며 🎁

객체지향은 마치 레고 블록으로 세상을 만드는 것과 같아요. 각각의 블록(객체)이 자신의 역할을 잘 수행하면서도, 다른 블록과 잘 어울릴 때 멋진 프로그램이 완성됩니다!


더 궁금한 점이 있다면 댓글로 남겨주세요! 😊

728x90