객체의 필드는 고유한 데이터, 상세 데이터, 객체 데이터로 분류 할 수 있다.
이처럼 Car 객체는 4개의 고유한 데이터와 3개의 상태 데이터 3개의 객체 데이터를 가질 수 있다.
우리가 정의하여 선언한 클래스의 필드들은 기본적으로 초기값을 설정하지 않을 경우 객체가 생성될 때 자동으로 기본값으로 초기화 된다.
초기값을 공하는 방법 → '필드 타입 필드명 = 값;' 이렇게 초기화 가능하다
ex.) String model = "Gv80"
따라서 해당 필드들은 '선언'만 해놓고 '초기화(할당)'를 해놓지 않은 상태
'필드를 사용'한다는 의미는 필드의 값을 변경 하거나 읽는 것을 의미
클래스에 필드를 정의하여 선언(인스턴스화) 했다 해서 바로 쓸 수 있는건 아니다.
클래스=설계도 일뿐 실제로 필드의 데이터를 가지고 있는 건 '객체'이다.
따라서 객체를 생성한 후 필드를 사용할 수 있다.
정리하면 클래스는 실체 X, 설계도일뿐
Car car = new Car();
이렇게 객체를 생성했으면 참조변수 car를 이용하여 외부에서 객체 내부 필드에 접근하여 사용이 가능하다.
이때 객체의 내부 필드에 접근 하는 방법은 도트(.) 연산자를 사용하면 된다.
→ car.color = "blue";
도트 연산자를 사용하여 외부 객체 내부에서 접근 할 수 있고, 객체 내부 매서드에서도 내부 필드에 접근이 가능하다.
double brakePedal() {
speed = 0;
return speed;
}
이처럼 breakPedal()매서드 내부에서 객체의 필드 speed를 바로 호출해서 사용이 가능하다.
출력값
타이어가 생성되었습니다.
생성자가 호출되었습니다! 객체가 생성됩니다.
car.model =Gv80
car.color =null
car.speed =0.0
car.gear =
car.lights =true
car.tire =week03.Tire@5b480cf9 // 참조형 변수로 주소값이 할당됨
car.door =null
car.model 같은 경우 Car클래스 필드 영역에서 "Gv80"이라는 초기값 값을 주었기 때문에 출력되었고 나머지 값들의 경우 초기값을 주지 않았으므로 기본값으로 출력되었다.
매서드는 객체의 행위를 뜻하며 객체간 협력을 위해 사용됨
매서드 선언 방법 예시
리턴타입 메서드명(매개변수, ...) {
실행할 코드 작성
}
아래의 코드처럼 될 수 있다.
Int testmethod() {
return OOOO ;
}
만일 Int가 void면 return이 필요 없지만, void가 아니라면 return값이 있어야 한다.
double brakePedal() {...} // double 타입 반환
char changeGear(char type) {...} // char 타입 반환
boolean onOffLights() {...} // boolean 타입 반환
void horn() {...} // 반환할 값 없음
리턴 타입이란 매서드가 실행된 후 호출을 한 곳으로 값을 반환할 때 해당 값의 타입을 의미한다.
return 리턴타입의 반환값;
※주의: 매서드에 리턴 타입을 선언하여 반환할 값이 있다면 반드시 return문으로 해당하는 리턴타입의 반환값을 지정해야 한다.
반환할 값이 없을 땐 리턴 타입에 void를 작성해야 한다.
이때 반환값이 없으므로 return문을 반드시 지정할 필요X
매서드는 실행할 때 return문을 만나면 그대로 종료되는데, void 타입일 때 return; 처럼 return문을 사용하면 원하는 지점에서 매서드를 종료할 수 있다.
매개변수는 매서드를 호출할 때 매서드로 전달하려는 값을 받기 위해 사용되는 변수
gasPedal(double kmh, char type)매서드의 매개변수는 double 타입의 kmh, char 타입의 type이다.
해당 매개변수에 값을 전달하기 위해서는 순서와 타입에 맞춰 값을 넣어야 한다. (중요!!)
gasPedal(100, 'D')
전달하려는 값이 없으면 생략 가능하다.
만일 gasPedal('D', 100)으로 입력하면 오류가 발생한다. double 타입와 char 타입이 아니기 때문이다.
가변길이(길이가 변할수 있음)의 매개변수도 사용 가능하다.
double... speeds 처럼 ...을 사용하면 아래처럼 매개값을 ,로 구분하여 개수 상관없이 전달이 가능하다.
carSpeeds(100, 80);
carSpeeds(110, 120, 150);
매서드명( ) ()괄호안에는 매개변수를 명확히,정확히 넣으면 된다.
필드와 마찬가지로 클래스의 매서드를 정의 & 선언 했다고 해서 바로 사용할 수 있는 건 아니다.
클래스는 설계도일 뿐이며, 매서드는 객체의 행위를 정의한 것이다.
따라서 객체를 생성한 후 메서드를 사용할 수 있다.
→ 객체.매서드명() 해서 사용할 수 있다.
Car car = new Car();
이렇게 객체를 생성했으면, 참조변수 car를 이용하여 외부에서 객체 내부의 매서드에 접근하여 호출이 가능하다.
이때 객체의 내부 매서드에 접근하는 방법은 도트(.)연산자를 사용하면 된다.
car.breakPedal();
매서드가 매개변수를 갖고 있다면, 반드시 호출할 때 순서와 타입에 맞게 매개값을 넣어야 한다.
car.gasPedal(100, 'D'); → (100, 'D') 는 매개변수
changeGear는 내부 매서드로 gasPEdal(double kmh. char type) 매서드 내부에서 해당 changeGear(type); 매서드를 바로 호출할 수 있다.
매서드의 리턴타입을 선언하여 반환할 값이 있다면, 변수를 사용하여 받아 줄 수 있다. → ※이때 반드시 리턴 타입과 변수의 타입이 동일하거나 자동 타입 변환이 될 수 있어야 한다.
double 타입 변수 speed를 이용하여 double gasPedal(double kmh, char type) 매서드의 double 타입의 반환 값을 받아 저장할 수 있다.
출력값
타이어가 생성되었습니다.
생성자가 호출되었습니다! 객체가 생성됩니다.
페달 밟기 전 car.gear
speed = 100.0
lights = false
페달 밟고난 후의 car.gear = D
v = 100.0
v = 80.0
v = 110.0
v = 120.0
v = 150.0