객체 지향 프로그래밍 (OOP: Object-Oriented Programming)

상곤·2024년 9월 22일

Java

목록 보기
3/22
post-thumbnail

1. 객체(Object)와 클래스(Class)

  • 객체는 데이터와 행동을 가지는 프로그램의 구성 요소이다.
  • 클래스는 객체를 생성하기 위한 설계도로, 여러 객체들이 동일한 속성과 행동을 공유할 수 있도록 만든다.

객체는 세상의 모든 사물이나 개념을 모델링하는데 사용될 수 있다. 예를 들어, 자동차라는 객체는 색상, 속도와 같은 속성을 가지며, 가속이나 브레이크와 같은 행동을 할 수 있다. 이러한 객체들은 클래스로 정의된다.


2. 캡슐화 (Encapsulation)

캡슐화는 객체의 속성과 행동을 하나로 묶고, 외부에서 객체의 데이터에 직접 접근하지 못하게 하여 정보를 보호하는 것을 말한다. 캡슐화를 통해 데이터는 객체 내부에서만 관리되고, 객체 외부에서는 메서드를 통해 데이터를 간접적으로 조작할 수 있다.

예시 코드

class Car {
    private String color;  // 자동차의 색상
    private int speed;     // 자동차의 현재 속도

    // 생성자: 자동차의 색상과 속도를 설정
    public Car(String color, int speed) {
        this.color = color;
        this.speed = speed;
    }

    // 속도 증가 메서드
    public void accelerate() {
        speed += 10;
        System.out.println("속도를 10 증가합니다. 현재 속도: " + speed);
    }

    // 속도 감소 메서드
    public void brake() {
        speed -= 10;
        System.out.println("속도를 10 감소합니다. 현재 속도: " + speed);
    }

    // 자동차 상태 확인 메서드
    public void showStatus() {
        System.out.println("자동차 색상: " + color + ", 현재 속도: " + speed);
    }
}

public class CarTest {
    public static void main(String[] args) {
        // Car 객체 생성 및 초기 속성 설정
        Car myCar = new Car("빨강", 0);

        // 자동차 상태 확인
        myCar.showStatus();

        // 속도 증가
        myCar.accelerate();
        myCar.showStatus();

        // 속도 감소
        myCar.brake();
        myCar.showStatus();
    }
}

실행 결과

자동차 색상: 빨강, 현재 속도: 0
속도를 10 증가합니다. 현재 속도: 10
자동차 색상: 빨강, 현재 속도: 10
속도를 10 감소합니다. 현재 속도: 0
자동차 색상: 빨강, 현재 속도: 0

이 코드는 자동차 객체를 생성하고, 속도를 조절하며 자동차의 현재 상태를 확인하는 캡슐화를 설명하는 예시이다. 클래스는 객체의 속성과 기능을 하나로 묶어 외부에서 속성에 직접 접근하지 못하게 하고, 메서드를 통해서만 객체의 상태를 변경하거나 확인할 수 있다. Car 클래스는 색상과 속도라는 두 가지 속성을 가지고 있으며, 메서드를 통해 속도 조절과 상태 확인이 이루어진다.


3. 객체 지향 프로그래밍(OOP)의 장점

1. 코드 재사용성: 한 번 정의한 클래스를 재사용할 수 있어, 코드 중복을 줄일 수 있다.
2. 유지보수성: 객체 지향 코드는 모듈화되어 있어, 특정 클래스나 객체의 수정이 필요할 때 다른 코드에 영향을 주지 않고 유지보수가 쉽다.
3. 캡슐화로 인한 데이터 보호: 객체 내부의 데이터를 보호하고, 불필요한 접근을 제한하여 데이터 무결성을 유지한다.
4. 확장성: 클래스와 객체를 사용하여 새로운 기능을 손쉽게 추가하고 확장할 수 있다.


4. 객체 지향 프로그래밍(OOP)의 예시

// Car 클래스 (자동차의 속성 및 행동 정의)
class Car {
    private String color;  // 자동차의 색상
    private int speed;     // 자동차의 속도
    private String brand;  // 자동차의 브랜드

    // 생성자: 자동차 색상, 속도, 브랜드 설정
    public Car(String color, int speed, String brand) {
        this.color = color;
        this.speed = speed;
        this.brand = brand;
    }

    // 자동차 속도 증가 메서드
    public void accelerate() {
        speed += 20;
        System.out.println("자동차의 속도를 20 증가합니다. 현재 속도: " + speed);
    }

    // 자동차 속도 감소 메서드
    public void brake() {
        speed -= 20;
        System.out.println("자동차의 속도를 20 감소합니다. 현재 속도: " + speed);
    }

    // 자동차의 상태를 출력하는 메서드
    public void showStatus() {
        System.out.println("브랜드: " + brand + ", 색상: " + color + ", 현재 속도: " + speed);
    }
}
public class CarTestOOP {
    public static void main(String[] args) {
        // Car 객체 생성 및 초기 속성 설정
        Car myCar = new Car("파랑", 0, "현대");

        // 자동차 상태 확인
        myCar.showStatus();

        // 자동차 속도 증가
        myCar.accelerate();
        myCar.showStatus();

        // 자동차 속도 감소
        myCar.brake();
        myCar.showStatus();
    }
}

실행 결과

브랜드: 현대, 색상: 파랑, 현재 속도: 0
자동차의 속도를 20 증가합니다. 현재 속도: 20
브랜드: 현대, 색상: 파랑, 현재 속도: 20
자동차의 속도를 20 감소합니다. 현재 속도: 0
브랜드: 현대, 색상: 파랑, 현재 속도: 0

이 코드는 객체 지향 프로그래밍(OOP)의 개념을 설명한다. Car 클래스는 자동차의 색상, 속도, 브랜드 같은 속성을 가지고 있고, 속도 증가 및 감소, 자동차의 상태를 출력하는 메서드를 통해 객체의 동작을 정의한다. 이전의 절차 지향 방식과 달리, OOP 방식에서는 자동차의 모든 속성과 행동을 하나의 객체에 묶어 관리한다. 이로써 객체 지향 프로그래밍의 캡슐화와 재사용성을 보여준다.


정리

  • 객체 지향 프로그래밍은 데이터와 그 데이터를 처리하는 메서드를 하나의 단위로 묶어, 유지보수성과 재사용성을 높인다.
  • 캡슐화를 통해 데이터를 보호하고, 외부에서 데이터를 직접적으로 조작하지 못하게 한다.
  • 프로그램의 확장성과 유지보수성을 높이는 방식으로, 현재 가장 많이 사용되는 프로그래밍 패러다임이다.
profile
🫠

0개의 댓글