자바(Java)/JAVA 2SE

객체지향 프로그래밍(Object-Oriented Programming) 언어의 특징

본클라쓰 2010. 11. 29. 15:12

 과거의 프로그래밍 방식은 절차지향(Procedural-Oriented)형 프로그래밍이였다면 현재는 객체지향(Object-oriented) 프로그래밍으로 변화하고 있다. 객체지향 프로그래밍은 컴퓨터 프로그래밍의 패러다임의 하나이다. 객체지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 '객체'들의 모임으로 파악하고자 하는 것이다.

 

 과거의 프로그래밍은 논리적인 수행 즉, 입력을 받아 처리한 다음 결과를 내는 것이라는 생각이 지배적이었다. 또한 프로그래밍을 한다는 것은 어떻게 자료를 정의할까 보다는 어떻게 논리를 써나가는 것인가로 간주되었다. 그러나 OOP(Object-oriented Programming)에서는 정말 중요한 것은 논리보다는 오히려 다루고자 하는 객체라는 시각에서 접근하고 있다.

 

 그렇다면 객체지향 프로그래밍이란 무엇인가?

 

 실세계의 모든 객체는 상태(state)와 행위(behavior)라는 두 개의 특성으로 구성되어 있다. 예를 들어 자동차는 색, 네 개의 바퀴, 핸들, 배기량 등의 상태를 가지고 달린다, 멈춘다, 기어를 바꾼다, 속도를 높이거나 낮춘다 등의 행동을 할 수 있다. 즉 상태(state)는 객체가 가지고 있는 속성 또는 특성이고 행동(behavior)는 객체가 가지고 있는 기능 또는 할 수 있는 행동을 말한다.

 

 소프트웨어에서 객체는 실세계의 객체가 갖는 특성이나 상태를 나타내기 위해 변수(filed, variables in some programming language)를 이용하고, 이러한 특성이나 상태를 변경시키는 행동을 표현하기 위해 메소드(methods, functions in some programming language) 즉 함수를 구현하는 것이다. 그리고 이 상태를 나타내는 변수들과 상태를 변경해 주는 행동을 구현한 메소드를 하나로 묶어줌으로써 실세계의 객체를 소프트웨어 객체로 모델링하고 구현할 수 있다.

 

 즉, 객체란 상태(field, attribute 등으로 설명됨)과 메소드(methods)의 집합인 것이다.

 

 하지만 실세계의 객체는 위에서 설명한 자동차의 경우처럼 간단한 경우도 있지만 실제로는 매우 복잡한 구조를 가지고 있다. 따라서 소프트웨어의 객체지향에서는 실세계를 표현하기 위해 다음과 같은 특징을 제공한다.

 

 

1. 캡슐화(Encapsulation)

 

 하나의 문제를 해결하기 위한 데이터와 메소드를 하나의 단위로 묶는다느 것으로써, 클래스의 내부 정의에 대해 외부에서 볼 수 없도록 하는 것이다. 클래스에 정의된 메소드만 사용할 수 있으며, 내부의 속성과 구현을 볼 수 없게 디자인한다. 캡슐화는 객체를 외부의 부정적인 방법으로 사용하는 것을 방지하며, 사용자가 클래스의 내부에 대해 알지 못하는 상황에서도 외부에 공개된 메소드(interface)를 통해 객체 사용을 가능하게 해준다.

 

 

2. 추상화(Abstraction)

 

 모델의 자세한 성질은 무시하고 그들의 일반적인 성질을 나타낸다는 것으로써, 일반적으로 클래스는 클래스로 표현할 서버 클래스의 공통적인 성질과 행위를 일반화하여 디자인되게 되며 그로부터 생성된 객체는 자신의 고유의 성질을 가지게 된다.

 

 

3. 다형성(Polymorphism)

 

 다형성이란 같은 메시지에 대해 클래스에 따라 다른 행위를 하게 되는 특징이다. 일반적으로 같은 이름을 가지는 메소드에 대해 인자(Argument)의 개수와 데이터형(Data Type)에 따라 수행되는 행위가 달라짐을 의미한다. 다형성을 통해서 사용자는 약속된 인터페이스를 따르는 서로 다른 객체를 같은 방식으로 사용할 수 있게 된다.

 

 

4. 상속(Inheritance)

 

 기존에 잇던 클래스를 바탕으로 다른 특성을 추가해 새로운 클래스를 만들 수 있다.

 

 

5. 메시지 전달(Message passing)

 

 객체가 보내는 데이터를 사용하는 과정에서 다른 객체 또는 원하는 메소드에 다른 객체를 요청한다.

 

 

 

■ 객체지향이 제공하는 이점

  1. 모듈화(Modulatiry): 객체로 작성된 소스 코드는 객체별로 유지 관리 된다. 한번만 생성되면 객체는 시스템 상에 쉽게 돌아다닐 수 있다.
  2. 정보 은닉(Information-hiding)
  3. 코드 재사용성(Code re-use)
  4. Pluggability and debugging ease

 객체지향 프로그래밍은 프로그램을 유연하고 변경이 용이하게 만들기 때문에 대규모 소프트웨어 개발에 많이 사용된다. 또한 프로그램을 더 배우기 쉽게 하고 소프트웨어 개발과 보수를 간편하게 하며, 보다 직관적인 코드 분석을 가능하게 하는 장점을 갖고 있따. 그러나 지나친 프로그램의 객체화 경향을 실제 세계의 모습을 그대로 반영하지 못한다는 비판을 받기도 한다.

 

'자바(Java) > JAVA 2SE' 카테고리의 다른 글

상속(Inheritance) 이란?  (0) 2010.11.29
클래스(Class)란?  (0) 2010.11.29
JAVA API 기술문서  (0) 2010.11.29
자바 플랫폼의 종류  (0) 2010.11.29
자바 프로그래밍 언어의 특징  (0) 2010.11.29