Java/기본

[Java] 객체지향 프로그래밍

댕주 2024. 11. 14. 01:10

객체지향(Object-Oriented Programming, OOP)

프로그램을 객체(Obejcts)라는 독립적 단위들로 나누고,
이 객체들이 서로 상호작용하며 전채 시스템을 구성하도록 설계하는 프로그래밍 패러다임이다.

 

객체지향의 핵심 개념

  1. 객체 (Object)

    ▶ 객체는 데이터(속성)기능(메서드)를 가진 프로그램의 독립적 단위이다.

    ▶ 예를 들어, 자동차 라는 객체에는 색상, 모델명 같은 속성이 있고, 운전하다(), 정지하다() 와 같은 기능이 있을 수 있다.

  2. 클래스 (Class)

    ▶ 클래스는 객체를 생성하기 위한 설계도이다. 객체의 속성과 기능을 정의한다.

    ▶ 예를 들어, 자동차 라는 클래스를 만들어두면, 이 클래스를 통해 다양한 자동차 객체(예: 빨간 자동차, 파란 자동차)를 생성할 수 있다.

  3. 상속 (Inheritance)

    ▶ 상속은 기존 클래스의 속성과 기능을 다른 클래스가 물려받아 사용하는 개념이다.

    ▶ 예를 들어, 자동차 클래스를 상속받아 스포츠카 클래스를 만들면 자동차의 기본 기능을 모두 물려받고, 터보모드() 같은 추가 기능을 정의할 수 있다.

  4. 다형성 (Polymorphism)

    ▶ 다형성은 하나의 메서드가 여러 클래스에서 다양하게 구현될 수 있는 성질을 의미한다.

    ▶ 예를 들어, 운전하다() 라는 메서드는 자동차와 오토바이 객체에서 각각 다르게 동작할 수 있다.

  5. 캡슐화 (Encapsulation)

    ▶ 캡슐화는 객체의 속성과 기능을 하나로 묶고, 외부에서 접근을 제한하는 것을 의미한다.

    ▶ 예를 들어, 자동차 객체의 속성 연료량을 외부에서 바로 수정할 수 없고, 연류를추가하다() 메서드를 통해서만 연료를 추가할 수 있게 만드는 방식이다.

  6. 추상화 (Abstraction)

    ▶ 추상화는 필요한 속성과 기능만을 모델링하여 복잡한 시스템을 단순화하는 것을 의미한다.

    ▶ 예를 들어, 동물 이라는 추상적 개념에는 이름, 나이, 소리내기() 같은 속성과 같은 기능이 있을 수 있다. 그리고 이를 기반으로 고양이, 강아지 등의 구체적인 객체를 설계할 수 있다.

객체지향 프로그래밍의 장점

  • 코드의 재사용성: 상속과 다형성을 통해 기존 코드를 재사용할 수 있어, 유지보수가 쉬워진다.
  • 유지보수성: 객체별로 독립적인 모듈로 관리가 가능해져 코드 수정이 용이하다.
  • 확장성: 새로운 객체나 기능을 추가할 수 있어 확장성이 뛰어나다.
// 자동차 클래스
class Car {
    private String color;
    private int speed;

    public Car(String color) {
        this.color = color;
    }

    public void drive() {
        System.out.println("자동차가 달립니다.");
    }

    public void stop() {
        System.out.println("자동차가 멈춥니다.");
    }
}

// 스포츠카 클래스 (Car 클래스 상속)
class SportsCar extends Car {
    public SportsCar(String color) {
        super(color);
    }

    public void turboBoost() {
        System.out.println("스포츠카가 터보 모드로 달립니다!");
    }
}

// 메인 클래스
public class Main {
    public static void main(String[] args) {
        SportsCar myCar = new SportsCar("빨간색");
        myCar.drive();       // 부모 클래스의 메서드 호출
        myCar.turboBoost();   // 자식 클래스의 고유 메서드 호출
        myCar.stop();         // 부모 클래스의 메서드 호출
    }
}

 

SprotsCar 클래스는 Car 클래스를 상속받아 driver() 와 stop() 메서드를 사용할 수 있고, 추가로 turboBoost() 라는 새로운 메서드를 가진다.

'Java > 기본' 카테고리의 다른 글

[Java] 참조란 무엇일까?  (1) 2024.11.14
[Java] 컴파일 오류? 런타임 오류?  (1) 2024.11.14
[Java] 순환참조  (1) 2024.11.14
[Java] @NoArgsConstructor, @AllArgsConstructor  (0) 2024.11.12
[Java] 트랜잭션  (0) 2024.11.11