Java - 객체 지향 언어의 정의, 용어
<객체지향언어란?>
“실제 세계는 사물(객체)로 이루어져 있으며, 발생하는 모든 사건들은 사물간의 상호작용이다” 라는 것이다. 이 개념을 컴퓨터로 그대로 옮겨놓아 언어로 만들어 낸것이 객체지향언어이다. 객체지향언어와 다른 개념으로 C언어와 같은 절차지향언어가 있다. 절차지향이란 프로그램을 시작하면 위에서부터 차례대로 수행하게 된다.
프로그램 진행 중에는 다른 자료형을 선언할 수 없기 때문에 구조체나 자료형들이 모두 미리 정의가 되어 있어야 한다.
말 그대로 절차지향언어는 명령들의 나열이라고 볼 수 있다.
절차지향언어와 객체지향언어의 가장 큰 차이점으로는 클래스와 객체가 있느냐 없느냐의 차이이다.
<클래스란?>
객체를 정의해 놓은 것이다. 클래스의 용도는 객체를 생성하는데 사용되는 것이다.
<객체란?>
클래스에 정의된 내용대로 메모리에 생성된 것을 말한다. (실제로 존재하는 것, 사물 또는 개념) 객체의 용도는 객체가 가지고 있는 기능과 속성에 따라 달라진다.
우리 실생활에 비춰 예를 들어보자.
에어컨설계도(클래스)는 에어컨이라는 제품(객체)을 정의한것이며, 에어컨(객체)를 만드는데 사용된다. 에어컨설계도(클래스)는 단지 에어컨(객체)을 생성하는데 사용될 뿐, 에어컨(객체) 그 자체는 아니다. 여기서 우리가 필요한 것은 무엇인가? 에어컨을 사용하기 위해서는 에어컨 설계도(클래스)가 필요한 것이 아니다. 에어컨(객체)이 필요한 것이다.
다시 프로그래밍으로 넘어와 프로그래밍에서는 먼저 클래스를 작성한 다음, 클래스로부터 객체를 생성하여 사용한다.
그렇다면 클래스를 왜 정의해 놓을까? 한 번 설계도를 생성해 놓으면 그 다음 제품(객체) 만드는 일은 아주 쉽고 수월하기 때문이다. 그래서 클래스를 따로 정의해 놓는 것이다.
JDK는 프로그래밍을 위해 많은 수의 클래스를 기본적으로 지원하고 있다. 우리는 아주 잘 만들어진 클래스들을 객체를 만들어 사용하기만 하면된다.
<객체와 인스턴스?>
클래스로부터 객체를 만드는 과정을 클래스의 인스턴스화라고 한다.
어떤 클래스로부터 만들어진 객체를 클래스의 인스턴스라고 한다.
인스턴스와 객체는 근본적으로는 같지만 객체는 모든 인스턴스를 대표하는 포괄적인 의미를 갖고 있고, 인스턴스는 어떤 클래스로부터 만들어진 것인지를 강조하는 보다 구체적인 의미를 갖는다. (객체 == 인스턴스 라고 생각해도 무방!)
<속성과 기능?>
속성은 멤버변수, 특성, 필드, 상태를 말하고, 기능은 메서드, 함수 등을 말한다.
class TV {
// TV의 속성 (멤버변수)
String color;
boolean power;
int channel;
// TV의 기능 (메서드)
void power() {power =! power;}
void channelUp() {++channel;}
void channelDown() {--channel;}
}
<객체의 생성과 사용>
기본 문법)
클래스명 변수명; // 클래스의 객체를 참조하기 위한 참조변수 선언
변수명 = new 클래스명(); // 클래스의 객체 생성 후, 객체의 주소를 참조변수에 저장.
TV t; // t라는 참조변수 선언
t = new TV(); // new TV() : 객체생성, 객체의 주소를 t에 저장