[JAVA] 13.객체지향이란?

2016. 11. 16. 16:16프로그래밍/JAVA

    목차

객체지향이란?


객체지향 이론은 상속, 캡슐과, 추상화 개념을 중심으로 점차 구체적으로 발전

기존의 프로그래밍 언어와 다른 새로운 것이 아니라, 기존의 프로그래밍 언어에서 몇 가지 새로운 규칙을 추가한 형태의 언어이다.


  작성형식



  내용


객체지향언어의 주요 내용

  • 코드의 재 사용성이 높다

- 새로운 코드를 작성할 때 기존의 코드를 이용하여 쉽게 작성할 수 있다.

  • 코드의 관리가 용이하다

- 코드간의 관계를 이용해서 적은 노력으로 쉽게 코드를 변경할 수 있다.

  • 신뢰성 높은 프로그래밍을 가능하게 한다.

- 제어자와 메서드를 이용해서 데이터를 보호하고 올바른 값을 유지하도록 하며, 코드의 중복을 제거하여 코드의 불일치로 인한 오동작을 방지할 수 있다. 

객체지향언어의 주요 특징 4가지


추상화(abstract)

추상화의 사전적 의미는 특정한 개별 사물과 관련되지 않은 공통된 속성이나 관계 등을 뽑아내는 것이다. 이를 컴퓨터 관점에서 생각해보면, 추상화란 데이터나 프로세스 등을 의미가 비슷한 개념이나 표현으로 정의해 나가는 과정 이면서 동시에 각 개별 개체의 구현에 대한 상세함은 감추는 것, 이것이 추상화라고 할 수 있다.
중요하지 않거나, 주 관심 대상이 아닌 자세한 부분은 감추거나 무시하고, 가장 중요하고, 근간이 되고, 다른 대상들과 구분될 수 있는 면만을 포함하고 있는 모델이며, 공통점을 강조하기 위해 차이점을 제거한 결과물


캡슐화(Encapsulation)

외부로 부터 내부를 감싸 숨기는 것

클래스 내부에 여러 속성과 여러 오퍼레이션을 함께 묶음을 의미한다.
그리고 캡슐화는 클래스 내부의 속성이나 오퍼레이션을 외부에 노출하지 않고 보호하는 것을 의미한다.
이렇게 캡슐화는 묶는 것과 보호하는 것을 생각할 수 있다. 좀 더 상세하게 생각해 보면, 여러 속성과 여러 오퍼레이션을 함께 묶어 클래스로 취급하는 것과 클래스 내부를 외부에서 접근하지 못하도록 보호하는 것이 바로 캡슐화이다.


캡슐화를 통해 묶고 숨김을 생각해 보았다. 그런데 왜 묶어야 하고 숨겨야 하는 것일까?
먼저, 묶음으로 인해 프로그램을 바라보는 단위가 커진다. 이전의 프로그래밍 언어인 C언어는 프로그램을 함수 단위로 구조화할 수 있으나, 프로그램 소스가 커지면 이해하기 어렵고 관리가 힘들어 질 수 있었다.
그러나 객체지향 프로그램에서는 프로그램 소스를 클래스 단위로 바라보게 됨으로써 좀더 복잡하고 커다란 소스코드도 쉽게 이해하게 되었다. 
 왜냐하면 클래스 내부에 여러 함수를 내포할 수 있기 때문에 프로그램 소스 코드를 바라보는 단위가 커졌으며, 그로 인해 프로그램 관리가 좀 더 수월해진 것이다.

두번째, 내부를 숨김으로써 내부를 좀더 자유롭게 변경할 수 있게 되었다.
이전의 함수 중심적인 구조적 프로그래밍 언어에서는 프로그램 내부에서 데이터가 어디서 어떻게 변경되는지 파악하기 어려웠고, 그로 인해 유지 보수가 힘들었기 때문에 자료를 중심으로 함수가 종속되는 구조가 되기도 하였다. 객체 지향에서는 클래스 내부의 데이터를 외부에서 참조하지 못하도록 차단하여 이러한 폐단을 없앨 수 있다. 이렇게 내부의 데이터나 함수를 외부에서 참조하지 못하도록 차단하는 개념을 정보 은닉Information Hiding)이라고 하며 이것이 바로 캡슐화라는 개념이다.

[펌] 객체지향-기본-개념 캡슐화


상속(Inheritance)

상속의 사전적 의미는 자신이 가지고 있는 것을 하위에게 물려주거나, 하위에서 물려받는 것이다. 객체지향에 상속도 마찬가지 의미이며, 클래스의 속성과 오퍼레이션을 하위 클래스에 물려주거나, 상위클래스에서 물려받는 것을 지칭한다.


다형성(Polymorphism)

객체지향 개념에서 가장 중요한 것이 바로 다형성이다. 다형성 이라는 개념은 객체 지향 개념의 꽃이라고 할 수 있을 정도로 중요하고 근사한 개념이다.  웹사전에 따르면, 다형성의 일반적인 의미는 '다양한 형태로 나타날 수 있는 능력'이라고 한다. 또 다른 웹 사전을 보면, 객체지향에서의 다형성은 '여러 클래스들이 동일한 이름의 오퍼레이션을 서비스하도록 하는 것'이라고 한다.


  참조

http://sesok808.tistory.com/31

http://searchstory.tistory.com/entry/%EA%B0%9D%EC%B2%B4%EC%A7%80%ED%96%A5-%EA%B8%B0%EB%B3%B8-%EA%B0%9C%EB%85%90


'프로그래밍 > JAVA' 카테고리의 다른 글

[JAVA] 변수의 선언 위치  (0) 2016.12.06
[JAVA] 클래스(class) / 객체(object)  (0) 2016.11.23
[JAVA] 12. 반복문 - while / do while  (0) 2016.11.14
[JAVA] 11. 반복문 - for  (0) 2016.11.12
[JAVA] 10.조건문 - switch  (0) 2016.11.10