🙋‍♀️ Server

[Java] 객체지향이라는게 뭘까

수댕ʕت̫͡ʔ 2024. 9. 21. 00:24

 

자바 JAVA를 배울 때 가장 먼저 듣는 말이 "자바는 객체 지향 언어이다."라는 말이다.

근데 여기서 "객체지향"이라는 것 무슨 말일까?? 그리고 왜 자바를 객체지향 언어라고 부를까??

 

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

데이터를 중심으로 하는 절차지향 프로그래밍과는 다르게, '객체'라는 개념을 중심으로 프로그램을 설계하는 방법론이다. 객체지향은 현실 세계의 사물과 개념을 프로그래밍 언어에 반영한 방식이다.


2. 객체지향 

객체지향 프로그래밍의 기본은 "객체(Object)"와 "클래스(Class)"이다. 여기서 객체와 클래스는 무엇을 의미할까?

 

1) 객체?

  • 데이터와 그 데이터를 처리하는 동작을 하나로 묶는 단위

 

2) 클래스?

  • 객체를 만드는 설계도

 

이를 통해서, 프로그램의 구조를 효율적으로 만들고 유지보수와 확장성을 높일 수 있다.

여기서! 자바에서 객체지향의 핵심 개념에 대해서 알아보자.

 

1. 캡슐화 : 데이터와 메서드를 하나로 묶고, 외부에서 접근하지 못하게 보호하는 것이다. 이는 데이터의 무결성을 보장해준다.
2. 상속 : 기존 클래스의 속성과 메서드를 물려받아 새로운 클래스를 만들 수 있는 기능이다.
3. 다형성 : 하나의 메서드나 클래스가 여러 형태로 동작할 수 있는 성질이다.
4. 추상화 : 불필요한 세부 사항을 숨기고 중요한 부분만 노출하는 것이다.

 

3. 절차지향적 코드 vs 객체지향적 코드

 

그럼 여기서 절차지향적 코드랑 객체지향적 코드랑 비교해보고, 어떤 것이 더 효율적인지 비교해보자.

 

절차지향적 코드

  • 절차지향적 프로그래밍은 데이터를 배열이나 변수로 관리하고, 이를 처리하는 함수가 따로 존재하는 방식이다.
// 절차지향적으로 작성된 코드
public class CarProgram {

    // 각 차의 속도와 색상을 배열로 관리
    static int[] speeds = new int[3];
    static String[] colors = new String[3];

    public static void main(String[] args) {
        // 각 차의 속도와 색상 설정
        speeds[0] = 100;
        colors[0] = "Red";
        speeds[1] = 120;
        colors[1] = "Blue";
        speeds[2] = 90;
        colors[2] = "Green";

        // 각 차의 정보 출력
        printCarInfo(0);
        printCarInfo(1);
        printCarInfo(2);
    }

    static void printCarInfo(int carIndex) {
        System.out.println("Car " + (carIndex + 1) + " has speed " + speeds[carIndex] + " and color " + colors[carIndex]);
    }
}

 

이렇게 코드를 작성한다면, 색깔과 속도를 추가할 때 번거로워진다.

 

객체지향적 코드

 

이번에는 객체지향으로 바꿔보면 어떨까

 

// 객체지향적으로 작성된 코드
class Car {
    private int speed;
    private String color;

    // 생성자(Constructor)로 속성 초기화
    public Car(int speed, String color) {
        this.speed = speed;
        this.color = color;
    }

    // 자동차 정보를 출력하는 메서드
    public void printCarInfo() {
        System.out.println("This car has speed " + speed + " and color " + color);
    }
}

public class CarProgram {
    public static void main(String[] args) {
        // 자동차 객체 생성
        Car car1 = new Car(100, "Red");
        Car car2 = new Car(120, "Blue");
        Car car3 = new Car(90, "Green");

        // 자동차 정보 출력
        car1.printCarInfo();
        car2.printCarInfo();
        car3.printCarInfo();
    }
}

 

이렇게 각각의 자동차를 객체로 만들어서 속성과 메서드를 묶는다. 이러면 새로운 속성을 추가하거나 수정할 때, 각 객체를 쉽게 적용할 수 있다. 또한 재사용성과 유지보수가 훨씬 수월해진다.

 

 

 

즉, 객체지향 프로그래밍은 재사용성, 유지보수성, 확장성이 뛰어나다.

 

이제 JAVA를 사용할 때는 객체지향적으로 작성하는 습관을 기르자!