SMALL
안녕하세요! 😊
오늘은 Java의 객체지향 프로그래밍(Object-Oriented Programming, OOP)의 4대 원칙에 대해 배워볼 거예요.
이 원칙들은 복잡한 프로그램을 깔끔하고 유지보수하기 쉽게 만드는 데 꼭 필요합니다. 조금 어렵게 느껴질 수 있지만 차근차근 예제를 통해 이해해 보아요! 💪
1. 캡슐화(Encapsulation) 🎁
캡슐화는 데이터를 보호하고 숨기는 것이에요.
- 클래스 내부의 변수(속성)를 외부에서 직접 접근하지 못하게 하고, 대신 메서드(함수)를 통해서만 접근할 수 있도록 해요.
- 👉 비유: 비밀번호가 걸린 금고. 데이터를 보호하고 관리하는 역할을 합니다.
class BankAccount {
// private로 데이터를 숨김
private int balance = 0;
// 데이터를 제어하는 메서드 제공
public void deposit(int amount) {
if (amount > 0) {
balance += amount;
System.out.println("입금 완료. 잔액: " + balance);
} else {
System.out.println("입금 금액은 0보다 커야 합니다.");
}
}
public void withdraw(int amount) {
if (amount > 0 && balance >= amount) {
balance -= amount;
System.out.println("출금 완료. 잔액: " + balance);
} else {
System.out.println("잔액 부족 또는 잘못된 금액입니다.");
}
}
}
동작 설명:
balance
는 private이어서 외부에서 직접 접근할 수 없어요.deposit
과withdraw
메서드를 통해서만 잔액을 수정할 수 있습니다.- 이렇게 데이터를 보호하는 것이 캡슐화입니다.
2. 상속(Inheritance) 👪
상속은 기존 클래스를 확장하여 새로운 클래스를 만드는 것이에요.
- 👉 비유: 부모의 특성을 자식이 물려받는 것과 같아요.
// 부모 클래스
class Animal {
void eat() {
System.out.println("This animal eats food.");
}
}
// 자식 클래스
class Dog extends Animal {
void bark() {
System.out.println("The dog barks.");
}
}
public class Main {
public static void main(String[] args) {
Dog dog = new Dog(); // Dog 객체 생성
dog.eat(); // 부모 클래스 메서드 호출
dog.bark(); // 자식 클래스 메서드 호출
}
}
동작 설명:
Dog
클래스는Animal
클래스를 상속받았어요.Dog
클래스는Animal
의eat
메서드와 자신의bark
메서드를 모두 사용할 수 있습니다.- 상속을 통해 코드 재사용성을 높일 수 있어요! 😊
3. 다형성(Polymorphism) 🧩
다형성은 하나의 인터페이스(또는 메서드)가 여러 형태로 동작할 수 있는 것을 말해요.
- 👉 비유: "전화 걸기"라는 기능은 핸드폰, 인터넷 전화기 등 다양한 기기에서 동작할 수 있어요.
class Animal {
void sound() {
System.out.println("Some animal makes a sound.");
}
}
class Cat extends Animal {
void sound() {
System.out.println("Meow!");
}
}
class Dog extends Animal {
void sound() {
System.out.println("Woof!");
}
}
public class Main {
public static void main(String[] args) {
Animal myAnimal = new Dog(); // 부모 타입 참조 변수
myAnimal.sound(); // 출력: Woof!
myAnimal = new Cat();
myAnimal.sound(); // 출력: Meow!
}
}
동작 설명:
myAnimal
은Animal
타입이지만, 실제 객체에 따라sound
메서드의 동작이 달라집니다.- 다형성을 통해 하나의 타입으로 다양한 동작을 수행할 수 있습니다.
4. 추상화(Abstraction) 🧱
추상화는 중요한 것만 간추려서 보여주는 것이에요.
- 추상 클래스나 인터페이스를 사용해 공통점을 정의하고, 세부 사항은 각 클래스에서 구현합니다.
- 👉 비유: 자동차의 운전대는 "핸들을 돌리면 자동차가 움직인다"는 공통점만 보이고, 내부 엔진 작동 방식은 숨겨져 있어요.
// 추상 클래스
abstract class Animal {
abstract void sound(); // 추상 메서드 (구현 X)
}
// Cat 클래스
class Cat extends Animal {
void sound() {
System.out.println("Meow!");
}
}
// Dog 클래스
class Dog extends Animal {
void sound() {
System.out.println("Woof!");
}
}
public class Main {
public static void main(String[] args) {
Animal myAnimal = new Cat(); // Cat 객체
myAnimal.sound(); // 출력: Meow!
myAnimal = new Dog(); // Dog 객체
myAnimal.sound(); // 출력: Woof!
}
}
동작 설명:
Animal
은 추상 클래스이므로 직접 객체를 생성할 수 없습니다.Cat
과Dog
는Animal
의 추상 메서드sound
를 구현했어요.- 각 클래스마다 고유의 행동을 정의할 수 있는 것이 추상화입니다.
이해가 어렵다면? 😅
처음에는 "추상화와 다형성의 차이점이 뭐지?" 같은 헷갈림이 생길 수 있어요.
🔑 팁:
- 캡슐화: 데이터를 보호하고 숨김
- 상속: 부모의 것을 물려받음
- 다형성: 하나의 이름으로 다양한 동작 가능
- 추상화: 중요한 것만 간추려 정의
직접 코드를 작성하며 천천히 익혀 보세요! 😊
왜 중요할까요?
객체지향 원칙은 복잡한 프로그램을 구조화하고 유지보수성을 높이는 데 필수적이에요.
이 원칙들을 이해하면 더 나은 설계를 할 수 있고, 실무에서도 큰 도움이 된답니다. 🚀
오늘도 함께 학습해 주셔서 감사합니다! 😊
조금씩 배우다 보면 객체지향 프로그래밍이 점점 더 재미있어질 거예요. 여러분의 성장을 응원합니다! 화이팅! ❤️
728x90
반응형
SMALL
'JAVA > 객체지향 프로그래밍' 카테고리의 다른 글
Java 내장 객체지향 기능 활용 가이드: Enum과 Record 쉽게 배우기 (0) | 2024.12.19 |
---|---|
Java 인터페이스와 추상 클래스 쉽게 이해하기: 초보자도 알기 쉬운 차이와 사용법 (0) | 2024.12.18 |
코드 스타일 전쟁! 함수형 프로그래밍과 객체지향 프로그래밍의 모든 것 - 코드카인 티스토리 (0) | 2024.12.18 |