자바 Java
5. 객체지향 4대 원칙 (캡슐화, 상속, 다형성, 추상화)
안녕하세요! 태마입니다.
Java 기초 강좌입니다.
강좌의 경우
1. 주제 간단 정리
2. 상세 주제 정리
으로 이루어져 있습니다.
자바 Java
포스팅 시작하겠습니다 :)
1. 주제 간단 정리
1. 객체지향 프로그래밍(OOP)이란?
Java는 객체지향 프로그래밍(OOP, Object-Oriented Programming) 언어입니다.
즉, 모든 것이 객체(Object)로 이루어져 있으며, 객체 간의 관계를 통해 프로그램을 설계합니다.
📌 객체지향 프로그래밍(OOP)의 핵심 목표
✔ 코드의 재사용성 증가 → 기존 코드를 재활용하여 개발 속도 향상
✔ 유지보수성 향상 → 코드 구조가 깔끔해지고, 수정이 용이함
✔ 확장성 증가 → 새로운 기능 추가가 쉬움
📌 Java에서는 객체지향 개념을 강력하게 지원하며, 이를 통해 대규모 애플리케이션을 효율적으로 개발할 수 있음!
2. 객체(Object)와 클래스(Class)의 개념
✔ 객체(Object) → 현실 세계의 사물(데이터 + 동작)
✔ 클래스(Class) → 객체를 만들기 위한 설계도
✅ (1) 클래스와 객체의 예시
class Car { // 클래스 (설계도)
String model;
int speed;
void drive() {
System.out.println(model + "가 주행 중입니다.");
}
}
public class Main {
public static void main(String[] args) {
Car myCar = new Car(); // 객체 생성
myCar.model = "Tesla";
myCar.speed = 100;
myCar.drive(); // "Tesla가 주행 중입니다." 출력
}
}
📌 클래스를 만들면 여러 개의 객체를 생성하여 사용할 수 있음!
3. 객체지향 프로그래밍(OOP)의 4대 원칙
Java에서는 OOP의 4가지 핵심 개념을 따릅니다.
원칙설명예제
캡슐화(Encapsulation) | 데이터 보호 및 정보 은닉 | private 변수 + getter/setter |
상속(Inheritance) | 기존 클래스를 확장하여 재사용 | class A extends B |
다형성(Polymorphism) | 같은 메서드가 여러 방식으로 동작 | 메서드 오버라이딩, 오버로딩 |
추상화(Abstraction) | 불필요한 정보 숨기고 핵심 기능 제공 | abstract class, interface |
📌 이 4가지 개념을 이해하면, 더 좋은 코드 품질을 유지할 수 있음!
2. 상세 주제 정리
1. 캡슐화(Encapsulation) – 데이터를 보호하는 방법
캡슐화는 클래스 내부의 데이터(변수)를 외부에서 직접 접근하지 못하게 보호하는 개념입니다.
대신 getter/setter 메서드를 사용하여 접근을 제어합니다.
✅ 캡슐화 예제
class BankAccount {
private int balance = 1000; // private 변수 (외부에서 직접 접근 불가)
// Getter (잔액 조회)
public int getBalance() {
return balance;
}
// Setter (입금 기능)
public void deposit(int amount) {
if (amount > 0) {
balance += amount;
}
}
}
public class Main {
public static void main(String[] args) {
BankAccount account = new BankAccount();
account.deposit(500);
System.out.println("잔액: " + account.getBalance()); // 1500 출력
}
}
📌 캡슐화를 사용하면 데이터의 무결성을 유지하고, 불필요한 변경을 방지할 수 있음!
2. 상속(Inheritance) – 코드 재사용을 쉽게 만들기
상속은 기존 클래스를 확장하여 새로운 클래스를 만드는 개념입니다.
즉, 부모 클래스의 기능을 자식 클래스에서 사용할 수 있도록 합니다.
✅ 상속 예제
class Animal {
public void makeSound() {
System.out.println("동물이 소리를 냅니다.");
}
}
// Dog 클래스가 Animal 클래스를 상속받음
class Dog extends Animal {
public void makeSound() { // 메서드 오버라이딩
System.out.println("멍멍!");
}
}
public class Main {
public static void main(String[] args) {
Dog myDog = new Dog();
myDog.makeSound(); // "멍멍!" 출력
}
}
📌 상속을 사용하면 기존 클래스를 재사용하여 코드 중복을 줄일 수 있음!
3. 다형성(Polymorphism) – 같은 코드, 다른 실행 방식
다형성이란 같은 메서드가 다른 방식으로 동작하는 것을 의미합니다.
대표적인 다형성 기법은 메서드 오버로딩(Overloading)과 메서드 오버라이딩(Overriding) 입니다.
✅ (1) 오버로딩(Overloading) – 같은 이름, 다른 매개변수
class MathUtil {
public int add(int a, int b) {
return a + b;
}
public double add(double a, double b) { // 오버로딩
return a + b;
}
public static void main(String[] args) {
MathUtil math = new MathUtil();
System.out.println(math.add(5, 10)); // 정수 덧셈
System.out.println(math.add(3.5, 2.5)); // 실수 덧셈
}
}
✔ 같은 이름이지만, 매개변수 타입이 다르면 다른 메서드로 인식
✅ (2) 오버라이딩(Overriding) – 부모 클래스 메서드 덮어쓰기
class Animal {
public void makeSound() {
System.out.println("동물이 소리를 냅니다.");
}
}
class Dog extends Animal {
@Override
public void makeSound() {
System.out.println("멍멍!");
}
}
public class Main {
public static void main(String[] args) {
Animal animal = new Dog();
animal.makeSound(); // "멍멍!" 출력 (다형성)
}
}
📌 오버라이딩을 통해 부모 클래스에서 정의된 메서드를 자식 클래스에서 재정의하여 동작을 변경할 수 있음!
4. 추상화(Abstraction) – 불필요한 정보 숨기고 핵심 기능만 제공
추상화는 필요한 기능만 노출하고, 내부 구현을 숨기는 개념입니다.
Java에서는 abstract class 또는 interface 를 사용하여 추상화를 구현합니다.
✅ 추상 클래스 사용 예제
abstract class Vehicle {
abstract void move(); // 추상 메서드 (구현 없음)
}
class Car extends Vehicle {
void move() {
System.out.println("자동차가 도로를 달립니다.");
}
}
public class Main {
public static void main(String[] args) {
Vehicle car = new Car();
car.move(); // "자동차가 도로를 달립니다." 출력
}
}
📌 추상 클래스의 특징
✔ abstract 키워드 사용
✔ 객체 생성 불가 (상속을 통해 사용)
✅ 지금까지 객체지향의 4대 원칙을 실전 예제로 배웠어요!
👉 "이제 인터페이스와 추상 클래스의 차이를 배우고 싶다면?"
✅ 다음 회차에서 인터페이스와 추상 클래스의 차이를 배워봅시다!
'IT Developer > Java' 카테고리의 다른 글
Java 기초 <9. 멀티스레딩과 동시성 프로그래밍> (1) | 2025.03.10 |
---|---|
Java 기초 <8. 예외 처리와 사용자 정의 예외> (0) | 2025.03.09 |
Java 기초 <7. 컬렉션 프레임워크 (List, Set, Map) 활용 및 성능 비교> (2) | 2025.03.08 |
Java 기초 <6. 인터페이스와 추상 클래스의 차이> (0) | 2025.03.07 |
Java 기초 <4. 메서드, 생성자, 접근제어자 정리> (1) | 2025.03.05 |
Java 기초 <3. Java 기본 문법과 자료형> (1) | 2025.03.04 |
Java 기초 <2. JDK, JRE, JVM 차이 및 Java 개발 환경 구축> (0) | 2025.03.03 |
Java 기초 <1. Java 소개 및 특징> (4) | 2025.03.02 |