어쩌다 알게 된 ƪ(•̃͡•̃͡ ƪ

[개념] 객체 지향 언어 (OOP) 개념 잡기 본문

개발

[개념] 객체 지향 언어 (OOP) 개념 잡기

비니_ 2025. 3. 13. 10:46
728x90

🔹 객체 지향 언어란?

객체 지향 프로그래밍(Object-Oriented Programming, OOP) 언어는 객체(Object)라는 개념을 중심으로 프로그램을 작성하는 방식

- 사물(객체)의 특징(속성)과 행동(메서드)을 코드로 구현하는 방식

 

ex)

객체: 자동차를 만든다고 가정할 때

속성: 색상, 속도, 브랜드

메서드: 가속(), 감속(), 멈춤() 으로 표현

class Car {
    String color;  // 속성
    int speed;     // 속성

    void accelerate() {  // 행동
        speed += 10;
        System.out.println("속도가 " + speed + "km/h로 증가!");
    }
}

 

 

객체 지향 언어의 주요 특징 (4가지)

1️⃣ 캡슐화(Encapsulation)

  • 데이터 보호: 클래스 내부의 변수를 private으로 숨기고, 외부에서는 메서드를 통해 접근
  • 실수로 데이터를 변경하는 것을 방지

🔹 예제: private 변수와 getter/setter 사용

class Person {
    private String name;  // 직접 접근 불가능

    // public 메서드를 통해 접근 가능
    public void setName(String newName) {
        name = newName;
    }

    public String getName() {
        return name;
    }
}

 

2️⃣ 상속(Inheritance)

  • 부모 클래스의 속성과 메서드를 자식 클래스가 물려받는 것
  • 코드 재사용을 쉽게 하고, 유지보수를 용이하게 함

🔹 예제: extends 키워드 사용 (부모-자식 관계)

class Animal {
    void sound() {
        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.sound();  // 부모 클래스의 메서드 사용 가능
        dog.bark();   // 자식 클래스의 메서드 사용
    }
}

 

3️⃣ 다형성(Polymorphism)

  • 같은 메서드 이름이지만, 서로 다른 기능을 수행할 수 있음
  • 오버로딩(Overloading): 같은 클래스 내에서 같은 이름의 메서드를 여러 개 정의
    => 메서드 이름은 같지만, 매개변수의 타입이나 개수가 다를 때 허용
  • 오버라이딩(Overriding): 부모 클래스의 메서드를 자식 클래스에서 재정의

🔹 예제: 오버로딩(Overloading)

class Animal {
    void sound() {  // 첫 번째 메서드 (매개변수 없음)
        System.out.println("동물이 소리를 낸다");
    }

    void sound(String type) {  // 두 번째 메서드 (매개변수 추가)
        System.out.println(type + " 소리를 낸다");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal a = new Animal();
        a.sound();          // "동물이 소리를 낸다" 출력
        a.sound("강아지");  // "강아지 소리를 낸다" 출력
    }
}

 

🔹 예제: 오버라이딩(Overriding)

class Animal {
    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 myDog = new Dog();
        myDog.sound();  // "멍멍!" 출력 (자식 클래스의 메서드 호출)
    }
}

 

4️⃣ 추상화(Abstraction)

  • 불필요한 정보는 숨기고, 중요한 정보만 노출
  • 인터페이스(interface)나 추상 클래스(abstract class) 사용

🔹 예제: 추상 클래스와 인터페이스

abstract class Animal {
    abstract void makeSound();  // 구현은 하지 않고, 자식 클래스에서 반드시 오버라이딩해야 함
}

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

 

 

3. 객체 지향 언어 vs. 절차 지향 언어

비교 객체 지향 언어 (OOP) 절차 지향 언어
기본 단위 객체(Object) 함수(Procedure)
코드 재사용 상속(Inheritance) 가능 코드 복사 필요
데이터 보안 캡슐화(Encapsulation) 가능 데이터 직접 접근
예제 언어 Java, Python, C++, C# C, Pascal

✔ 절차 지향 프로그래밍은 순차적으로 코드를 실행하는 방식이라 함수 중심
✔ 객체 지향 프로그래밍은 데이터를 중심으로 코드를 구성하는 방식이라 객체 중심

 

4. 대표적인 객체 지향 프로그래밍 언어

✅ 객체 지향을 지원하는 대표적인 언어:

  • Java
  • Python
  • C++
  • C#
  • Swift
  • Kotlin
  • JavaScript (ES6 이후 클래스 지원)

💡 하지만 일부 언어는 객체 지향과 절차 지향을 모두 지원하는 경우도 있음!

  • Python, JavaScript는 객체 지향 프로그래밍도 가능하지만, 절차 지향적으로도 작성할 수 있음.

 

✔️ 객체(Object) = 속성(변수) + 행동(메서드)
✔️ 객체 지향 언어(OOP)는 "현실 세계를 코드로 표현하는 방식"
✔️ 4대 핵심 개념: 캡슐화, 상속, 다형성, 추상화
✔️ 객체 지향 언어에는 Java, Python, C++ 등이 포함됨
✔️ OOP 덕분에 코드 재사용, 유지보수, 확장성이 뛰어남! 

728x90
Comments