객체 지향(Object Oriented) 프로그래밍이란

 

현실 세계의 사물을 모델로 하여 문제를 해결하는 개념 중 하나이다.

현실 세계의 모델을 프로그램으로 옮겨와서,

그 모델들 간 상호 작용을 통해 문제를 해결하려는 프로그래밍 방식이다.

 

 

 

(1) 객체

현실 세계의 사물이나 개념을 프로그램 안에서 모델링한 것

ex) 자동차, 사람, 동물 등...

 

 

(2) 클래스

객체를 정의하기 위한 틀로, 설계도 역할을 함. 객체들의 속성과 동작을 정의한다.

클래스를 통해 생성된 객체를 "인스턴스"라고 한다.

 

 

(3) 캡슐화(Encapsulation)

데이터와 메서드를 하나의 단위로 묶고, 외부에서의 직접적 접근을 제한하는 것

데이터 보호 및 코드 모듈화 가능

 

 

(4) 상속(Inheritance)

이미 존재하는 클래스를 기반으로 새로운 클래스를 만들어 확장하는 것

기존 클래스 특성을 물려받아 새로운 클래스에서 재사용 가능하게 함

 

 

(5) 다형성(Polymorphism)

하나의 인터페이스나 기본 클래스를 사용해 여러 형태로 구현할 수 있는 능력

 

 

 

계산기를 프로그램 구현 시,  하나의 계산기 클래스를 생성하고

한 클래스에서 여러 개의 계산기 객체를 생성할 수 있다.

 

 

 

 

 

/* 5-1 객체지향 프로그래밍이란?

 */
//더하기 계산기
class Calculator1 {
    static int result = 0;

    static int add(int num) {
        result += num;
        return result;
    }
}

class Calculator2 {
    static int result = 0;
    static int add(int num) {
        result += num;
        return result;
    }
}
// 객체지향프로그램
class Calculator3 {
    int result = 0;   // static 빠짐

    int add(int num) {
        result += num;
        return result;
    }
    int sub(int num) {
        result -= num;
        return result;
    }
}

public class Day11 {

    public static void main(String[] args) {
        System.out.println(Calculator1.add(3));
        System.out.println(Calculator1.add(4));

        System.out.println(Calculator2.add(3));
        System.out.println(Calculator2.add(7));
        System.out.println();


        Calculator3 cal1 = new Calculator3();   //계산기 1 객체를 생성한다
        Calculator3 cal2 = new Calculator3();   //계산기 2 객체를 생성한다

        System.out.println(cal1.add(3));    // 기존 static result값인 7부터 시작
        System.out.println(cal1.add(4));

        System.out.println(cal2.add(3));
        System.out.println(cal2.sub(2));
    }
}