네이버 국어사전에 객체는
1. 의사나 행위가 미치는 대상
2. 문장 내에서 동사의 행위가 미치는 대상
3. 작용의 대상이 되는 쪽
대상이란 단어가 공통적으로 나온다. 우리 주변의 대상은 뭘까? 눈에 보이고 실체가 있는 것들이 대상이다. 사람, 개, 고양이 같은 동물이 있고, 자동차, 오토바이, 트럭같은 운송 수단이 있고, 텔레비전, 오디오, 식탁, 소파 등 사물이 있다. 이들이 객체이다.
한편 눈에 보이지 않더라도 객체가 될 수 있다. 운동, 요리, 게임 등 어떤 분야도 객체가 될 수 있다. 2번 문장 내에서 동사의 행위가 미치는 대상이기 때문이다. '나는 운동을 했다', '셰프가 요리를 준비한다', '신작 게임이 발매예정이다' 처럼 행위가 미치는 대상이다.
*객체 지향 프로그래밍이란 어떤 대상에 대하여 포커스를 맞춘 프로그래밍이다.
객체 지향 프로그래밍 이전에 C언어와 같은 절차형 프로그래밍 방식이 있다
절차적 프로그래밍 (Procedural Programming)은 프로씨저(함수) 중심의 프로그래밍이다. 아직도 현역인 C언어가 대표적이다. 절차적이라니까 프로그램이 1번 라인부터 10000번 라인까지 순차적으로 진행되는 것 처럼 들린다.
그게 아니라 프로씨져 (procedure,함수)를 호출하여 값을 전달한다. 프로씨져를 재사용하는 것이 절차적 프로그래밍이다. (번역이 틀린 것은 아닌데 의미 전달에 문제가 없다고 할 수는 없다. 영어 -> 한글 직역의 모호성 때문 인듯)
그 이전 8비트 PC에서는 어셈블러로 GOTO 나 JUMP문을 사용해서 코드를 재사용했었는데 이들은 일명 스파게티 코드로 개발이 어렵다. 과거의 유물이라고 한다.
절차적 프로그래밍보다 한단계 진보한 방식이 객체 지향 프로그래밍이라 할 수 있다.
(동의하지 않는 사람도 있음)
예를 들어 자동차라는 객체의 특징은
- 차종
- 자동차의 색깔
- 탑승 인원 수
- 바퀴의 수
- 최대 시속
- 트렁크의 크기
- 차의 무게
- 차의 전장
- 배기량 / 연비
- 연료통의 크기
이 있고, 객체의 행동은
- 시동을 건다
- 저속으로 달린다.
- 시속을 올린다.
- 속도를 줄인다.
- 브레이크를 밟아 정지한다
- 라디오를 켠다.
- 와이퍼로 앞유리를 닦는다
- 깜빡이를 켠다/끈다
- 비상등을 켠다/끈다
- 창문을 연다/닫는다
가 있다.
객체의 속성과 행동을 하나로 묶어서 코드로 구현한 것이 클래스이다. 클래스에 현실 세계에 있는 객체의 모든 것을 담을 필요는 없다. 핵심내용을 포함하며 된다.
클래스를 만들기 위해서는
1) 객체를 선택한다. (클래스)
2) 객체의 속성들을 변수로 만든다 (멤버 변수)
3) 객체의 행동(기능)을 함수로 만든다 (메서드)
자바 코드로 예제를 들어보자.
<예제>
- 새로운 패키지를 추가하자.
main 함수없이 class를 추가한다. 이름은 Car1로 정했다.
첫째로 멤버 변수들을 선언한다.
public class Car1 {
String name;
String color;
int seat;
double weight;
int maxSpeed;
}
Car1 클래스의 멤버 변수로 차종(name), 색상, 좌석수(seat), 무게, 최대속도를 선언한다. String은 문자열 클래스로 JDK에서 기본 제공하는 객체 자료형이다.
- 메서드는 클래스의 함수이다. 기본적으로 클래스의 함수는 자기 클래스 멤버변수에 접근이 가능하다. 멤버변수에 대한 접근제어자는 다음에 배울 내용이지만 여기서는 메서드를 사용해서 Car1 클래스의 이름과 색상을 출력하는 방법을 알아보겠다.
public class Car1 {
String name;
String color;
int seat;
double weight;
int maxSpeed;
public void showCar1Info( ){
System.out.println("Car1 name : " + name);
System.out.println("Car1 color: " + color);
}
}
class Car1의 괄호 { } 안에 메서드를 추가한다.
* 이제 같은 패키지 안에서 새로운 클래스를 하나 생성한다. Car1View 클래스에 public static void main 을 체크한다.
Car1View 클래스에 메인함수를 만들어서 클래스를 생성한다.
Car1 sedan = new Car1;
sedan.name = "소나타";
sedan.color = "Red";
sedan.showCar1Info( );
클래스는 new 키워드로 동적 메모리할당을 받는다.
Car1 객체 자료형은 사용자가 정의한 클래스이다. Car1 자료형의 객체변수 sedan에 Car1( ) 클래스를 생성하여 참조시킨다. 메모리 공간에 생성된 상태는 인스턴스라고 한다. sedan 인스턴스에 . 점 연산자를 사용하면 그 객체의 멤버변수와 메서드를 사용할 수 있다.
name과 color에 각각 정보를 입력해주고, 메서드를 호출해서 인스턴스에 저장이 잘 되었는지 확인한다.
여기까지 기본적인 클래스의 생성과 멤버변수,메서드의 사용법을 알아봤다.
다음 튜토리얼에서는 메서드에 대해서 알아본다.
자바 튜토리얼 (5-1) 객체 지향 프로그래밍 참고 사이트