객체지향언어는 기존의 프로그래밍언어와 전혀 다른 새로운것이 아니라, 기존의 프로그래밍 언어에 몇 가지 새로운 규칙을 추가한 보다 발전된 형태의 것이다. 이러한 규칙들을 사용해 코드간에 관계를 만들어 보다 유기적으로 프로그램을 구성하는것이 가능하다.
객체지향 언어의 주요 특징
1. 코드의 재사용성이 높다.
- 새로운 코드를 작성할 때 기존의 코드를 이용하여 쉽게 작성할 수 있다.
- 코드의 관리가 용이하다.
- 코드간의 관계를 이용해서 적은 노력으로 쉽게 코드를 변경할 수 있다.
- 신뢰성이 높은 프로그래밍을 가능하게 한다.
- 제어자와 메서드를 이용해서 데이터를 보호하고 올바른 값을 유지하도록 하며, 코드의 중복을 제거하여 코드의 불일치로 인한 오동작을 방지할 수 있다.
객체지향언어의 가장 큰 장점은 '코드의 재사용성이 높고 유지보수가 용이하다' 라는점이다.
앞으로 상속, 다형성과 같은 객체지향 개념을 학습할 때 재사용성과 유지보수 그리고 중복된 코드의 제거, 이 세 가지 관점에서 보면 보다 쉽게 이해할 수 있을 것이다.
객체지향의 사실과 오해
↑ 필자가 객체지향에 대해 더 쉽고 오해없이 읽었던 책이다. 추천!!
클래스란? '객체를 정의해 놓은 것' 또는 클래스는 '객체의 설계도 또는 틀'이라고 정의할 수 있다.
클래스는 객체를 생성하는데 사용되며, 객체는 클래스에 정의된 대로 생성된다.
클래스의 정의
클래스란 객체를 정의해 놓은것
클래스의 용도
클래스는 객체를 생성하는데 사용
객체의 사전적인 정의는 '실제로 존재하는 것'이다. 우리가 주변에서 볼 수 있는 책상, 의자, 자동차와 같은 사물들도 객체이다. 프로그래밍에서의 객체는 클래스에 정의된 내용대로 메모리에 생성된 것을 뜻한다.
객체의 정의
실제로 존재하는 것. 사물 또는 개념
객체의 용도
객체가 가지고 있는 기능과 속성에 따름
유형의 객체
책상, 의자, 자동차, TV와 같은 사물
무형의 객체
수학공식, 프로그램 에러와 같은 논리나 개념
가장 많이 사용하는 비유로써 매우 적절하진 않지만, 붕어빵 틀과 붕어빵을 예로든다.
붕어빵 틀이 클래스이고 붕어빵이 해당 클래스로 만들어진 객체(instance)인 것이다.
객체는 서로 구분이 될 수도 있고 안 될 수도 있다.(팥을 정확히, 밀가루 량도 정확히 같다면 구분이 안될것) 하지만 둘은 엄연히 다른 객체이다. 현실에서는 두개의 똑같은 붕어빵이 있더라도 명확하게 2개의 붕어빵이 따로 있다고 인지하지 않는가?
객체는 속성과 기능, 두 종류의 구성요소로 이루어져 있으며, 일반적으로 객체는 다수의 속성과 다수의 기능을 갖는다.
객체가 가지고 있는 속성과 기능을 그 객체의 멤버(구성원,member)라고 한다.
보다 쉽게 이해할 수 있도록 TV를 예로 들어보자. TV의 속성으로는 전원상태, 크기, 길이, 높이, 색상, 불륨, 채널과 같은 것들이 있으며, 기능으로는 켜기, 끄기, 불륨 높이기, 채널 변경하기 등이 있다.
객체지향 프로그래밍에서는 속성과 기능을 가각 변수와 메서드로 표현한다.
속성(property) -> 멤버변수(variable)
기능(function) -> 메서드(method)
채널 -> int channel
채널 높이기 -> channelUp() {...}
위에서 분석한 내용으로 실제 클래스를 만들어보면 다음과 같다.
class Tv {
String color;
boolean power;
int channel;
void power() { power = !power; }
void channelUp() { channel++; }
void channelDown() { channel--; }
}
클래스로부터 객체를 만드는 과정을 클래스의 인스턴스화(instantiate)라고 하며, 어떤 클래스로부터 만들어진 객체를 그 클래스의 인스턴스(instance)라고 한다.
결국 인스턴스(instance)와 객체는 같은 의미이지만 객체는 모든 인스턴스를 대표하는 포괄적인 의미를 갖고 있으며, 인스턴스는 어떤 클래스로부터 만들어진 것인지를 보다 강조하는 의미를 갖고있다.
이게 무슨말이냐면 '책상은 인스턴스다.'라고 하기 보다는 '책상은 객체이다.' 라는 쪽이, '책상은 책상 클래스의 객체이다.' 라고 하기 보다는 '책상은 책상 클래스의 인스턴스이다.'라고 하는 것이 더 자연스럽다. 그냥 문맥에 따라 구분하면 좋다.