[Java] 객체 지향 프로그래밍 (OOP) 정리

kim·2025년 4월 2일

Java

목록 보기
2/3

🧱 객체 지향 프로그래밍(OOP) 완전 정복 가이드
객체지향이 뭔지 모르겠다면?
이 글 하나로 개념, 예시, 핵심 특징까지 싹 정리해드립니다.

📌 1. 객체 지향 프로그래밍(OOP)란?
OOP(Object-Oriented Programming)는 소프트웨어를 “객체”라는 단위로 구조화하고 조립하는 방식입니다.

💡 왜 OOP가 필요할까?
생산성 향상: 복잡한 소프트웨어를 더 효율적으로 개발할 수 있음

재사용성: 이미 만든 객체를 재활용하여 시간과 비용 절약

분업화: 객체를 독립적으로 개발하고 조합 가능

🧩 2. 객체(Object)란?
객체란 현실 세계나 개념적인 존재를 소프트웨어로 표현한 것입니다.

예시
현실 객체: 자동차, 집, 자전거, 고양이

개념 객체: 학과, 강의, 주문 등

객체 구성 요소
속성 (필드): 이름, 나이, 색깔 등 정보

동작 (메서드): 웃다, 걷다, 달리다 등 기능

예: 사람 객체
속성 → 이름, 나이
동작 → 웃다, 먹다

🔑 3. 객체지향의 핵심 요소
(1) 현실 세계와 소프트웨어의 연결
현실 세계의 개체(사람, 자동차 등)를 소프트웨어 안에 객체로 모델링

(2) 메서드 호출을 통한 상호작용
객체들은 메서드를 통해 서로 상호작용합니다.

예: 사람 객체가 계산기 객체에 더하기 요청 → 결과 반환

(3) 필드와 메서드의 협력
객체는 속성(필드)동작(메서드)으로 구성되어 내부 데이터를 처리하고 행동을 수행

예:
int result = add(10, 20);
→ 계산기 객체의 add 메서드 호출 → 결과 저장

🎯 쉽게 이해하는 비유
사람 객체는 “웃기”, “먹기” 같은 기능이 있음

자동차는 “달리기”, “멈추기” 등 동작을 가짐
→ OOP는 이런 객체들을 만들고 이들의 상호작용으로 소프트웨어를 설계함

⭐ 4. 객체지향의 3대 특징
1️⃣ 캡슐화 (Encapsulation)
정의: 객체의 속성(필드)행동(메서드)를 하나로 묶고, 외부에서 직접 접근하지 못하게 보호

외부는 공개된 메서드를 통해서만 접근 가능

접근 제한자로 보호 (private, public, protected)

📦 쉽게 이해하기
비유: 약이 들어 있는 캡슐
→ 데이터(속성)를 감싸서 보호하고, 필요한 경우에만 꺼내서 사용

✅ 장점
데이터 보호

유지보수 쉬움 (내부 변경 시 외부 영향 최소화)

💻 코드 예시

class BankAccount {
    private int balance; // 캡슐화된 속성

    public void deposit(int amount) {
        balance += amount;
    }

    public int getBalance() {
        return balance;
    }
}

2️⃣ 상속 (Inheritance)
정의: 부모 클래스의 속성과 메서드를 자식 클래스가 물려받는 것

기존 기능을 재사용하고, 추가 기능을 확장할 수 있음

👨‍👩‍👧 쉽게 이해하기
비유: 부모 → 자식
자식은 부모의 특성(숨쉬기, 먹기 등)을 물려받고, 자신만의 특성(야옹, 멍멍 등)을 가짐

✅ 장점
코드 재사용성 증가

기능 확장 용이

💻 코드 예시

class Animal {
    void eat() {
        System.out.println("먹는다");
    }
}

class Dog extends Animal {
    void bark() {
        System.out.println("멍멍");
    }
}

public class Main {
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.eat();  // 부모 메서드
        dog.bark(); // 자식 메서드
    }
}

3️⃣ 다형성 (Polymorphism)
정의: 같은 이름의 메서드가 다양한 방식으로 동작하는 것

🔁 쉽게 이해하기
비유: 엘리베이터의 “닫기 버튼”
→ 같은 버튼이지만 층에 따라 다르게 작동

동물 클래스의 sound()는 고양이는 “야옹”, 개는 “멍멍”

다형성의 두 가지 유형
오버로딩 (Overloading)
→ 같은 이름의 메서드, 다른 매개변수

오버라이딩 (Overriding)
→ 부모 클래스의 메서드를 자식 클래스에서 재정의

✅ 장점
코드의 유연성과 확장성 증가

💻 오버로딩 예시

    int add(int a, int b) {
        return a + b;
    }

    double add(double a, double b) {
        return a + b;
    }
}```

💻 오버라이딩 예시

class Animal {
    void sound() {
        System.out.println("소리를 낸다");
    }
}

class Cat extends Animal {
    @Override
    void sound() {
        System.out.println("야옹");
    }
}

class Dog extends Animal {
    @Override
    void sound() {
        System.out.println("멍멍");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal animal1 = new Cat();
        Animal animal2 = new Dog();

        animal1.sound(); // 야옹
        animal2.sound(); // 멍멍
    }
}
profile
공부하자

0개의 댓글