객체 지향 프로그래밍이란 더 나은 프로그램을 만들기 위한 프로그래밍 패러다임으로, 로직을 상태(state)와 행위(behavior)로 이루어진 객체(Object)로 만드는 것을 의미합니다. 객체 지향 프로그래밍에서는 부모 클래스(객체, 모델)를 기준으로 파생될 수 있는 하위 클래스를 정의하고, 부모 객체로부터 기본적인 스펙(상태)과 기능(행위)을 상속받아 자식에서 그대로 사용하거나 확장된 기능으로 사용할 수 있습니다.
아래는 객체 지향 프로그래밍의 기본 개념을 설명하기 위한 예제 코드입니다.
// 자동차 역할
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 쏘나타();
// 쏘나타로 운전
드라이브.운전해보자(쏘나타);
}
}
위 예제에서는 "자동차"라는 큰 카테고리의 객체에서 "차량 모델"로 뻗어 나갈 수 있는 구조를 보여줍니다.
자동차에는 기본적인 상태(차량 번호, 현재 속도, 현재 주유량)와 행위(출발하다, 정지하다)가 존재하며,
하위 객체에서는 상태(제조사, 모델명, 최고 속도)와 행위(속도 제한, 옵션 기능)를 정의할 수 있습니다.
객체 지향 프로그래밍의 장점
재사용성: 이미 작성된 코드를 재사용하여 개발 시간을 단축하고 중복 코드를 줄일 수 있습니다.
유지보수성: 모듈화된 코드 구조로 인해 유지보수가 용이합니다.
확장성: 새로운 기능을 추가할 때 기존 코드를 수정하지 않고도 확장이 가능합니다.
캡슐화: 데이터와 메서드를 하나의 객체로 묶어 관리함으로써 코드의 가독성과 안전성을 높입니다.
객체 지향 프로그래밍을 통해 중복을 최소한으로 줄이고, 재사용성이 좋은 모듈을 만들어 유지보수성과
확장성을 높일 수 있습니다. 이는 비슷한 유형의 프로젝트에서 매우 유용하게 활용될 수 있습니다.