[java 이론] 10. 객체 지향 프로그래밍
▽▼▽▼▽▼▽▼▽▼▽▼
이번 포스트의 내용
1. 객체 지향이란?
2. 객체 지향 프로그래밍의 특징
3.객체
4.메시지
△▲△▲△▲△▲△▲△▲
01. 객체 지향이란?
+ 기존에는 절차 지향 프로그래밍(procedural programming)이 많이 사용되었다.
+ 절차 지향 프로그래밍은 문제를 해결하는 절차를 중요하게 생각하는 방법이다.
+ 즉, 프로그램을 짤때 어떤 함수를 사용할까가 이 방법의 핵심이라고 할 수 있다.
+ 최근에는 객체 지향 프로그래밍을 많이 사용한다.
+ 객체 지향 프로그래밍(object-oriented programming:OOP)은 실제 세계가 객체(object)들로 구성되어 있는 것과 비슷하게 소프트웨어도 객체 단위로 작성하는 방법을 말한다.
+ 다양한 기능을 하는 소프트웨어 객체들이 존재하고 이러한 객체들을 조합하여 자기가 원하는 기능을 구현하는 기법이다.
+ 예를 들어 자동차 라는 객체를 만들어 놓으면, 슈퍼카를 만들때에는 자동차라는 객체의 기능(움직인다, 멈춘다 등)을 받아와서 좀더 구체적(엔진, 터보 등)으로 만드는 방법이다. 트럭을 만들때에도 자동차라는 객체의 기능을 받아와서 트럭의 특징을 구체적으로 만든다. 이런식으로 객체단위로 기능을 설정하고 해당 객체를 실행하는 방법이 객체 지향 프로그래밍이다.
▲ 파워 자바, 142쪽, 인피니티북스
02. 객체 지향 프로그래밍의 특징
★ 캡슐화(encapsulation)
+ 지금까지 소프트웨어 개발이 힘들었던 이유는 이전의 사람들이 작성하였던 수많은 코드가 있음에도 불구하고 새로운 소프트웨어를 개발하기 위해서는 다시 처음부터 모든 것을 개발하여야 한다는 점 때문이다.
+ 캡슐화는 데이터와 알고리즘을 캡슐에 넣어서 포장한다는 의미이다. 객체 지향에서는 이 캡슐을 클래스라고 부른다.
+ 만약 자기가 필요로 하는 클래스가 다른 사람에 의해서 작성되어서 이미 존재한다면 언제든지 가져다가 사용할 수 있다. 또 이 클래스는 이미 그 방면의 전문가가 테스트와 디버그를 마쳤기 때문에 안심하고 사용할 수 있다.
+ 따라서 개발자들은 보다 손쉽게 자신이 원하는 애플리케이션을 제작할 수 있다.
+ 캡슐화는 또한 내부의 데이터를 캡슐로 보호하는 역할도 한다. 이것을 정보 은닉(information hiding)이라고 한다.
+ 객체의 내부 데이터를 보호하고 사용자에게는 개체가 제공하는 메소드를 통하여 접근토록 해놓은 것이다.
+ 누구나 함부로 객체 내부의 데이터를 수정할 수 있다면 또 다른 사람이 객체를 사용하때 문제가 생길 수도 있기 때문이다.
★ 상속
+ 상속은 기존의 코드를 재활용하기 위한 기법으로 이미 작성된 클래스(부모 클래스=수퍼 클래스)를 이어받아서 새로운 클래스(자식 클래스=서브 클래스)를 생성하는 기법이다.
+ 자식 클래스는 부모 클래스의 모든 속성과 기능을 물려받는다.
+ 다른 사람의 클래스를 상속받아서 자신이 필요한 부분을 변경하여서 사용하면 된다.
★ 다형성
+ 다형성이란 객체가 취하는 동작이 상황에 따라서 달라지는 것을 말한다.
+ 예를 들어 말하다 라는 기능을 가진 부모 클래스를 상속받아서 개, 고양이 등의 자식 클래스를 만들었다면, 말하다 라는 기능을 사용하였을때, 각각 '멍멍','야옹' 이라는 결과가 나타날 것이다.
+ 프로그래머는 이 기능을 활용하여 보다 효율적인 코딩을 할 수 있다.
★ 객체 지향의 장점 정리
+ 신뢰성 있는 소프트웨어를 쉽게 작성할 수 있다.
+ 코드를 재사용 하기 쉽다.
+ 업그레이드가 쉽다.
+ 디버깅이 쉽다.
03. 객체(object)
+ 객체는 객체 지향 기술의 핵심 개념이다.
+ 객체는 상태와 동작을 가지고 있다.
+ 객체의 상태는 그 객체의 특징 또는 속성을 말한다.
+ 객체의 동작은 그 객체가 하는 기능을 뜻한다.
+ 예를 들어 자동차라는 객체의 경우, 속성은 차종, 색상, 현재 속도, 현재 기어 등등이다.
+ 자동차 객체의 기능은 출발하기, 멈추기, 가속하기, 감속하기 등이다.
+ 객체의 속성과 기능을 소프트웨어에서 각각 필드(field)와 메소드(method)라고 부른다.
▲ 파워 자바, 146쪽, 인피니티북스
04. 메시지
+ 대부분의 유용한 프로그램은 여러 개의 객체를 가지고 있고, 작업은 이 객체들의 상호 작용으로 이루어지며, 객체들이 다른 것들과 상호 작용하기 위해서는 어떤 종류의 통신 메커니즘을 필요로 한다.
+ 객체는 메시지(message)를 통해 다른 객체와 통신하고 서로 상호 작용을 한다.
+ 객체 지향 환경에서 메시지 전달은 "메소드 호출"로 구현된다. 즉, 객체가 다른 객체로 메시지를 보낼때, 실제로는 다른 객체의 메소드를 호출하는 것이다.
+ Car.setSpeed(100); 라는 코드가 있다고 하자.
Car = 메시지를 받는 객체 = Car 라는 이름을 가진 클래스에서
setSpeed = 메시지의 이름 = setSpeed 라는 이름을 가진 메소드(기능)을 사용하여
(100) = 메시지의 매개변수 = 100 이라는 값을 주어라
+ 자바에서는 객체들이 네트워크상의 서로 다른 위치에 존재한다고 해도 서로 메시지를 주고 받을 수 있다.