JAVA(자바) - 객체 지향 개념
자바의 객체 지향 개념
1-1 객체지향 이론과 역사
자바는 객체지향 언어이다. 자바라는 언어의 등장으로, 객체지향(Object-Oriented)이라는 말은
이제 일반인에게도 어느 정도 익숙하게 느껴지고 있다.
객체지향 이론은 컴퓨터를 통하여 실세계와 같은 환경을 흉내(simulation)내기 위해 발전한 이론이다.
실세계는 사물(객체)로 구성되어 있으며, 이러한 사물들의 상호작용에 의해 실세계는 작동한다.
실세계의 사물을 분석해 보면 사물은 "속성+기능"으로 구성되어 있음을 알 수 있다.
객체지향 이론은 실세계의 모든 사물들을 속성과 기능으로 정의하고, 사물들 간의 상호작용을 정의하여 실제 세계를 흉내내는 이론이다.
객체지향 이론은 1960년대 클래스(class), 상속(inheritance), 캡슐화(encapsulation), 다형성(polymorphism) 등의 개념을 중심으로 발전하였으며, 1960년 노르웨이의 달(Dahl)과 뉘고르(Nygaard)가 개발한 Simula라는 언어를 최초의 객체지향 언어라 할 수 있다.
이 후 객체 지향 언어는 Smalltalk, Eiffel, C++등을 거쳐 발전되어 왔으며, 현재의 자바, C# 언어에 이르고 있다.
객체지향 언어의 역사에서 보듯이, 현재의 시점에서 자바 언어는 객체지향 언어를 대표하는 성공한 언어라 할 수 있다. 이전의 객체지향 언어인 smalltalk는 개발 환경에 대해 의존적이고 실행이 느린 단점을 가지고 있어 많이 사용되지 못한 언어이다. C++언어는 지금도 많이 사용하고는 있지만, 객체지향과 비 객체지향이 혼합된 형태를 가지고 있어 전형적인 객체지향 언어로 보기는 힘들다.
1-2 객체지향과 절차지향
객체지향 언어의 개념과 대비되는 언어로서 절차지향(procedural-oriented) 언어가 있다.
절차지향 언어로 작성된 프로그램에서 프로그램의 기본 단위는 절차(procedure) 또는 함수(function)로 정의된다.
이러한 절차나 함수는 기능을 정의하는데 사용되며,
공통으로 사용되는 속성(데이터)들은 절차나 함수에 의해 공유되는 형태이다.
이러한 형태에서는 공유되는 속성(데이터)의 형태가 바뀌면 모든 함수의 내용이 변경되어야 하는 결정적 단점을 가지고 있다.
반면 객체지향 언어에서는 프로그램의 기본단위가 객체이며, 개체는 "속성+기능"으로 구성된다. 객체지향 언어에서는 모든 요소들을 반드시 객체로 표현해야 하며, 프로그래밍은 이러한 객체의 생성과 생성된 객체의 상호관계를 설정하는 것으로 이루어진다.
1-3 객체지향의 장점
객체지향 프로그램의 개념은 위에서 설명하였듯이 우리들의 실생활과 같은 개념의 프로그램 방식을 제공한다.
객체지향은 기존의 절차지향에 비해 다음과 같은 장점을 가진다.
- 문제를 쉽고 자연스럽게 프로그램화(모델링) 할 수 있다.
우리들이 프로그램을 통하여 해결하려고 하는 문제의 요소들을 객체지향에서는 쉽게 객체들로 모델링할 수 있다.
객체지향에서는 이를 위해 클래스, 캡슐화, 다형성 등 다양한 기능들을 제공하고 있다.
- 쉬운 프로그램의 개발로 인한 생상선을 향상시킬 수 있다.
객체지향 프로그램은 만들어진 객체들을 연결하여 프로그램을 완성하는 방식이며, 이러한 객체들은 완전한 독립성이 유지 된다. 이러한 방식은 데이터에 의존하는 절차지향 방법에 비해 높은 생산성을 나타낼 수 있다.
- 프로그램 모듈을 재사용할 수 있다.
객체지향에서의 객체는 자신이 가지는 데이터와 자신의 작동을 정의하는 기능(메소드)을 가진 독립된 모듈을 의미하며,이러한 독립된 모듈은 다양한 프로그램에서의 재사용될 수 있다. 즉 객체지향에서는 객체라는 모듈을 하드웨어 부품(component)처럼 사용할 수 있다는 커다란 장점을 가진다.
'⚙️ Backend > JAVA' 카테고리의 다른 글
JAVA(자바) - 상속(Inheritance) (0) | 2020.11.09 |
---|---|
JAVA(자바) - 클래스와 객체 (0) | 2020.11.09 |
JAVA (자바) - 파일 입출력 (txt파일 읽기) (0) | 2020.11.04 |
JAVA (자바) - Literal 리터럴 (0) | 2020.11.03 |
JAVA (자바) - Operator 문제 제시 (1~14) (0) | 2020.11.03 |
댓글