Java

객체지향 프로그래밍

M9M9 2020. 9. 14. 15:25

객체란

동작이나 상태를 갖고 있는 것을 말한다.

예를 들어

자동차라는 객체는 속력과 기어의 상태를 갖고 있으면서, 속력과 기어를 바꿀 수 있는 동작을 가지고 있다.

 

그리고 이걸 프로그래밍에 접목시키면 프로그래밍에서의 상태를 나타내는 멤버 필드와 동작을 나타내는 메소드를 가지고 있는 것을 객체라고 한다.

또는 프로그래밍에서의 객체는 클래스에 정의된 내용대로 메모레이 생성된것을 뜻한다.

 

 

객체지향 프로그래밍(OOP)

(1) 실제 세계의 모든 사건 사고가 사물(객체) 간의 상호작용으로 이루어지는 것처럼,

프로그래밍에서도 객체들 간의 상호작용을 통해 프로그램을 동작시키는 프로그래밍 기법이다.

 

예를 들어

사람이라는 객체는 자동차라는 객체를 동작시킬 수 있다. 이로 인해 운전이 가능해진다.

프로그램에서도 사람이라는 상태(멤버 필드)와 동작(메서드)을 가지고 있는 객체를 만들고, 자동차 객체도 만들어 상호작용을 시켜 프로그램을 동작시킨다.

 

또한, 객체 지향 소프트웨어를 작성하는 것은 컴퓨터 하드웨어 부품을 구입하여서 컴퓨터를 조립하는 것과 비슷하다.

 

(2) 데이터와 함수를 하나로 묶어서 프로그래밍한다.

 

 

※절차지향 프로그래밍이란(PP)

순차적인 처리(위에서 아래로)를 통해 프로그램 전체가 유기적으로 연결되도록 만드는 프로그래밍 기법

 

객체지향 프로그래밍과 절차지향 프로그래밍 차이점

(1) 절차 지향은 순차적인 처리를 통해 프로그램 전체가 유기적으로 연결되도록 하는 프로그래밍 기법이고, 객체지향은 객체 간의 상호작용으로 프로그램을 동작시키는 프로그래밍 기법이다.

 

(2) 절차 지향은 데이터와 함수가 묶여있지 않아 과도한 전역 변수 사용과 프로그램의 이해가 어렵고, 차후에 변경 및 확장이 힘들지만 객체지향은 데이터와 함수가 묶여있어 이러한 점에서 용이하다.

 

(3) 객체지향은 클래스 별로 모듈화 시켜 사람들이 업무 분담하여 개발할 수 있고, 이미 작성된 코드의 재사용을 쉽게 할 수 있지만 절차 지향은 그러지 못합니다.

 

 

객체지향 프로그래밍 장점

1. 코드의 재사용성이 높다.

새로운 코드를 만들 때 기존에 이미 만들어진 소스코드(클래스)를 가져와 이용할 수 있다.

 

2. 유지보수가 쉽다.

기존의 기능을 수정하기 위해 함수의 내용을 바꾸더라도, 캡슐화가 이루어져 있기 때문에 주변에 영향이 적다.

 

3. 신뢰성이 높은 프로그래밍이 가능하다.

접근제어자와 메서드를 이용해서 데이터를 보호하고, 올바른 값을 유지할 수 있다.

중복된 코드를 제거할 수 있다.

 

4. 대형 프로젝트에 적합하다.

클래스 단위로 모듈화 시켜서 개발할 수 있으므로 여러 명이 업무 분담하여 개발하기 쉽다.

 

 

 

객체지향 프로그래밍 특징 4가지

1. 캡슐화 

- 데이터와 함수를 하나로 묶고, 구현 내용을 외부에 감추는 것.

- 중요한 구현 내용을 외부에 감추고, 객체가 외부에 노출한 함수를 통해서만 데이터에 접근하게 하여 내부의 데이터를 보호할 수 있는 정보은닉의 역할을 가져올 수 있다.

-> 내부의 데이터를 감추는 이유: 외부의 잘못된 사용으로 인해 객체가 손상되지 않도록 하는 데 있다( 정보은닉으로 오류 발생도 감소 및 보안성 향상이 된다.)

 

2. 상속

- 기존에 작성된 코드를 재사용하기 위한 기법

- 부모 클래스(이미 작성된 클래스)를 자식 클래스(새로 작성된 클래스)가 상속받아 부모 클래스의 필드와 메서드를 물려받는 것이다.

- 만약 자식 클래스에만 필요한 기능이 있다면 기존의 부모클래스의 메소드를 다시 정의(변경)할 수 있다. (오버 라이딩,오버라이딩 메소드 재정의))

 

3. 추상화

- 객체들에게서 공통된 상태(변수, 데이터)와 동작(함수)을 추출하는 것

 

ex)

- 사화 선생,과학선생에서 공통적으로 추출할 수 있는 데이터.이름, 성별, 나이 , 졸업대학 등, 함수로는 가르치다. 수업을 끝내다 등)

 

 

4. 다형성(폴리모피즘) (캐스팅 관련에서 추가 예정)

- 동일한 이름의 함수를 호출해도 상황에 따라 서로 다른 동작을 하는 것.

- 함수 이름은 같지만 매개변수가 다른 오버 로딩이나,부모 클래스의 함수를 자식 클래스에서 다시 재정의하는 오버 라이딩을 사용할 때 다형성의 특징을 갖는다.