객체는(Object)는 객체 지향 기술의 핵심 개념이다. 객체는 상태와 동작을 가지고 있다.
객체의 상태(state)는 객체(자동차)의 특징값(속성)이다.
자동차로 예를 들어 보겠다. [객체: 자동차(car)]
차량의 색상: red
현재의 기어: 1
현재의 속도: 20km/h
연식: 2014
등등 이런것들이 속성 즉, 객체의 상태(State)가 된다.
그리고 저것들을 변수로 표현을 할때 우리는 필드(field)라고 한다.(필드=변수들=속성,상태)
객체의 동작(Behavior)은 객체(자동차)가 취할수잇는 동작이다.
시동걸기
출발하기
멈추기
가속 하기
감속 하기
기어 변경
등등 이런것들이 객체의 동작(Behavior)이 된다.
그리고 우리는 객체내의 저런 것들을 C언어에서는 함수라하고 자바에선 메소드(Method)라 한다.
클래스(Class)는 객체(Object)들을 여러개 만들기 위한 하나의 틀이라고 생각하면된다.
예를 들어 붕어빵 장사를 한다고 하자.
여기서 붕어빵(객체)을 똑같이 굽는 기계가 클래스(Class)가 되는것이다.
그리고 굽혀나오는 붕어빵이 객체가 되고,
붕어빵(객체)의 속의 팥앙금이나, 슈크림은 필드(Field)라고 한다.
붕어빵을 꺼내던가 속을 슈크림으로 채우던가 크기를 조절한다거나 하는 행위가 메소드(Method)가 된다.
이렇듯 클래스(Class)내에는 여러가지의 필드(Field)와 메소드(Method)를 가진다.
자 이제 클래스를 정의 하고 클래스내에 필드와 메소드를 만들어 보자.
자동차(Car)라는 클래스 생성.
아래처럼 작성하여보자.
public class Test { // 메인 클래스
public static void main(String[] args) {
Car myCar; // myCar라는 참조 변수 선언
myCar = new Car(); // Car라는 틀에 대한 객체1 생성(myCar)
Car yourCar = new Car(); // Car라는 틀에 대한 객체2 생성(yourCar)
myCar.setCar("Red", 100, 4); // (필드의 값을 가진다.)
/* myCar가 참조하는 객체1의 setCar메소드 호출*/
yourCar.setCar("Blue",200, 5); // (필드의 값을 가진다.)
/* yourCar가 참조하는 객체2의 setCar메소드 호출*/
myCar.print(); // (필드의 값을 포함하고 있지 않음)
/* myCar가 참조하는 객체1의 print메소드 호출*/
yourCar.print(); // (필드의 값을 포함하고 있지 않음)
/* yourCar가 참조하는 객체2의 print메소드 호출*/
}
}
class Car { // Car라는 클래스(틀)
String color;
int speed;
int gear;
/* Car라는 클래스가 위의 세가지의 필드를 가지고있다. */
void print(){ // 필드의 값의 출력을 수행하는 메소드
System.out.println("("+speed+", "+gear+", "+color+")");
}
void setCar(String c, int s, int g) { // 필드의 값을 지정해주는 메소드
color = c;
speed = s;
gear = g;
}
}
위의 소스코드를 보면 알겠지만
클래스를 만들고 사용하기 위해서는 반드시 해당 클래스에 대한 객체를 생성 해주어야 한다.
그리고 myCar와 yourCar 가 조금 다르다는걸 알수있는데. 두 의미는 다르지 않다.
다만, myCar는 참조변수를 먼저 선언하고 객체를 생성 한것이지만
yourCar는 참조변수를 선언함과 동시에 객체를 생성하는것 이다.
주로 yourCar와 같은 방식으로 사용한다.
'자바 > JAVA' 카테고리의 다른 글
접근제어자 pulbic, protected, private (0) | 2015.11.06 |
---|---|
public , private , protected 구분 (0) | 2015.11.06 |
JAVA 클래스와 객체 - 캡슐화, 상속, 다형성 (0) | 2015.10.16 |
JAVA 상속 - 부모(슈퍼)클래스와 자식(서브)클래스 (0) | 2015.10.16 |
JDK, JRE, JVM (0) | 2015.10.16 |