객체지향프로그래밍

객체 지향 프로그래밍 (Object-Oriented Programming) 이란? - JAVA

쿠쿠s 2022. 1. 13. 23:18

 

 

 

객체 지향 프로그래밍(OOP)의 정의는 객체 지향 프로그래밍은 컴퓨터 프로그래밍의 패러다임의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것이다. 각각의 객체는 메시지를 주고받고, 데이터를 처리할 수 있다.   

출처 - 위키백과

 

 

 

이 사전적 의미만 보고 이해가 안 가거나 그래서 객체 지향 프로그래밍은 왜 쓰는 거야? 라는 의문이 들을 수 있다.

일단 객제지향이라 하면 비슷한 변수와 기능(함수)들을 묶어 하나의 객체로 만들어 사용합니다.

 

 

 

객체지향언어의 주요 특징으로는 다음과 같습니다.

  • 코드의 재사용성이 높다.
  • 코드의 관리가 용이하다.
  • 신뢰성이 높은 프로그래밍을 가능하게 한다.

재사용성, 유지보수, 중복된 코드의 제거 세가지 관점에서 보면 이해하기 쉬울 것 입니다.

 

 

 

우선은 왜 객체 지향을 해서 프로그래밍을 해야 하는지 코드로 보여드리겠습니다.

 

 

 

예시로 사람이 초코맛 프로틴을 먹는다라고 프로그램을 구현했습니다. (건강은 소중하니까)

class ProteinChoco {
    static int powder = 300;

    static int eatProtein(int eat) {
        powder -= eat;

        return powder;
    }
}

public class People {

    public static void main(String[] args) {
        System.out.println(ProteinChoco.eatProtein(30));
        System.out.println(ProteinChoco.eatProtein(50));
    }
}

결과값 : 270 출력 , 220 출력

 

 

 

상단의 eatProtein 메소드는 매개변수로 eat을 받아 프로틴을 먹은 후의 결괏값을 반환하게 됩니다.

먹고 난 뒤의 프로틴의 양은 유지되어야 하므로 전역 변수로 선언했습니다.

 

 

그런데 만약에 프로틴을 먹는 게 초코맛을 먹는 게 아니라 바닐라맛도 먹고 싶어, 2개의 프로틴 통이 필요한 상황이면 하나의 클래스 가지고는 해결할 수 없습니다. 

 

 

 

그래서 이런 상황을 해결하면 바닐라 프로틴이라는 클래스를 만들어 줘야 합니다.

class ProteinChoco {
    static int powder = 300;

    static int eatProtein(int eat) {
        powder -= eat;

        return powder;
    }
}

class ProteinVainilla {
    static int powder = 300;

    static int eatProtein(int eat) {
        powder -= eat;

        return powder;
    }
}


public class People {

    public static void main(String[] args) {
        System.out.println(ProteinChoco.eatProtein(30));
        System.out.println(ProteinChoco.eatProtein(50));
        System.out.println(ProteinVainilla.eatProtein(30));
    }
}

결과값: 270, 220 , 270 출력

 

 

 

 

만약에 바닐라 프로틴이 아니라. 딸기맛 쿠앤크 맛 등등 여러 가지 맛이 필요할 때마다 클래스를 생성해야 한다면 좋지 않은 방법입니다. 우리에게는 객체 지향 프로그래밍이 있습니다. 이 객체 지향 프로그래밍을 활용해서 우리의 코딩 손실을 막아보도록 하겠습니다.

class Protein{
    int powder = 300;

    int eatProtein(int eat){
        powder -= eat;

        return powder;
    }

}

public class People {

    public static void main(String[] args) {
        Protein ProteinChoco = new Protein();
        Protein ProteinVainilla = new Protein();

        System.out.println(ProteinChoco.eatProtein(30));
        System.out.println(ProteinChoco.eatProtein(50));
        System.out.println(ProteinVainilla.eatProtein(30));
    }
}

결과값: 270, 220 , 270 출력

 

 

 

프로그래밍의 복잡도가 확연하게 줄어들었다!

 

프로틴 클래스로 만든 초코 프로틴과 바닐라 프로틴을 인스턴스화 하여 각각 객체를 만들었다.

이 객체는 다른 객체의 결과와 상관없이 독립적인 값을 유지한다. 우리가 앞으로 먹을 프로틴의 통수가 늘어나도 또 다른 클래스를 늘리는 게 아니라 간단히 객체를 생성만 된다.

 

 

그래서 왜 객체 지향 프로그래밍을 사용하는가?

이처럼 객체 지향 프로그래밍의 특징을 활용하여 프로그램의 복잡도를 낮추기 위해라고 생각할 수 있습니다.

 

 

 

 

 

 

 

 

부족한 점이나 질문이 있다면 댓글을 남겨주시면 최선을 다해 답변드리겠습니다!

 

 

 

 

 

참고 - https://wikidocs.net/156068