객체 지향 프로그래밍이란???

현정재·2024년 6월 23일
1

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

객체 지향 프로그래밍이란 더 나은 프로그램을 만들기 위한 프로그래밍 패러다임으로, 로직을 상태(state)와 행위(behavior)로 이루어진 객체(Object)로 만드는 것을 의미합니다. 객체 지향 프로그래밍에서는 부모 클래스(객체, 모델)를 기준으로 파생될 수 있는 하위 클래스를 정의하고, 부모 객체로부터 기본적인 스펙(상태)과 기능(행위)을 상속받아 자식에서 그대로 사용하거나 확장된 기능으로 사용할 수 있습니다.

객체 지향 프로그래밍의 개념

  • 객체(Object): 상태와 행위를 가지는 프로그래밍의 기본 단위
  • 클래스(Class): 객체를 정의하는 설계도
  • 상속(Inheritance): 부모 클래스의 특성을 자식 클래스가 물려받는 것
  • 다형성(Polymorphism): 같은 이름의 메서드가 다양한 형태로 동작하는 것
  • 추상화(Abstraction): 불필요한 부분은 숨기고 중요한 부분만 표현하는 것
  • 캡슐화(Encapsulation): 객체의 상태를 외부에서 직접 접근하지 못하게 하고, 메서드를 통해서만 접근하도록 하는 것

예제 코드

아래는 객체 지향 프로그래밍의 기본 개념을 설명하기 위한 예제 코드입니다.

// 자동차 역할
abstract class 자동차 {
    abstract String 출발하다();
    abstract String 정지하다();
}

// 자동차 구현체
class 그랜저 extends 자동차{
    @Override
    String 출발하다() {
        return "오늘은 그랜저 몰아야지, 출발~";
    }
    @Override
    String 정지하다() {
        return "오늘 그랜저 운전은 그만~";
    }
}

// 자동차 구현체
class 쏘나타 extends 자동차{
    @Override
    String 출발하다() {
        return "오늘은 쏘나타 몰아야지, 출발~";
    }
    @Override
    String 정지하다() {
        return "오늘 쏘나타 운전은 그만~";
    }
}

// 운전자 역할
interface 운전자 {
    void 운전해보자(자동차 무슨자동차로);
}

// 운전자 구현
class 차량운전자 implements 운전자{
    @Override
    public void 운전해보자(자동차 무슨자동차로) {
        System.out.println(무슨자동차로.출발하다());
        System.out.println(무슨자동차로.정지하다());
    }
}

public class main {
    public static void main(String[] args) {
        // 실제 차량운전자 나타남 (인스턴스 생성)
        차량운전자 드라이브 = new 차량운전자();

        // 그랜저 출고~!  (인스턴스 생성)
        그랜저 그랜저 = new 그랜저();
        // 그랜저로 운전
        드라이브.운전해보자(그랜저);

        System.out.println("------------------------------------");

        // 쏘나타 출고~!  (인스턴스 생성)
        쏘나타 쏘나타 = new 쏘나타();
        // 쏘나타로 운전
        드라이브.운전해보자(쏘나타);
    }
}

위 예제에서는 "자동차"라는 큰 카테고리의 객체에서 "차량 모델"로 뻗어 나갈 수 있는 구조를 보여줍니다. 
자동차에는 기본적인 상태(차량 번호, 현재 속도, 현재 주유량)와 행위(출발하다, 정지하다)가 존재하며, 
하위 객체에서는 상태(제조사, 모델명, 최고 속도)와 행위(속도 제한, 옵션 기능)를 정의할 수 있습니다.

객체 지향 프로그래밍의 장점
재사용성: 이미 작성된 코드를 재사용하여 개발 시간을 단축하고 중복 코드를 줄일 수 있습니다.
유지보수성: 모듈화된 코드 구조로 인해 유지보수가 용이합니다.
확장성: 새로운 기능을 추가할 때 기존 코드를 수정하지 않고도 확장이 가능합니다.
캡슐화: 데이터와 메서드를 하나의 객체로 묶어 관리함으로써 코드의 가독성과 안전성을 높입니다.

객체 지향 프로그래밍을 통해 중복을 최소한으로 줄이고, 재사용성이 좋은 모듈을 만들어 유지보수성과 
확장성을 높일 수 있습니다. 이는 비슷한 유형의 프로젝트에서 매우 유용하게 활용될 수 있습니다.
profile
wonttock

0개의 댓글